[{"data":1,"prerenderedAt":173048},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-01-lerobot101-act-suan-fa-fu-xian\u002Fch1-xiang-mu-gai-lan-yu-guan-fang-zi-yuan":3,"wiki-doc-nav":61},{"id":4,"title":5,"body":6,"description":53,"extension":54,"meta":55,"navigation":56,"path":57,"seo":58,"stem":59,"__hash__":60},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":8,"toc":50},"minimark",[9,13,17,25,28,34,37,44,47],[10,11,5],"h1",{"id":12},"_1-项目概览与官方资源",[14,15,16],"p",{},"官方文档：",[14,18,19],{},[20,21,22],"a",{"href":22,"rel":23},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24],"nofollow",[14,26,27],{},"官方代码仓库：",[14,29,30],{},[20,31,32],{"href":32,"rel":33},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24],[14,35,36],{},"复现大体流程：",[14,38,39],{},[40,41],"img",{"alt":42,"src":43},"","..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,45,46],{},"本教程的目标是打通这条链路：",[14,48,49],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":42,"searchDepth":51,"depth":51,"links":52},2,[],null,"md",{},true,"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":5,"description":53},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",[62,5177,6285,7705,10694,12045,13534,14623,23386,23398,23996,24022,24146,24387,24452,24470,24483,24516,24640,24809,25008,25188,25393,25529,25624,25661,25674,25984,26725,27433,27454,28474,30105,30256,30269,30281,30582,50394,50409,50426,50459,53331,76679,92824,92845,92958,93079,93849,94512,94873,94911,95017,95117,95160,95186,95247,96901,97002,97027,97518,98018,99098,99381,100123,100625,100637,102653,104317,105820,107518,109435,111354,113376,116846,117278,117741,118490,121434,121782,121804,122160,125467,125479,125882,125905,126052,126219,126424,126725,127282,127939,129870,131468,132117,133611,135042,136277,137971,139723,142133,142249,143184,143395,144280,145515,145743,145756,146911,149323,151691,155012,157489,159133,160910,162923,165975,168155,170682,172876],{"id":63,"title":64,"body":65,"description":42,"extension":54,"meta":5172,"navigation":56,"path":5173,"seo":5174,"stem":5175,"__hash__":5176},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":66,"toc":5144},[67,70,75,78,82,95,99,104,107,110,113,116,119,154,158,161,164,167,170,223,227,246,248,262,265,273,276,1138,1145,1162,1166,1257,1261,1267,1356,1360,1398,1402,1466,1470,1474,1480,1491,1495,1500,1504,1509,1513,1518,1522,1526,1531,1801,1806,1944,1949,2206,2209,2217,2221,2226,2329,2332,2638,2647,2748,2751,2754,2757,2760,3020,3025,3165,3168,3347,3350,3478,3481,3633,3637,3642,3645,3656,3664,3667,3774,3778,3782,3787,3837,3842,3847,3871,3876,3929,3932,3937,4114,4119,4404,4409,4806,4810,4815,4872,4877,4885,4888,5028,5031,5140],[10,68,64],{"id":69},"_1基础入门",[71,72,74],"h2",{"id":73},"_11注释","1.1注释",[14,76,77],{},"\u002F\u002F或者\u002F* *\u002F",[71,79,81],{"id":80},"_12命名","1.2命名",[83,84,85,89,92],"ol",{},[86,87,88],"li",{},"字母数字下划线",[86,90,91],{},"开头必须是字母或_",[86,93,94],{},"不能使用关键词",[71,96,98],{"id":97},"_13数据类型","1.3数据类型",[100,101,103],"h3",{"id":102},"_131整形","1.3.1整形",[14,105,106],{},"short 短整形 2",[14,108,109],{},"int 整形 4",[14,111,112],{},"long 长整形 win4 linux32位4 linux64位8",[14,114,115],{},"long long 长长整形 8",[14,117,118],{},"利用sizeof可以求数据类型占用的内存空间大小",[120,121,125],"pre",{"className":122,"code":123,"language":124,"meta":42,"style":42},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[126,127,128,147],"code",{"__ignoreMap":42},[129,130,133,137,141,144],"span",{"class":131,"line":132},"line",1,[129,134,136],{"class":135},"szBVR","sizeof",[129,138,140],{"class":139},"sVt8B","(",[129,142,143],{"class":135},"int",[129,145,146],{"class":139},")\n",[129,148,149,151],{"class":131,"line":51},[129,150,136],{"class":135},[129,152,153],{"class":139},"(num)\n",[100,155,157],{"id":156},"_132浮点型","1.3.2浮点型",[14,159,160],{},"float 单精度 4节 7位有效数字",[14,162,163],{},"double 双精度 8节 15-16有效数字",[14,165,166],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,168,169],{},"注意点：",[120,171,173],{"className":122,"code":172,"language":124,"meta":42,"style":42},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[126,174,175,200],{"__ignoreMap":42},[129,176,177,180,183,186,190,193,196],{"class":131,"line":132},[129,178,179],{"class":135},"float",[129,181,182],{"class":139}," f1",[129,184,185],{"class":135},"=",[129,187,189],{"class":188},"sj4cs","3.14",[129,191,192],{"class":135},"f",[129,194,195],{"class":139},";",[129,197,199],{"class":198},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[129,201,202,204,207,209,212,215,218,220],{"class":131,"line":51},[129,203,179],{"class":135},[129,205,206],{"class":139}," f2",[129,208,185],{"class":135},[129,210,211],{"class":188},"3",[129,213,214],{"class":135},"e",[129,216,217],{"class":188},"2",[129,219,195],{"class":139},[129,221,222],{"class":198}," \u002F\u002F科学记数法\n",[100,224,226],{"id":225},"_133字符型","1.3.3字符型",[120,228,230],{"className":122,"code":229,"language":124,"meta":42,"style":42},"char ch='a'\n",[126,231,232],{"__ignoreMap":42},[129,233,234,237,240,242],{"class":131,"line":132},[129,235,236],{"class":135},"char",[129,238,239],{"class":139}," ch",[129,241,185],{"class":135},[129,243,245],{"class":244},"sZZnC","'a'\n",[14,247,169],{},[83,249,250,253,256,259],{},[86,251,252],{},"在显示字符型变量时，只能单引号，双引号x",[86,254,255],{},"单引号内只能一个字符，不能字符串",[86,257,258],{},"c和c++字符型变量只占用一个字符",[86,260,261],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,263,264],{},"ASCII码大致由以下两部分组成：",[83,266,267,270],{},[86,268,269],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[86,271,272],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,274,275],{},"ASCII码表格：",[277,278,279,323],"table",{},[280,281,282],"thead",{},[283,284,285,293,298,302,307,311,315,319],"tr",{},[286,287,288,292],"th",{},[289,290,291],"strong",{},"ASCII","值",[286,294,295],{},[289,296,297],{},"控制字符",[286,299,300,292],{},[289,301,291],{},[286,303,304],{},[289,305,306],{},"字符",[286,308,309,292],{},[289,310,291],{},[286,312,313],{},[289,314,306],{},[286,316,317,292],{},[289,318,291],{},[286,320,321],{},[289,322,306],{},[324,325,326,353,378,403,428,454,479,504,530,555,581,607,633,658,684,710,736,760,785,810,835,860,885,910,935,960,985,1011,1036,1061,1086,1112],"tbody",{},[283,327,328,332,335,338,341,344,347,350],{},[329,330,331],"td",{},"0",[329,333,334],{},"NUT",[329,336,337],{},"32",[329,339,340],{},"(space)",[329,342,343],{},"64",[329,345,346],{},"@",[329,348,349],{},"96",[329,351,352],{},"、",[283,354,355,358,361,364,367,370,373,376],{},[329,356,357],{},"1",[329,359,360],{},"SOH",[329,362,363],{},"33",[329,365,366],{},"!",[329,368,369],{},"65",[329,371,372],{},"A",[329,374,375],{},"97",[329,377,20],{},[283,379,380,382,385,388,391,394,397,400],{},[329,381,217],{},[329,383,384],{},"STX",[329,386,387],{},"34",[329,389,390],{},"\"",[329,392,393],{},"66",[329,395,396],{},"B",[329,398,399],{},"98",[329,401,402],{},"b",[283,404,405,407,410,413,416,419,422,425],{},[329,406,211],{},[329,408,409],{},"ETX",[329,411,412],{},"35",[329,414,415],{},"#",[329,417,418],{},"67",[329,420,421],{},"C",[329,423,424],{},"99",[329,426,427],{},"c",[283,429,430,433,436,439,442,445,448,451],{},[329,431,432],{},"4",[329,434,435],{},"EOT",[329,437,438],{},"36",[329,440,441],{},"$",[329,443,444],{},"68",[329,446,447],{},"D",[329,449,450],{},"100",[329,452,453],{},"d",[283,455,456,459,462,465,468,471,474,477],{},[329,457,458],{},"5",[329,460,461],{},"ENQ",[329,463,464],{},"37",[329,466,467],{},"%",[329,469,470],{},"69",[329,472,473],{},"E",[329,475,476],{},"101",[329,478,214],{},[283,480,481,484,487,490,493,496,499,502],{},[329,482,483],{},"6",[329,485,486],{},"ACK",[329,488,489],{},"38",[329,491,492],{},"&",[329,494,495],{},"70",[329,497,498],{},"F",[329,500,501],{},"102",[329,503,192],{},[283,505,506,509,512,515,518,521,524,527],{},[329,507,508],{},"7",[329,510,511],{},"BEL",[329,513,514],{},"39",[329,516,517],{},",",[329,519,520],{},"71",[329,522,523],{},"G",[329,525,526],{},"103",[329,528,529],{},"g",[283,531,532,535,538,541,543,546,549,552],{},[329,533,534],{},"8",[329,536,537],{},"BS",[329,539,540],{},"40",[329,542,140],{},[329,544,545],{},"72",[329,547,548],{},"H",[329,550,551],{},"104",[329,553,554],{},"h",[283,556,557,560,563,566,569,572,575,578],{},[329,558,559],{},"9",[329,561,562],{},"HT",[329,564,565],{},"41",[329,567,568],{},")",[329,570,571],{},"73",[329,573,574],{},"I",[329,576,577],{},"105",[329,579,580],{},"i",[283,582,583,586,589,592,595,598,601,604],{},[329,584,585],{},"10",[329,587,588],{},"LF",[329,590,591],{},"42",[329,593,594],{},"*",[329,596,597],{},"74",[329,599,600],{},"J",[329,602,603],{},"106",[329,605,606],{},"j",[283,608,609,612,615,618,621,624,627,630],{},[329,610,611],{},"11",[329,613,614],{},"VT",[329,616,617],{},"43",[329,619,620],{},"+",[329,622,623],{},"75",[329,625,626],{},"K",[329,628,629],{},"107",[329,631,632],{},"k",[283,634,635,638,641,644,646,649,652,655],{},[329,636,637],{},"12",[329,639,640],{},"FF",[329,642,643],{},"44",[329,645,517],{},[329,647,648],{},"76",[329,650,651],{},"L",[329,653,654],{},"108",[329,656,657],{},"l",[283,659,660,663,666,669,672,675,678,681],{},[329,661,662],{},"13",[329,664,665],{},"CR",[329,667,668],{},"45",[329,670,671],{},"-",[329,673,674],{},"77",[329,676,677],{},"M",[329,679,680],{},"109",[329,682,683],{},"m",[283,685,686,689,692,695,698,701,704,707],{},[329,687,688],{},"14",[329,690,691],{},"SO",[329,693,694],{},"46",[329,696,697],{},".",[329,699,700],{},"78",[329,702,703],{},"N",[329,705,706],{},"110",[329,708,709],{},"n",[283,711,712,715,718,721,724,727,730,733],{},[329,713,714],{},"15",[329,716,717],{},"SI",[329,719,720],{},"47",[329,722,723],{},"\u002F",[329,725,726],{},"79",[329,728,729],{},"O",[329,731,732],{},"111",[329,734,735],{},"o",[283,737,738,741,744,747,749,752,755,758],{},[329,739,740],{},"16",[329,742,743],{},"DLE",[329,745,746],{},"48",[329,748,331],{},[329,750,751],{},"80",[329,753,754],{},"P",[329,756,757],{},"112",[329,759,14],{},[283,761,762,765,768,771,773,776,779,782],{},[329,763,764],{},"17",[329,766,767],{},"DCI",[329,769,770],{},"49",[329,772,357],{},[329,774,775],{},"81",[329,777,778],{},"Q",[329,780,781],{},"113",[329,783,784],{},"q",[283,786,787,790,793,796,798,801,804,807],{},[329,788,789],{},"18",[329,791,792],{},"DC2",[329,794,795],{},"50",[329,797,217],{},[329,799,800],{},"82",[329,802,803],{},"R",[329,805,806],{},"114",[329,808,809],{},"r",[283,811,812,815,818,821,823,826,829,832],{},[329,813,814],{},"19",[329,816,817],{},"DC3",[329,819,820],{},"51",[329,822,211],{},[329,824,825],{},"83",[329,827,828],{},"S",[329,830,831],{},"115",[329,833,834],{},"s",[283,836,837,840,843,846,848,851,854,857],{},[329,838,839],{},"20",[329,841,842],{},"DC4",[329,844,845],{},"52",[329,847,432],{},[329,849,850],{},"84",[329,852,853],{},"T",[329,855,856],{},"116",[329,858,859],{},"t",[283,861,862,865,868,871,873,876,879,882],{},[329,863,864],{},"21",[329,866,867],{},"NAK",[329,869,870],{},"53",[329,872,458],{},[329,874,875],{},"85",[329,877,878],{},"U",[329,880,881],{},"117",[329,883,884],{},"u",[283,886,887,890,893,896,898,901,904,907],{},[329,888,889],{},"22",[329,891,892],{},"SYN",[329,894,895],{},"54",[329,897,483],{},[329,899,900],{},"86",[329,902,903],{},"V",[329,905,906],{},"118",[329,908,909],{},"v",[283,911,912,915,918,921,923,926,929,932],{},[329,913,914],{},"23",[329,916,917],{},"TB",[329,919,920],{},"55",[329,922,508],{},[329,924,925],{},"87",[329,927,928],{},"W",[329,930,931],{},"119",[329,933,934],{},"w",[283,936,937,940,943,946,948,951,954,957],{},[329,938,939],{},"24",[329,941,942],{},"CAN",[329,944,945],{},"56",[329,947,534],{},[329,949,950],{},"88",[329,952,953],{},"X",[329,955,956],{},"120",[329,958,959],{},"x",[283,961,962,965,968,971,973,976,979,982],{},[329,963,964],{},"25",[329,966,967],{},"EM",[329,969,970],{},"57",[329,972,559],{},[329,974,975],{},"89",[329,977,978],{},"Y",[329,980,981],{},"121",[329,983,984],{},"y",[283,986,987,990,993,996,999,1002,1005,1008],{},[329,988,989],{},"26",[329,991,992],{},"SUB",[329,994,995],{},"58",[329,997,998],{},":",[329,1000,1001],{},"90",[329,1003,1004],{},"Z",[329,1006,1007],{},"122",[329,1009,1010],{},"z",[283,1012,1013,1016,1019,1022,1024,1027,1030,1033],{},[329,1014,1015],{},"27",[329,1017,1018],{},"ESC",[329,1020,1021],{},"59",[329,1023,195],{},[329,1025,1026],{},"91",[329,1028,1029],{},"[",[329,1031,1032],{},"123",[329,1034,1035],{},"{",[283,1037,1038,1041,1044,1047,1050,1053,1055,1058],{},[329,1039,1040],{},"28",[329,1042,1043],{},"FS",[329,1045,1046],{},"60",[329,1048,1049],{},"\u003C",[329,1051,1052],{},"92",[329,1054,723],{},[329,1056,1057],{},"124",[329,1059,1060],{},"|",[283,1062,1063,1066,1069,1072,1074,1077,1080,1083],{},[329,1064,1065],{},"29",[329,1067,1068],{},"GS",[329,1070,1071],{},"61",[329,1073,185],{},[329,1075,1076],{},"93",[329,1078,1079],{},"]",[329,1081,1082],{},"125",[329,1084,1085],{},"}",[283,1087,1088,1091,1094,1097,1100,1103,1106,1109],{},[329,1089,1090],{},"30",[329,1092,1093],{},"RS",[329,1095,1096],{},"62",[329,1098,1099],{},">",[329,1101,1102],{},"94",[329,1104,1105],{},"^",[329,1107,1108],{},"126",[329,1110,1111],{},"`",[283,1113,1114,1117,1120,1123,1126,1129,1132,1135],{},[329,1115,1116],{},"31",[329,1118,1119],{},"US",[329,1121,1122],{},"63",[329,1124,1125],{},"?",[329,1127,1128],{},"95",[329,1130,1131],{},"_",[329,1133,1134],{},"127",[329,1136,1137],{},"DEL",[14,1139,1140,1141,1144],{},"ASCII 码大致由以下",[289,1142,1143],{},"两部分组","成：",[1146,1147,1148,1155],"ul",{},[86,1149,1150,1151,1154],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[289,1152,1153],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[86,1156,1157,1158,1161],{},"ASCII 打印字符：数字 ",[289,1159,1160],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[100,1163,1165],{"id":1164},"_134转义字符","1.3.4转义字符",[120,1167,1169],{"className":122,"code":1168,"language":124,"meta":42,"style":42},"\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",[126,1170,1171,1176,1192,1207,1213,1227,1233],{"__ignoreMap":42},[129,1172,1173],{"class":131,"line":132},[129,1174,1175],{"class":198},"\u002F\u002F换行符\n",[129,1177,1178,1181,1184,1187,1189],{"class":131,"line":51},[129,1179,1180],{"class":139},"cout ",[129,1182,1183],{"class":135},"\u003C\u003C",[129,1185,1186],{"class":244},"\"hello world\u002Fn\"",[129,1188,195],{"class":139},[129,1190,1191],{"class":198}," \u002F\u002F就等同于如下：\n",[129,1193,1195,1197,1199,1202,1204],{"class":131,"line":1194},3,[129,1196,1180],{"class":139},[129,1198,1183],{"class":135},[129,1200,1201],{"class":244},"\"hello world\"",[129,1203,1183],{"class":135},[129,1205,1206],{"class":139},"endl;\n",[129,1208,1210],{"class":131,"line":1209},4,[129,1211,1212],{"class":198},"\u002F\u002F反斜杠\n",[129,1214,1216,1218,1220,1223,1225],{"class":131,"line":1215},5,[129,1217,1180],{"class":139},[129,1219,1183],{"class":135},[129,1221,1222],{"class":244},"\"\u002F\u002F\"",[129,1224,1183],{"class":135},[129,1226,1206],{"class":139},[129,1228,1230],{"class":131,"line":1229},6,[129,1231,1232],{"class":198},"\u002F\u002F水平制表符\n",[129,1234,1236,1238,1240,1243,1246,1249,1251,1254],{"class":131,"line":1235},7,[129,1237,1180],{"class":139},[129,1239,1183],{"class":135},[129,1241,1242],{"class":244},"\"aaaa",[129,1244,1245],{"class":188},"\\t",[129,1247,1248],{"class":244},"helloworld\"",[129,1250,1183],{"class":135},[129,1252,1253],{"class":139},"endl;",[129,1255,1256],{"class":198}," \u002F\u002F输出窗口时有对齐效果\n",[100,1258,1260],{"id":1259},"_135字符串型","1.3.5字符串型",[14,1262,1263,1264,1266],{},"char 变量名",[129,1265],{},"=\"字符串值\"",[120,1268,1270],{"className":122,"code":1269,"language":124,"meta":42,"style":42},"\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",[126,1271,1272,1277,1282,1287,1292,1306,1319,1324,1330,1342],{"__ignoreMap":42},[129,1273,1274],{"class":131,"line":132},[129,1275,1276],{"class":198},"\u002F\u002Fc风格字符串\n",[129,1278,1279],{"class":131,"line":51},[129,1280,1281],{"class":198},"\u002F\u002F注意事项：\n",[129,1283,1284],{"class":131,"line":1194},[129,1285,1286],{"class":198},"\u002F\u002F1.char字符串名[]\n",[129,1288,1289],{"class":131,"line":1209},[129,1290,1291],{"class":198},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[129,1293,1294,1296,1299,1301,1303],{"class":131,"line":1215},[129,1295,236],{"class":135},[129,1297,1298],{"class":139}," str[]",[129,1300,185],{"class":135},[129,1302,1201],{"class":244},[129,1304,1305],{"class":139},";\n",[129,1307,1308,1310,1312,1315,1317],{"class":131,"line":1229},[129,1309,1180],{"class":139},[129,1311,1183],{"class":135},[129,1313,1314],{"class":139},"str",[129,1316,1183],{"class":135},[129,1318,1206],{"class":139},[129,1320,1321],{"class":131,"line":1235},[129,1322,1323],{"class":198},"\u002F\u002Fc++风格字符串\n",[129,1325,1327],{"class":131,"line":1326},8,[129,1328,1329],{"class":198},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[129,1331,1333,1336,1338,1340],{"class":131,"line":1332},9,[129,1334,1335],{"class":139},"string str2",[129,1337,185],{"class":135},[129,1339,1201],{"class":244},[129,1341,1305],{"class":139},[129,1343,1345,1347,1349,1352,1354],{"class":131,"line":1344},10,[129,1346,1180],{"class":139},[129,1348,1183],{"class":135},[129,1350,1351],{"class":139},"str2",[129,1353,1183],{"class":135},[129,1355,1206],{"class":139},[100,1357,1359],{"id":1358},"_136布尔类型bool","1.3.6布尔类型bool",[120,1361,1363],{"className":122,"code":1362,"language":124,"meta":42,"style":42},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[126,1364,1365,1380],{"__ignoreMap":42},[129,1366,1367,1370,1373,1375,1378],{"class":131,"line":132},[129,1368,1369],{"class":135},"bool",[129,1371,1372],{"class":139}," flag",[129,1374,185],{"class":135},[129,1376,1377],{"class":188},"true",[129,1379,1305],{"class":139},[129,1381,1382,1385,1388,1391,1393,1395],{"class":131,"line":51},[129,1383,1384],{"class":139},"cout",[129,1386,1387],{"class":135},"\u003C\u003Csizeof",[129,1389,1390],{"class":139},"(flag)",[129,1392,1183],{"class":135},[129,1394,1253],{"class":139},[129,1396,1397],{"class":198}," \u002F\u002F查看布尔占内存空间\n",[71,1399,1401],{"id":1400},"_14键盘输入cin","1.4键盘输入cin",[120,1403,1405],{"className":122,"code":1404,"language":124,"meta":42,"style":42},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[126,1406,1407,1420,1437,1448],{"__ignoreMap":42},[129,1408,1409,1411,1414,1416,1418],{"class":131,"line":132},[129,1410,143],{"class":135},[129,1412,1413],{"class":139}," a",[129,1415,185],{"class":135},[129,1417,331],{"class":188},[129,1419,1305],{"class":139},[129,1421,1422,1424,1426,1429,1431,1433,1435],{"class":131,"line":51},[129,1423,1384],{"class":139},[129,1425,1183],{"class":135},[129,1427,1428],{"class":244},"\"请给整型变量a赋值\"",[129,1430,1183],{"class":135},[129,1432,20],{"class":139},[129,1434,1183],{"class":135},[129,1436,1206],{"class":139},[129,1438,1439,1442,1445],{"class":131,"line":1194},[129,1440,1441],{"class":139},"cin ",[129,1443,1444],{"class":135},">>",[129,1446,1447],{"class":139}," a;\n",[129,1449,1450,1452,1454,1457,1460,1462,1464],{"class":131,"line":1209},[129,1451,1180],{"class":139},[129,1453,1183],{"class":135},[129,1455,1456],{"class":244}," \"整型变量a=\"",[129,1458,1459],{"class":135}," \u003C\u003C",[129,1461,20],{"class":139},[129,1463,1183],{"class":135},[129,1465,1206],{"class":139},[71,1467,1469],{"id":1468},"_15运算符","1.5运算符",[100,1471,1473],{"id":1472},"_151算术运算符","1.5.1算术运算符",[14,1475,1476,1479],{},[40,1477],{"alt":42,"src":1478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[83,1481,1482,1485,1488],{},[86,1483,1484],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[86,1486,1487],{},"两个小数不可以做取模运算",[86,1489,1490],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[100,1492,1494],{"id":1493},"_152赋值运算符","1.5.2赋值运算符",[14,1496,1497],{},[40,1498],{"alt":42,"src":1499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[100,1501,1503],{"id":1502},"_153比较运算符","1.5.3比较运算符",[14,1505,1506],{},[40,1507],{"alt":42,"src":1508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[100,1510,1512],{"id":1511},"_154逻辑运算符","1.5.4逻辑运算符",[14,1514,1515],{},[40,1516],{"alt":42,"src":1517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[71,1519,1521],{"id":1520},"_16程序流程结构","1.6程序流程结构",[100,1523,1525],{"id":1524},"_161选择结构","1.6.1选择结构",[83,1527,1528],{},[86,1529,1530],{},"if语句\n单行、多行、多条件if语句",[120,1532,1534],{"className":122,"code":1533,"language":124,"meta":42,"style":42},"\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",[126,1535,1536,1541,1556,1561,1575,1580,1585,1594,1607,1611,1624,1629,1635,1640,1654,1659,1665,1686,1691,1705,1710,1739,1744,1761,1766,1771,1776,1790,1795],{"__ignoreMap":42},[129,1537,1538],{"class":131,"line":132},[129,1539,1540],{"class":198},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[129,1542,1543,1546,1549,1551,1554],{"class":131,"line":51},[129,1544,1545],{"class":135},"if",[129,1547,1548],{"class":139},"(score",[129,1550,1099],{"class":135},[129,1552,1553],{"class":188},"600",[129,1555,146],{"class":139},[129,1557,1558],{"class":131,"line":1194},[129,1559,1560],{"class":139},"{\n",[129,1562,1563,1566,1568,1571,1573],{"class":131,"line":1209},[129,1564,1565],{"class":139},"    cout",[129,1567,1183],{"class":135},[129,1569,1570],{"class":244},"'这是单行if语句'",[129,1572,1183],{"class":135},[129,1574,1206],{"class":139},[129,1576,1577],{"class":131,"line":1215},[129,1578,1579],{"class":139},"}\n",[129,1581,1582],{"class":131,"line":1229},[129,1583,1584],{"class":198},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[129,1586,1587,1589,1591],{"class":131,"line":1235},[129,1588,1441],{"class":139},[129,1590,1444],{"class":135},[129,1592,1593],{"class":139}," score\n",[129,1595,1596,1598,1600,1603,1605],{"class":131,"line":1326},[129,1597,1545],{"class":135},[129,1599,1548],{"class":139},[129,1601,1602],{"class":135},"\u003C=",[129,1604,1553],{"class":188},[129,1606,146],{"class":139},[129,1608,1609],{"class":131,"line":1332},[129,1610,1560],{"class":139},[129,1612,1613,1615,1617,1620,1622],{"class":131,"line":1344},[129,1614,1565],{"class":139},[129,1616,1444],{"class":135},[129,1618,1619],{"class":244},"\"小于等于600\"",[129,1621,1183],{"class":135},[129,1623,1206],{"class":139},[129,1625,1627],{"class":131,"line":1626},11,[129,1628,1579],{"class":139},[129,1630,1632],{"class":131,"line":1631},12,[129,1633,1634],{"class":135},"else\n",[129,1636,1638],{"class":131,"line":1637},13,[129,1639,1560],{"class":139},[129,1641,1643,1645,1647,1650,1652],{"class":131,"line":1642},14,[129,1644,1565],{"class":139},[129,1646,1444],{"class":135},[129,1648,1649],{"class":244},"\"大于600\"",[129,1651,1444],{"class":135},[129,1653,1206],{"class":139},[129,1655,1657],{"class":131,"line":1656},15,[129,1658,1579],{"class":139},[129,1660,1662],{"class":131,"line":1661},16,[129,1663,1664],{"class":198},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[129,1666,1668,1670,1673,1675,1677,1680,1682,1684],{"class":131,"line":1667},17,[129,1669,1545],{"class":135},[129,1671,1672],{"class":139}," (",[129,1674,331],{"class":188},[129,1676,1049],{"class":135},[129,1678,1679],{"class":139},"num",[129,1681,1049],{"class":135},[129,1683,450],{"class":188},[129,1685,146],{"class":139},[129,1687,1689],{"class":131,"line":1688},18,[129,1690,1560],{"class":139},[129,1692,1694,1696,1698,1701,1703],{"class":131,"line":1693},19,[129,1695,1565],{"class":139},[129,1697,1183],{"class":135},[129,1699,1700],{"class":244},"\"小于100\"",[129,1702,1183],{"class":135},[129,1704,1206],{"class":139},[129,1706,1708],{"class":131,"line":1707},20,[129,1709,1579],{"class":139},[129,1711,1713,1716,1719,1722,1725,1727,1730,1732,1734,1737],{"class":131,"line":1712},21,[129,1714,1715],{"class":135},"else",[129,1717,1718],{"class":135}," if",[129,1720,1721],{"class":139}," (nmu",[129,1723,1724],{"class":135},">=",[129,1726,450],{"class":188},[129,1728,1729],{"class":135},"&&",[129,1731,1679],{"class":139},[129,1733,1049],{"class":135},[129,1735,1736],{"class":188},"200",[129,1738,146],{"class":139},[129,1740,1742],{"class":131,"line":1741},22,[129,1743,1560],{"class":139},[129,1745,1747,1749,1751,1754,1756,1758],{"class":131,"line":1746},23,[129,1748,1565],{"class":139},[129,1750,1183],{"class":135},[129,1752,1753],{"class":244},"\"不小于100且小于200\"",[129,1755,1183],{"class":135},[129,1757,1253],{"class":139},[129,1759,1760],{"class":198}," \u002F\u002F可以无限else if,python中是elif：\n",[129,1762,1764],{"class":131,"line":1763},24,[129,1765,1579],{"class":139},[129,1767,1769],{"class":131,"line":1768},25,[129,1770,1634],{"class":135},[129,1772,1774],{"class":131,"line":1773},26,[129,1775,1560],{"class":139},[129,1777,1779,1781,1783,1786,1788],{"class":131,"line":1778},27,[129,1780,1565],{"class":139},[129,1782,1183],{"class":135},[129,1784,1785],{"class":244},"\"不小于200\"",[129,1787,1183],{"class":135},[129,1789,1206],{"class":139},[129,1791,1793],{"class":131,"line":1792},28,[129,1794,1579],{"class":139},[129,1796,1798],{"class":131,"line":1797},29,[129,1799,1800],{"class":198},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[83,1802,1803],{"start":51},[86,1804,1805],{},"三目运算符",[120,1807,1809],{"className":122,"code":1808,"language":124,"meta":42,"style":42},"\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",[126,1810,1811,1816,1821,1847,1869,1886,1891,1914,1929],{"__ignoreMap":42},[129,1812,1813],{"class":131,"line":132},[129,1814,1815],{"class":198},"\u002F\u002F创建三个变量a,b,c\n",[129,1817,1818],{"class":131,"line":51},[129,1819,1820],{"class":198},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[129,1822,1823,1825,1827,1829,1831,1834,1836,1838,1841,1843,1845],{"class":131,"line":1194},[129,1824,143],{"class":135},[129,1826,1413],{"class":139},[129,1828,185],{"class":135},[129,1830,839],{"class":188},[129,1832,1833],{"class":139},",b",[129,1835,185],{"class":135},[129,1837,585],{"class":188},[129,1839,1840],{"class":139},",c",[129,1842,185],{"class":135},[129,1844,331],{"class":188},[129,1846,1305],{"class":139},[129,1848,1849,1851,1853,1856,1858,1860,1862,1864,1866],{"class":131,"line":1209},[129,1850,427],{"class":139},[129,1852,185],{"class":135},[129,1854,1855],{"class":139},"(a",[129,1857,1099],{"class":135},[129,1859,402],{"class":139},[129,1861,1125],{"class":135},[129,1863,20],{"class":139},[129,1865,998],{"class":135},[129,1867,1868],{"class":139},"b)\n",[129,1870,1871,1873,1875,1878,1880,1882,1884],{"class":131,"line":1215},[129,1872,1384],{"class":139},[129,1874,1183],{"class":135},[129,1876,1877],{"class":244},"\"c=\"",[129,1879,1183],{"class":135},[129,1881,427],{"class":139},[129,1883,1183],{"class":135},[129,1885,1206],{"class":139},[129,1887,1888],{"class":131,"line":1229},[129,1889,1890],{"class":198},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[129,1892,1893,1895,1897,1899,1901,1903,1905,1908,1910,1912],{"class":131,"line":1235},[129,1894,1855],{"class":139},[129,1896,1099],{"class":135},[129,1898,402],{"class":139},[129,1900,1125],{"class":135},[129,1902,20],{"class":139},[129,1904,998],{"class":135},[129,1906,1907],{"class":139},"b)",[129,1909,185],{"class":135},[129,1911,450],{"class":188},[129,1913,1305],{"class":139},[129,1915,1916,1918,1920,1922,1924,1926],{"class":131,"line":1326},[129,1917,1384],{"class":139},[129,1919,1183],{"class":135},[129,1921,20],{"class":139},[129,1923,1183],{"class":135},[129,1925,1253],{"class":139},[129,1927,1928],{"class":198}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[129,1930,1931,1933,1935,1937,1939,1941],{"class":131,"line":1332},[129,1932,1384],{"class":139},[129,1934,1183],{"class":135},[129,1936,402],{"class":139},[129,1938,1183],{"class":135},[129,1940,1253],{"class":139},[129,1942,1943],{"class":198}," \u002F\u002F10   a>b,b还是原值\n",[83,1945,1946],{"start":1194},[86,1947,1948],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[120,1950,1952],{"className":122,"code":1951,"language":124,"meta":42,"style":42},"\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",[126,1953,1954,1959,1967,1981,1991,1995,2009,2022,2032,2040,2045,2070,2091,2113,2134,2156,2177,2197,2202],{"__ignoreMap":42},[129,1955,1956],{"class":131,"line":132},[129,1957,1958],{"class":198},"\u002F\u002F案例-电影打分\n",[129,1960,1961,1964],{"class":131,"line":51},[129,1962,1963],{"class":135},"#include",[129,1965,1966],{"class":244},"\u003Ciostream>\n",[129,1968,1969,1972,1975,1979],{"class":131,"line":1194},[129,1970,1971],{"class":135},"using",[129,1973,1974],{"class":135}," namespace",[129,1976,1978],{"class":1977},"sScJk"," std",[129,1980,1305],{"class":139},[129,1982,1983,1985,1988],{"class":131,"line":1209},[129,1984,143],{"class":135},[129,1986,1987],{"class":1977}," main",[129,1989,1990],{"class":139},"()\n",[129,1992,1993],{"class":131,"line":1215},[129,1994,1560],{"class":139},[129,1996,1997,2000,2003,2005,2007],{"class":131,"line":1229},[129,1998,1999],{"class":135},"    int",[129,2001,2002],{"class":139}," score",[129,2004,185],{"class":135},[129,2006,331],{"class":188},[129,2008,1305],{"class":139},[129,2010,2011,2013,2015,2018,2020],{"class":131,"line":1235},[129,2012,1565],{"class":139},[129,2014,1183],{"class":135},[129,2016,2017],{"class":244},"\"电影打分：\"",[129,2019,1183],{"class":135},[129,2021,1206],{"class":139},[129,2023,2024,2027,2029],{"class":131,"line":1326},[129,2025,2026],{"class":139},"    cin",[129,2028,1444],{"class":135},[129,2030,2031],{"class":139},"score;\n",[129,2033,2034,2037],{"class":131,"line":1332},[129,2035,2036],{"class":135},"    switch",[129,2038,2039],{"class":139},"(score)\n",[129,2041,2042],{"class":131,"line":1344},[129,2043,2044],{"class":139},"    {\n",[129,2046,2047,2050,2053,2056,2058,2061,2063,2065,2068],{"class":131,"line":1626},[129,2048,2049],{"class":135},"        case",[129,2051,2052],{"class":188}," 10",[129,2054,2055],{"class":139},":cout",[129,2057,1183],{"class":135},[129,2059,2060],{"class":244},"\"经典\"",[129,2062,1183],{"class":135},[129,2064,1253],{"class":139},[129,2066,2067],{"class":135},"break",[129,2069,1305],{"class":139},[129,2071,2072,2074,2077,2079,2081,2083,2085,2087,2089],{"class":131,"line":1631},[129,2073,2049],{"class":135},[129,2075,2076],{"class":188}," 9",[129,2078,2055],{"class":139},[129,2080,1183],{"class":135},[129,2082,2060],{"class":244},[129,2084,1183],{"class":135},[129,2086,1253],{"class":139},[129,2088,2067],{"class":135},[129,2090,1305],{"class":139},[129,2092,2093,2095,2098,2100,2102,2105,2107,2109,2111],{"class":131,"line":1637},[129,2094,2049],{"class":135},[129,2096,2097],{"class":188}," 8",[129,2099,2055],{"class":139},[129,2101,1183],{"class":135},[129,2103,2104],{"class":244},"\"非常好\"",[129,2106,1183],{"class":135},[129,2108,1253],{"class":139},[129,2110,2067],{"class":135},[129,2112,1305],{"class":139},[129,2114,2115,2117,2120,2122,2124,2126,2128,2130,2132],{"class":131,"line":1642},[129,2116,2049],{"class":135},[129,2118,2119],{"class":188}," 7",[129,2121,2055],{"class":139},[129,2123,1183],{"class":135},[129,2125,2104],{"class":244},[129,2127,1183],{"class":135},[129,2129,1253],{"class":139},[129,2131,2067],{"class":135},[129,2133,1305],{"class":139},[129,2135,2136,2138,2141,2143,2145,2148,2150,2152,2154],{"class":131,"line":1656},[129,2137,2049],{"class":135},[129,2139,2140],{"class":188}," 6",[129,2142,2055],{"class":139},[129,2144,1183],{"class":135},[129,2146,2147],{"class":244},"\"一般\"",[129,2149,1183],{"class":135},[129,2151,1253],{"class":139},[129,2153,2067],{"class":135},[129,2155,1305],{"class":139},[129,2157,2158,2160,2163,2165,2167,2169,2171,2173,2175],{"class":131,"line":1661},[129,2159,2049],{"class":135},[129,2161,2162],{"class":188}," 5",[129,2164,2055],{"class":139},[129,2166,1183],{"class":135},[129,2168,2147],{"class":244},[129,2170,1183],{"class":135},[129,2172,1253],{"class":139},[129,2174,2067],{"class":135},[129,2176,1305],{"class":139},[129,2178,2179,2182,2184,2186,2189,2191,2193,2195],{"class":131,"line":1667},[129,2180,2181],{"class":135},"        default",[129,2183,2055],{"class":139},[129,2185,1183],{"class":135},[129,2187,2188],{"class":244},"\"烂片\"",[129,2190,1183],{"class":135},[129,2192,1253],{"class":139},[129,2194,2067],{"class":135},[129,2196,1305],{"class":139},[129,2198,2199],{"class":131,"line":1688},[129,2200,2201],{"class":139},"    }\n",[129,2203,2204],{"class":131,"line":1693},[129,2205,1579],{"class":139},[14,2207,2208],{},"if和switch区别：",[1146,2210,2211,2214],{},[86,2212,2213],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[86,2215,2216],{},"switch优点：结构清晰，执行效率高",[100,2218,2220],{"id":2219},"_162循环结构","1.6.2循环结构",[83,2222,2223],{},[86,2224,2225],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[120,2227,2229],{"className":122,"code":2228,"language":124,"meta":42,"style":42},"\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",[126,2230,2231,2236,2244,2248,2261,2275,2279,2299,2309,2313,2325],{"__ignoreMap":42},[129,2232,2233],{"class":131,"line":132},[129,2234,2235],{"class":198},"\u002F\u002F打印0-9数字\n",[129,2237,2238,2240,2242],{"class":131,"line":51},[129,2239,143],{"class":135},[129,2241,1987],{"class":1977},[129,2243,1990],{"class":139},[129,2245,2246],{"class":131,"line":1194},[129,2247,1560],{"class":139},[129,2249,2250,2252,2255,2257,2259],{"class":131,"line":1209},[129,2251,1999],{"class":135},[129,2253,2254],{"class":139}," num",[129,2256,185],{"class":135},[129,2258,331],{"class":188},[129,2260,1305],{"class":139},[129,2262,2263,2266,2269,2271,2273],{"class":131,"line":1215},[129,2264,2265],{"class":135},"    while",[129,2267,2268],{"class":139},"(num",[129,2270,1049],{"class":135},[129,2272,585],{"class":188},[129,2274,146],{"class":139},[129,2276,2277],{"class":131,"line":1229},[129,2278,2044],{"class":139},[129,2280,2281,2284,2287,2289,2291,2293,2296],{"class":131,"line":1235},[129,2282,2283],{"class":1977},"       std",[129,2285,2286],{"class":139},"::cout",[129,2288,1183],{"class":135},[129,2290,1679],{"class":139},[129,2292,1183],{"class":135},[129,2294,2295],{"class":1977},"std",[129,2297,2298],{"class":139},"::endl;\n",[129,2300,2301,2304,2307],{"class":131,"line":1326},[129,2302,2303],{"class":139},"        num",[129,2305,2306],{"class":135},"++",[129,2308,1305],{"class":139},[129,2310,2311],{"class":131,"line":1332},[129,2312,2201],{"class":139},[129,2314,2315,2318,2320,2323],{"class":131,"line":1344},[129,2316,2317],{"class":1977},"    system",[129,2319,140],{"class":139},[129,2321,2322],{"class":244},"\"pause\"",[129,2324,146],{"class":139},[129,2326,2327],{"class":131,"line":1626},[129,2328,1579],{"class":139},[14,2330,2331],{},"注意：写好循环条件，避免死循环情况",[120,2333,2335],{"className":122,"code":2334,"language":124,"meta":42,"style":42},"\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",[126,2336,2337,2342,2349,2356,2366,2374,2378,2383,2410,2415,2420,2428,2455,2460,2465,2478,2488,2492,2502,2507,2520,2525,2539,2544,2559,2563,2576,2580,2585,2589,2603,2611,2616,2622,2628,2633],{"__ignoreMap":42},[129,2338,2339],{"class":131,"line":132},[129,2340,2341],{"class":198},"\u002F\u002F循环结构-猜数字\n",[129,2343,2344,2346],{"class":131,"line":51},[129,2345,1963],{"class":135},[129,2347,2348],{"class":244}," \u003Ciostream>\n",[129,2350,2351,2353],{"class":131,"line":1194},[129,2352,1963],{"class":135},[129,2354,2355],{"class":244}," \u003Cctime>\n",[129,2357,2358,2360,2362,2364],{"class":131,"line":1209},[129,2359,1971],{"class":135},[129,2361,1974],{"class":135},[129,2363,1978],{"class":1977},[129,2365,1305],{"class":139},[129,2367,2368,2370,2372],{"class":131,"line":1215},[129,2369,143],{"class":135},[129,2371,1987],{"class":1977},[129,2373,1990],{"class":139},[129,2375,2376],{"class":131,"line":1229},[129,2377,1560],{"class":139},[129,2379,2380],{"class":131,"line":1235},[129,2381,2382],{"class":198},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[129,2384,2385,2388,2391,2394,2397,2399,2402,2404,2407],{"class":131,"line":1326},[129,2386,2387],{"class":1977},"    srand",[129,2389,2390],{"class":139},"((",[129,2392,2393],{"class":135},"unsigned",[129,2395,2396],{"class":135}," int",[129,2398,568],{"class":139},[129,2400,2401],{"class":1977},"time",[129,2403,140],{"class":139},[129,2405,2406],{"class":188},"NULL",[129,2408,2409],{"class":139},"));\n",[129,2411,2412],{"class":131,"line":1332},[129,2413,2414],{"emptyLinePlaceholder":56},"\n",[129,2416,2417],{"class":131,"line":1344},[129,2418,2419],{"class":198},"    \u002F\u002F1.系统生成随机数\n",[129,2421,2422,2425],{"class":131,"line":1626},[129,2423,2424],{"class":198},"    \u002F\u002Frand()%100",[129,2426,2427],{"class":198}," \u002F\u002F生成0-99的随机数\n",[129,2429,2430,2432,2434,2436,2439,2442,2444,2446,2448,2450,2452],{"class":131,"line":1631},[129,2431,1999],{"class":135},[129,2433,2254],{"class":139},[129,2435,185],{"class":135},[129,2437,2438],{"class":1977},"rand",[129,2440,2441],{"class":139},"()",[129,2443,467],{"class":135},[129,2445,450],{"class":188},[129,2447,620],{"class":135},[129,2449,357],{"class":188},[129,2451,195],{"class":139},[129,2453,2454],{"class":198}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[129,2456,2457],{"class":131,"line":1637},[129,2458,2459],{"class":198},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[129,2461,2462],{"class":131,"line":1642},[129,2463,2464],{"class":198},"    \u002F\u002F2.玩家猜测\n",[129,2466,2467,2469,2472,2474,2476],{"class":131,"line":1656},[129,2468,1999],{"class":135},[129,2470,2471],{"class":139}," val",[129,2473,185],{"class":135},[129,2475,331],{"class":188},[129,2477,1305],{"class":139},[129,2479,2480,2482,2484,2486],{"class":131,"line":1661},[129,2481,2265],{"class":135},[129,2483,1672],{"class":139},[129,2485,357],{"class":188},[129,2487,146],{"class":139},[129,2489,2490],{"class":131,"line":1667},[129,2491,2044],{"class":139},[129,2493,2494,2497,2499],{"class":131,"line":1688},[129,2495,2496],{"class":139},"        cin",[129,2498,1444],{"class":135},[129,2500,2501],{"class":139},"val;\n",[129,2503,2504],{"class":131,"line":1693},[129,2505,2506],{"class":198},"        \u002F\u002F3.判断玩家猜测\n",[129,2508,2509,2512,2515,2517],{"class":131,"line":1707},[129,2510,2511],{"class":135},"        if",[129,2513,2514],{"class":139},"(val",[129,2516,1049],{"class":135},[129,2518,2519],{"class":139},"num) \n",[129,2521,2522],{"class":131,"line":1712},[129,2523,2524],{"class":139},"        {\n",[129,2526,2527,2530,2532,2535,2537],{"class":131,"line":1741},[129,2528,2529],{"class":139},"            cout",[129,2531,1183],{"class":135},[129,2533,2534],{"class":244},"\"猜小了！\"",[129,2536,1183],{"class":135},[129,2538,1206],{"class":139},[129,2540,2541],{"class":131,"line":1746},[129,2542,2543],{"class":139},"        }\n",[129,2545,2546,2549,2551,2554,2556],{"class":131,"line":1763},[129,2547,2548],{"class":135},"        else",[129,2550,1718],{"class":135},[129,2552,2553],{"class":139}," (val",[129,2555,1099],{"class":135},[129,2557,2558],{"class":139},"num)\n",[129,2560,2561],{"class":131,"line":1768},[129,2562,2524],{"class":139},[129,2564,2565,2567,2569,2572,2574],{"class":131,"line":1773},[129,2566,2529],{"class":139},[129,2568,1183],{"class":135},[129,2570,2571],{"class":244},"\"猜大了！\"",[129,2573,1183],{"class":135},[129,2575,1206],{"class":139},[129,2577,2578],{"class":131,"line":1778},[129,2579,2543],{"class":139},[129,2581,2582],{"class":131,"line":1792},[129,2583,2584],{"class":135},"        else\n",[129,2586,2587],{"class":131,"line":1797},[129,2588,2524],{"class":139},[129,2590,2592,2594,2596,2599,2601],{"class":131,"line":2591},30,[129,2593,2529],{"class":139},[129,2595,1183],{"class":135},[129,2597,2598],{"class":244},"\"猜对了！\"",[129,2600,1183],{"class":135},[129,2602,1206],{"class":139},[129,2604,2606,2609],{"class":131,"line":2605},31,[129,2607,2608],{"class":135},"            break",[129,2610,1305],{"class":139},[129,2612,2614],{"class":131,"line":2613},32,[129,2615,2543],{"class":139},[129,2617,2619],{"class":131,"line":2618},33,[129,2620,2621],{"class":198},"        \u002F\u002F猜对 退出游戏\n",[129,2623,2625],{"class":131,"line":2624},34,[129,2626,2627],{"class":198},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[129,2629,2631],{"class":131,"line":2630},35,[129,2632,2201],{"class":139},[129,2634,2636],{"class":131,"line":2635},36,[129,2637,1579],{"class":139},[83,2639,2640],{"start":51},[86,2641,2642,2643,2646],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[289,2644,2645],{},"do...while会先执行一次循环语句","，在判断循环语句",[120,2648,2650],{"className":122,"code":2649,"language":124,"meta":42,"style":42},"\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",[126,2651,2652,2657,2665,2669,2681,2689,2693,2710,2717,2721,2734,2744],{"__ignoreMap":42},[129,2653,2654],{"class":131,"line":132},[129,2655,2656],{"class":198},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[129,2658,2659,2661,2663],{"class":131,"line":51},[129,2660,143],{"class":135},[129,2662,1987],{"class":1977},[129,2664,1990],{"class":139},[129,2666,2667],{"class":131,"line":1194},[129,2668,1560],{"class":139},[129,2670,2671,2673,2675,2677,2679],{"class":131,"line":1209},[129,2672,1999],{"class":135},[129,2674,2254],{"class":139},[129,2676,185],{"class":135},[129,2678,331],{"class":188},[129,2680,1305],{"class":139},[129,2682,2683,2686],{"class":131,"line":1215},[129,2684,2685],{"class":135},"    do",[129,2687,2688],{"class":139}," \n",[129,2690,2691],{"class":131,"line":1229},[129,2692,2044],{"class":139},[129,2694,2695,2698,2700,2702,2704,2706,2708],{"class":131,"line":1235},[129,2696,2697],{"class":1977},"        std",[129,2699,2286],{"class":139},[129,2701,1183],{"class":135},[129,2703,1679],{"class":139},[129,2705,1183],{"class":135},[129,2707,2295],{"class":1977},[129,2709,2298],{"class":139},[129,2711,2712,2714],{"class":131,"line":1326},[129,2713,2303],{"class":139},[129,2715,2716],{"class":135},"++\n",[129,2718,2719],{"class":131,"line":1332},[129,2720,2201],{"class":139},[129,2722,2723,2725,2727,2729,2731],{"class":131,"line":1344},[129,2724,2265],{"class":135},[129,2726,2268],{"class":139},[129,2728,1049],{"class":135},[129,2730,585],{"class":188},[129,2732,2733],{"class":139},");\n",[129,2735,2736,2738,2740,2742],{"class":131,"line":1626},[129,2737,2317],{"class":1977},[129,2739,140],{"class":139},[129,2741,2322],{"class":244},[129,2743,2733],{"class":139},[129,2745,2746],{"class":131,"line":1631},[129,2747,1579],{"class":139},[14,2749,2750],{},"案例-水仙花数",[14,2752,2753],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2755,2756],{},"例如：1^3+5^3+3^3=153",[14,2758,2759],{},"请用do...while语句，求出所有3位数的水仙花数",[120,2761,2763],{"className":122,"code":2762,"language":124,"meta":42,"style":42},"#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",[126,2764,2765,2771,2781,2789,2793,2798,2810,2816,2820,2825,2841,2857,2873,2888,2907,2922,2970,2974,2986,2990,2998,3002,3016],{"__ignoreMap":42},[129,2766,2767,2769],{"class":131,"line":132},[129,2768,1963],{"class":135},[129,2770,2348],{"class":244},[129,2772,2773,2775,2777,2779],{"class":131,"line":51},[129,2774,1971],{"class":135},[129,2776,1974],{"class":135},[129,2778,1978],{"class":1977},[129,2780,1305],{"class":139},[129,2782,2783,2785,2787],{"class":131,"line":1194},[129,2784,143],{"class":135},[129,2786,1987],{"class":1977},[129,2788,1990],{"class":139},[129,2790,2791],{"class":131,"line":1209},[129,2792,1560],{"class":139},[129,2794,2795],{"class":131,"line":1215},[129,2796,2797],{"class":198},"    \u002F\u002F1.先打印所有三位数字\n",[129,2799,2800,2802,2804,2806,2808],{"class":131,"line":1229},[129,2801,1999],{"class":135},[129,2803,2254],{"class":139},[129,2805,185],{"class":135},[129,2807,450],{"class":188},[129,2809,1305],{"class":139},[129,2811,2812,2814],{"class":131,"line":1235},[129,2813,2685],{"class":135},[129,2815,2688],{"class":139},[129,2817,2818],{"class":131,"line":1326},[129,2819,2044],{"class":139},[129,2821,2822],{"class":131,"line":1332},[129,2823,2824],{"class":198},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[129,2826,2827,2830,2832,2834,2836,2838],{"class":131,"line":1344},[129,2828,2829],{"class":135},"        int",[129,2831,1413],{"class":139},[129,2833,185],{"class":135},[129,2835,331],{"class":188},[129,2837,195],{"class":139},[129,2839,2840],{"class":198}," \u002F\u002F个位\n",[129,2842,2843,2845,2848,2850,2852,2854],{"class":131,"line":1626},[129,2844,2829],{"class":135},[129,2846,2847],{"class":139}," b",[129,2849,185],{"class":135},[129,2851,331],{"class":188},[129,2853,195],{"class":139},[129,2855,2856],{"class":198}," \u002F\u002F十位\n",[129,2858,2859,2861,2864,2866,2868,2870],{"class":131,"line":1631},[129,2860,2829],{"class":135},[129,2862,2863],{"class":139}," c",[129,2865,185],{"class":135},[129,2867,331],{"class":188},[129,2869,195],{"class":139},[129,2871,2872],{"class":198}," \u002F\u002F百位\n",[129,2874,2875,2878,2880,2882,2884,2886],{"class":131,"line":1637},[129,2876,2877],{"class":139},"        a",[129,2879,185],{"class":135},[129,2881,1679],{"class":139},[129,2883,467],{"class":135},[129,2885,585],{"class":188},[129,2887,1305],{"class":139},[129,2889,2890,2893,2895,2897,2899,2901,2903,2905],{"class":131,"line":1642},[129,2891,2892],{"class":139},"        b",[129,2894,185],{"class":135},[129,2896,1679],{"class":139},[129,2898,723],{"class":135},[129,2900,585],{"class":188},[129,2902,467],{"class":135},[129,2904,585],{"class":188},[129,2906,1305],{"class":139},[129,2908,2909,2912,2914,2916,2918,2920],{"class":131,"line":1656},[129,2910,2911],{"class":139},"        c",[129,2913,185],{"class":135},[129,2915,1679],{"class":139},[129,2917,723],{"class":135},[129,2919,450],{"class":188},[129,2921,1305],{"class":139},[129,2923,2924,2926,2928,2930,2932,2934,2936,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2961,2964,2967],{"class":131,"line":1661},[129,2925,2511],{"class":135},[129,2927,1855],{"class":139},[129,2929,594],{"class":135},[129,2931,20],{"class":139},[129,2933,594],{"class":135},[129,2935,20],{"class":139},[129,2937,620],{"class":135},[129,2939,402],{"class":139},[129,2941,594],{"class":135},[129,2943,402],{"class":139},[129,2945,594],{"class":135},[129,2947,402],{"class":139},[129,2949,620],{"class":135},[129,2951,427],{"class":139},[129,2953,594],{"class":135},[129,2955,427],{"class":139},[129,2957,594],{"class":135},[129,2959,2960],{"class":139},"c ",[129,2962,2963],{"class":135},"==",[129,2965,2966],{"class":139}," num)",[129,2968,2969],{"class":198}," \u002F\u002F如果是水仙花数，才打印\n",[129,2971,2972],{"class":131,"line":1667},[129,2973,2524],{"class":139},[129,2975,2976,2978,2980,2982,2984],{"class":131,"line":1688},[129,2977,2529],{"class":139},[129,2979,1183],{"class":135},[129,2981,1679],{"class":139},[129,2983,1183],{"class":135},[129,2985,1206],{"class":139},[129,2987,2988],{"class":131,"line":1693},[129,2989,2543],{"class":139},[129,2991,2992,2994,2996],{"class":131,"line":1707},[129,2993,2303],{"class":139},[129,2995,2306],{"class":135},[129,2997,1305],{"class":139},[129,2999,3000],{"class":131,"line":1712},[129,3001,2201],{"class":139},[129,3003,3004,3006,3009,3011,3014],{"class":131,"line":1741},[129,3005,2265],{"class":135},[129,3007,3008],{"class":139}," (num ",[129,3010,1049],{"class":135},[129,3012,3013],{"class":188}," 1000",[129,3015,2733],{"class":139},[129,3017,3018],{"class":131,"line":1746},[129,3019,1579],{"class":139},[83,3021,3022],{"start":1194},[86,3023,3024],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[120,3026,3028],{"className":122,"code":3027,"language":124,"meta":42,"style":42},"\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",[126,3029,3030,3035,3064,3068,3080,3084,3089,3100,3107,3111,3125,3129,3136,3140,3152,3161],{"__ignoreMap":42},[129,3031,3032],{"class":131,"line":132},[129,3033,3034],{"class":198},"\u002F\u002F从数字0-9打印\n",[129,3036,3037,3040,3042,3044,3047,3049,3051,3054,3056,3058,3060,3062],{"class":131,"line":51},[129,3038,3039],{"class":135},"for",[129,3041,140],{"class":139},[129,3043,143],{"class":135},[129,3045,3046],{"class":139}," i",[129,3048,185],{"class":135},[129,3050,331],{"class":188},[129,3052,3053],{"class":139},";i",[129,3055,1049],{"class":135},[129,3057,585],{"class":188},[129,3059,3053],{"class":139},[129,3061,2306],{"class":135},[129,3063,146],{"class":139},[129,3065,3066],{"class":131,"line":1194},[129,3067,1560],{"class":139},[129,3069,3070,3072,3074,3076,3078],{"class":131,"line":1209},[129,3071,1565],{"class":139},[129,3073,1183],{"class":135},[129,3075,580],{"class":139},[129,3077,1183],{"class":135},[129,3079,1206],{"class":139},[129,3081,3082],{"class":131,"line":1215},[129,3083,1579],{"class":139},[129,3085,3086],{"class":131,"line":1229},[129,3087,3088],{"class":198},"\u002F\u002F上式可以进行拆分\n",[129,3090,3091,3093,3095,3097],{"class":131,"line":1235},[129,3092,143],{"class":135},[129,3094,3046],{"class":139},[129,3096,185],{"class":135},[129,3098,3099],{"class":188},"0\n",[129,3101,3102,3104],{"class":131,"line":1326},[129,3103,3039],{"class":135},[129,3105,3106],{"class":139},"(;;;)\n",[129,3108,3109],{"class":131,"line":1332},[129,3110,1560],{"class":139},[129,3112,3113,3116,3119,3121,3123],{"class":131,"line":1344},[129,3114,3115],{"class":135},"    if",[129,3117,3118],{"class":139},"(i",[129,3120,1724],{"class":135},[129,3122,585],{"class":188},[129,3124,146],{"class":139},[129,3126,3127],{"class":131,"line":1626},[129,3128,2044],{"class":139},[129,3130,3131,3134],{"class":131,"line":1631},[129,3132,3133],{"class":135},"        break",[129,3135,1305],{"class":139},[129,3137,3138],{"class":131,"line":1637},[129,3139,2201],{"class":139},[129,3141,3142,3144,3146,3148,3150],{"class":131,"line":1642},[129,3143,1565],{"class":139},[129,3145,1183],{"class":135},[129,3147,580],{"class":139},[129,3149,1183],{"class":135},[129,3151,1206],{"class":139},[129,3153,3154,3157,3159],{"class":131,"line":1656},[129,3155,3156],{"class":139},"    i",[129,3158,2306],{"class":135},[129,3160,1305],{"class":139},[129,3162,3163],{"class":131,"line":1661},[129,3164,1579],{"class":139},[14,3166,3167],{},"小练习",[120,3169,3171],{"className":122,"code":3170,"language":124,"meta":42,"style":42},"#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",[126,3172,3173,3179,3189,3197,3201,3206,3211,3239,3243,3248,3253,3294,3298,3311,3315,3319,3323,3335,3339,3343],{"__ignoreMap":42},[129,3174,3175,3177],{"class":131,"line":132},[129,3176,1963],{"class":135},[129,3178,1966],{"class":244},[129,3180,3181,3183,3185,3187],{"class":131,"line":51},[129,3182,1971],{"class":135},[129,3184,1974],{"class":135},[129,3186,1978],{"class":1977},[129,3188,1305],{"class":139},[129,3190,3191,3193,3195],{"class":131,"line":1194},[129,3192,143],{"class":135},[129,3194,1987],{"class":1977},[129,3196,1990],{"class":139},[129,3198,3199],{"class":131,"line":1209},[129,3200,1560],{"class":139},[129,3202,3203],{"class":131,"line":1215},[129,3204,3205],{"class":198},"    \u002F\u002F敲桌子案例\n",[129,3207,3208],{"class":131,"line":1229},[129,3209,3210],{"class":198},"    \u002F\u002F1.先输出1-100的数字\n",[129,3212,3213,3216,3218,3220,3222,3224,3226,3229,3231,3233,3235,3237],{"class":131,"line":1235},[129,3214,3215],{"class":135},"    for",[129,3217,140],{"class":139},[129,3219,143],{"class":135},[129,3221,3046],{"class":139},[129,3223,185],{"class":135},[129,3225,357],{"class":188},[129,3227,3228],{"class":139},"; i",[129,3230,1602],{"class":135},[129,3232,450],{"class":188},[129,3234,3228],{"class":139},[129,3236,2306],{"class":135},[129,3238,146],{"class":139},[129,3240,3241],{"class":131,"line":1326},[129,3242,2044],{"class":139},[129,3244,3245],{"class":131,"line":1332},[129,3246,3247],{"class":198},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[129,3249,3250],{"class":131,"line":1344},[129,3251,3252],{"class":198},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[129,3254,3255,3257,3259,3261,3263,3265,3267,3270,3272,3274,3276,3278,3280,3282,3284,3286,3288,3290,3292],{"class":131,"line":1626},[129,3256,2511],{"class":135},[129,3258,3118],{"class":139},[129,3260,467],{"class":135},[129,3262,508],{"class":188},[129,3264,2963],{"class":135},[129,3266,331],{"class":188},[129,3268,3269],{"class":135}," ||",[129,3271,3046],{"class":139},[129,3273,467],{"class":135},[129,3275,585],{"class":188},[129,3277,2963],{"class":135},[129,3279,508],{"class":188},[129,3281,3269],{"class":135},[129,3283,3046],{"class":139},[129,3285,723],{"class":135},[129,3287,585],{"class":188},[129,3289,2963],{"class":135},[129,3291,508],{"class":188},[129,3293,146],{"class":139},[129,3295,3296],{"class":131,"line":1631},[129,3297,2524],{"class":139},[129,3299,3300,3302,3304,3307,3309],{"class":131,"line":1637},[129,3301,2529],{"class":139},[129,3303,1183],{"class":135},[129,3305,3306],{"class":244},"\"敲桌子\"",[129,3308,1183],{"class":135},[129,3310,1206],{"class":139},[129,3312,3313],{"class":131,"line":1642},[129,3314,2543],{"class":139},[129,3316,3317],{"class":131,"line":1656},[129,3318,2584],{"class":135},[129,3320,3321],{"class":131,"line":1661},[129,3322,2524],{"class":139},[129,3324,3325,3327,3329,3331,3333],{"class":131,"line":1667},[129,3326,2529],{"class":139},[129,3328,1183],{"class":135},[129,3330,580],{"class":139},[129,3332,1183],{"class":135},[129,3334,1206],{"class":139},[129,3336,3337],{"class":131,"line":1688},[129,3338,2543],{"class":139},[129,3340,3341],{"class":131,"line":1693},[129,3342,2201],{"class":139},[129,3344,3345],{"class":131,"line":1707},[129,3346,1579],{"class":139},[14,3348,3349],{},"嵌套实现星图",[120,3351,3353],{"className":122,"code":3352,"language":124,"meta":42,"style":42},"#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",[126,3354,3355,3361,3371,3379,3383,3409,3413,3442,3446,3457,3461,3470,3474],{"__ignoreMap":42},[129,3356,3357,3359],{"class":131,"line":132},[129,3358,1963],{"class":135},[129,3360,1966],{"class":244},[129,3362,3363,3365,3367,3369],{"class":131,"line":51},[129,3364,1971],{"class":135},[129,3366,1974],{"class":135},[129,3368,1978],{"class":1977},[129,3370,1305],{"class":139},[129,3372,3373,3375,3377],{"class":131,"line":1194},[129,3374,143],{"class":135},[129,3376,1987],{"class":1977},[129,3378,1990],{"class":139},[129,3380,3381],{"class":131,"line":1209},[129,3382,1560],{"class":139},[129,3384,3385,3387,3389,3391,3393,3395,3397,3399,3401,3403,3405,3407],{"class":131,"line":1215},[129,3386,3215],{"class":135},[129,3388,1672],{"class":139},[129,3390,143],{"class":135},[129,3392,3046],{"class":139},[129,3394,185],{"class":135},[129,3396,331],{"class":188},[129,3398,3053],{"class":139},[129,3400,1049],{"class":135},[129,3402,585],{"class":188},[129,3404,3053],{"class":139},[129,3406,2306],{"class":135},[129,3408,146],{"class":139},[129,3410,3411],{"class":131,"line":1229},[129,3412,2044],{"class":139},[129,3414,3415,3418,3420,3422,3425,3427,3429,3432,3434,3436,3438,3440],{"class":131,"line":1235},[129,3416,3417],{"class":135},"        for",[129,3419,1672],{"class":139},[129,3421,143],{"class":135},[129,3423,3424],{"class":139}," j",[129,3426,185],{"class":135},[129,3428,331],{"class":188},[129,3430,3431],{"class":139},";j",[129,3433,1049],{"class":135},[129,3435,585],{"class":188},[129,3437,3431],{"class":139},[129,3439,2306],{"class":135},[129,3441,146],{"class":139},[129,3443,3444],{"class":131,"line":1326},[129,3445,2524],{"class":139},[129,3447,3448,3450,3452,3455],{"class":131,"line":1332},[129,3449,2529],{"class":139},[129,3451,1183],{"class":135},[129,3453,3454],{"class":244},"\"*\"",[129,3456,1305],{"class":139},[129,3458,3459],{"class":131,"line":1344},[129,3460,2543],{"class":139},[129,3462,3463,3466,3468],{"class":131,"line":1626},[129,3464,3465],{"class":139},"        cout",[129,3467,1183],{"class":135},[129,3469,1206],{"class":139},[129,3471,3472],{"class":131,"line":1631},[129,3473,2201],{"class":139},[129,3475,3476],{"class":131,"line":1637},[129,3477,1579],{"class":139},[14,3479,3480],{},"乘法口诀表",[120,3482,3484],{"className":122,"code":3483,"language":124,"meta":42,"style":42},"#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",[126,3485,3486,3492,3502,3510,3514,3540,3544,3569,3573,3613,3617,3625,3629],{"__ignoreMap":42},[129,3487,3488,3490],{"class":131,"line":132},[129,3489,1963],{"class":135},[129,3491,2348],{"class":244},[129,3493,3494,3496,3498,3500],{"class":131,"line":51},[129,3495,1971],{"class":135},[129,3497,1974],{"class":135},[129,3499,1978],{"class":1977},[129,3501,1305],{"class":139},[129,3503,3504,3506,3508],{"class":131,"line":1194},[129,3505,143],{"class":135},[129,3507,1987],{"class":1977},[129,3509,1990],{"class":139},[129,3511,3512],{"class":131,"line":1209},[129,3513,1560],{"class":139},[129,3515,3516,3518,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538],{"class":131,"line":1215},[129,3517,3215],{"class":135},[129,3519,140],{"class":139},[129,3521,143],{"class":135},[129,3523,3046],{"class":139},[129,3525,185],{"class":135},[129,3527,357],{"class":188},[129,3529,3053],{"class":139},[129,3531,1049],{"class":135},[129,3533,585],{"class":188},[129,3535,3053],{"class":139},[129,3537,2306],{"class":135},[129,3539,146],{"class":139},[129,3541,3542],{"class":131,"line":1229},[129,3543,2044],{"class":139},[129,3545,3546,3548,3550,3552,3554,3556,3558,3560,3562,3565,3567],{"class":131,"line":1235},[129,3547,3417],{"class":135},[129,3549,140],{"class":139},[129,3551,143],{"class":135},[129,3553,3424],{"class":139},[129,3555,185],{"class":135},[129,3557,357],{"class":188},[129,3559,3431],{"class":139},[129,3561,1602],{"class":135},[129,3563,3564],{"class":139},"i;j",[129,3566,2306],{"class":135},[129,3568,146],{"class":139},[129,3570,3571],{"class":131,"line":1326},[129,3572,2524],{"class":139},[129,3574,3575,3577,3579,3581,3583,3585,3587,3589,3591,3594,3596,3598,3600,3602,3604,3607,3609,3611],{"class":131,"line":1332},[129,3576,2529],{"class":139},[129,3578,1183],{"class":135},[129,3580,606],{"class":139},[129,3582,1183],{"class":135},[129,3584,3454],{"class":244},[129,3586,1183],{"class":135},[129,3588,580],{"class":139},[129,3590,1183],{"class":135},[129,3592,3593],{"class":244},"\"=\"",[129,3595,1183],{"class":135},[129,3597,580],{"class":139},[129,3599,594],{"class":135},[129,3601,606],{"class":139},[129,3603,1183],{"class":135},[129,3605,3606],{"class":244},"'",[129,3608,1245],{"class":188},[129,3610,3606],{"class":244},[129,3612,1305],{"class":139},[129,3614,3615],{"class":131,"line":1344},[129,3616,2543],{"class":139},[129,3618,3619,3621,3623],{"class":131,"line":1626},[129,3620,3465],{"class":139},[129,3622,1183],{"class":135},[129,3624,1206],{"class":139},[129,3626,3627],{"class":131,"line":1631},[129,3628,2201],{"class":139},[129,3630,3631],{"class":131,"line":1637},[129,3632,1579],{"class":139},[100,3634,3636],{"id":3635},"_163跳出语句","1.6.3跳出语句",[83,3638,3639],{},[86,3640,3641],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3643,3644],{},"break使用时机：",[1146,3646,3647,3650,3653],{},[86,3648,3649],{},"出现在switch条件语句中，作用是终止case并跳出switch",[86,3651,3652],{},"出现在循环结构中，作用是跳出当前的循环结构",[86,3654,3655],{},"出现在嵌套循环中，跳出最近的内层循环语句",[83,3657,3658,3661],{"start":51},[86,3659,3660],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[86,3662,3663],{},"goto语句\n语法：goto 标记;",[14,3665,3666],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[120,3668,3670],{"className":122,"code":3669,"language":124,"meta":42,"style":42},"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",[126,3671,3672,3680,3684,3697,3707,3720,3733,3746,3754,3770],{"__ignoreMap":42},[129,3673,3674,3676,3678],{"class":131,"line":132},[129,3675,143],{"class":135},[129,3677,1987],{"class":1977},[129,3679,1990],{"class":139},[129,3681,3682],{"class":131,"line":51},[129,3683,1560],{"class":139},[129,3685,3686,3688,3690,3693,3695],{"class":131,"line":1194},[129,3687,1565],{"class":139},[129,3689,1183],{"class":135},[129,3691,3692],{"class":244},"\"1\"",[129,3694,1183],{"class":135},[129,3696,1206],{"class":139},[129,3698,3699,3702,3705],{"class":131,"line":1209},[129,3700,3701],{"class":135},"    goto",[129,3703,3704],{"class":1977}," FLAG",[129,3706,1305],{"class":139},[129,3708,3709,3711,3713,3716,3718],{"class":131,"line":1215},[129,3710,1565],{"class":139},[129,3712,1183],{"class":135},[129,3714,3715],{"class":244},"\"2\"",[129,3717,1183],{"class":135},[129,3719,1206],{"class":139},[129,3721,3722,3724,3726,3729,3731],{"class":131,"line":1229},[129,3723,1565],{"class":139},[129,3725,1183],{"class":135},[129,3727,3728],{"class":244},"\"3\"",[129,3730,1183],{"class":135},[129,3732,1206],{"class":139},[129,3734,3735,3737,3739,3742,3744],{"class":131,"line":1235},[129,3736,1565],{"class":139},[129,3738,1183],{"class":135},[129,3740,3741],{"class":244},"\"4\"",[129,3743,1183],{"class":135},[129,3745,1206],{"class":139},[129,3747,3748,3751],{"class":131,"line":1326},[129,3749,3750],{"class":1977},"    FLAG",[129,3752,3753],{"class":139},":\n",[129,3755,3756,3758,3760,3763,3765,3767],{"class":131,"line":1332},[129,3757,1565],{"class":139},[129,3759,1183],{"class":135},[129,3761,3762],{"class":244},"\"5\"",[129,3764,1183],{"class":135},[129,3766,1253],{"class":139},[129,3768,3769],{"class":198},"\u002F\u002F跳过了2,3,4,直接到5\n",[129,3771,3772],{"class":131,"line":1344},[129,3773,1579],{"class":139},[71,3775,3777],{"id":3776},"_17数组","1.7数组",[100,3779,3781],{"id":3780},"_171一维数组","1.7.1一维数组",[83,3783,3784],{},[86,3785,3786],{},"一维数组定义方式",[277,3788,3789,3799],{},[280,3790,3791],{},[283,3792,3793,3796],{},[286,3794,3795],{},"方式",[286,3797,3798],{},"注意事项",[324,3800,3801,3815,3825],{},[283,3802,3803,3809],{},[329,3804,3805,3806,195],{},"数据类型 数组名",[129,3807,3808],{},"数组长度",[329,3810,3811,3812,3814],{},"这种方式是先定义再arr",[129,3813,580],{},"赋值",[283,3816,3817,3822],{},[329,3818,3805,3819,3821],{},[129,3820,3808],{},"={值1,值2....};",[329,3823,3824],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[283,3826,3827,3831],{},[329,3828,3805,3829,3821],{},[129,3830],{},[329,3832,3833,3834,3836],{},"int arr",[129,3835],{},";这是不正确的，按照这样的方式定义必须有初始长度",[83,3838,3839],{"start":51},[86,3840,3841],{},"一维数组数组名\n用途：",[1146,3843,3844],{},[86,3845,3846],{},"1.可以统计整个数组在内存中的长度：",[120,3848,3850],{"className":122,"code":3849,"language":124,"meta":42,"style":42},"sizeof(arr);\nsizeof(arr[0]);\n",[126,3851,3852,3859],{"__ignoreMap":42},[129,3853,3854,3856],{"class":131,"line":132},[129,3855,136],{"class":135},[129,3857,3858],{"class":139},"(arr);\n",[129,3860,3861,3863,3866,3868],{"class":131,"line":51},[129,3862,136],{"class":135},[129,3864,3865],{"class":139},"(arr[",[129,3867,331],{"class":188},[129,3869,3870],{"class":139},"]);\n",[1146,3872,3873],{},[86,3874,3875],{},"2.可以获取数组在内存中的首地址:",[120,3877,3879],{"className":122,"code":3878,"language":124,"meta":42,"style":42},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[126,3880,3881,3886,3899,3904],{"__ignoreMap":42},[129,3882,3883],{"class":131,"line":132},[129,3884,3885],{"class":198},"\u002F\u002F查看16进制的首地址\n",[129,3887,3888,3890,3892,3895,3897],{"class":131,"line":51},[129,3889,1384],{"class":139},[129,3891,1183],{"class":135},[129,3893,3894],{"class":139},"arr",[129,3896,1183],{"class":135},[129,3898,1206],{"class":139},[129,3900,3901],{"class":131,"line":1194},[129,3902,3903],{"class":198},"\u002F\u002F看10进制数\n",[129,3905,3906,3908,3910,3912,3914,3916,3918,3921,3923,3925,3927],{"class":131,"line":1209},[129,3907,1384],{"class":139},[129,3909,1183],{"class":135},[129,3911,140],{"class":139},[129,3913,143],{"class":135},[129,3915,568],{"class":139},[129,3917,492],{"class":135},[129,3919,3920],{"class":139},"arr[",[129,3922,331],{"class":188},[129,3924,1079],{"class":139},[129,3926,1183],{"class":135},[129,3928,1206],{"class":139},[14,3930,3931],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1146,3933,3934],{},[86,3935,3936],{},"1️⃣五只小猪称体重",[120,3938,3940],{"className":122,"code":3939,"language":124,"meta":42,"style":42},"#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",[126,3941,3942,3948,3958,3966,3970,4010,4023,4049,4053,4065,4069,4079,4083,4087,4100,4110],{"__ignoreMap":42},[129,3943,3944,3946],{"class":131,"line":132},[129,3945,1963],{"class":135},[129,3947,1966],{"class":244},[129,3949,3950,3952,3954,3956],{"class":131,"line":51},[129,3951,1971],{"class":135},[129,3953,1974],{"class":135},[129,3955,1978],{"class":1977},[129,3957,1305],{"class":139},[129,3959,3960,3962,3964],{"class":131,"line":1194},[129,3961,143],{"class":135},[129,3963,1987],{"class":1977},[129,3965,1990],{"class":139},[129,3967,3968],{"class":131,"line":1209},[129,3969,1560],{"class":139},[129,3971,3972,3974,3977,3979,3981,3983,3985,3988,3990,3993,3995,3997,3999,4002,4004,4007],{"class":131,"line":1215},[129,3973,1999],{"class":135},[129,3975,3976],{"class":139}," arr[",[129,3978,458],{"class":188},[129,3980,1079],{"class":139},[129,3982,185],{"class":135},[129,3984,1035],{"class":139},[129,3986,3987],{"class":188},"300",[129,3989,517],{"class":139},[129,3991,3992],{"class":188},"350",[129,3994,517],{"class":139},[129,3996,1736],{"class":188},[129,3998,517],{"class":139},[129,4000,4001],{"class":188},"400",[129,4003,517],{"class":139},[129,4005,4006],{"class":188},"250",[129,4008,4009],{"class":139},"};\n",[129,4011,4012,4014,4017,4019,4021],{"class":131,"line":1229},[129,4013,1999],{"class":135},[129,4015,4016],{"class":139}," tmp",[129,4018,185],{"class":135},[129,4020,331],{"class":188},[129,4022,1305],{"class":139},[129,4024,4025,4027,4029,4031,4033,4035,4037,4039,4041,4043,4045,4047],{"class":131,"line":1235},[129,4026,3215],{"class":135},[129,4028,1672],{"class":139},[129,4030,143],{"class":135},[129,4032,3046],{"class":139},[129,4034,185],{"class":135},[129,4036,331],{"class":188},[129,4038,3053],{"class":139},[129,4040,1049],{"class":135},[129,4042,458],{"class":188},[129,4044,3053],{"class":139},[129,4046,2306],{"class":135},[129,4048,146],{"class":139},[129,4050,4051],{"class":131,"line":1326},[129,4052,2044],{"class":139},[129,4054,4055,4057,4060,4062],{"class":131,"line":1332},[129,4056,2511],{"class":135},[129,4058,4059],{"class":139},"(tmp",[129,4061,1049],{"class":135},[129,4063,4064],{"class":139},"arr[i])\n",[129,4066,4067],{"class":131,"line":1344},[129,4068,2524],{"class":139},[129,4070,4071,4074,4076],{"class":131,"line":1626},[129,4072,4073],{"class":139},"            tmp",[129,4075,185],{"class":135},[129,4077,4078],{"class":139},"arr[i];\n",[129,4080,4081],{"class":131,"line":1631},[129,4082,2543],{"class":139},[129,4084,4085],{"class":131,"line":1637},[129,4086,2201],{"class":139},[129,4088,4089,4091,4093,4096,4098],{"class":131,"line":1642},[129,4090,1565],{"class":139},[129,4092,1183],{"class":135},[129,4094,4095],{"class":139},"tmp",[129,4097,1183],{"class":135},[129,4099,1206],{"class":139},[129,4101,4102,4105,4108],{"class":131,"line":1656},[129,4103,4104],{"class":135},"    return",[129,4106,4107],{"class":188}," 0",[129,4109,1305],{"class":139},[129,4111,4112],{"class":131,"line":1661},[129,4113,1579],{"class":139},[1146,4115,4116],{},[86,4117,4118],{},"2️⃣数组元素逆置",[120,4120,4122],{"className":122,"code":4121,"language":124,"meta":42,"style":42},"\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",[126,4123,4124,4129,4135,4145,4153,4157,4192,4208,4240,4253,4258,4263,4275,4285,4295,4300,4309,4319,4324,4329,4356,4360,4376,4380,4391,4400],{"__ignoreMap":42},[129,4125,4126],{"class":131,"line":132},[129,4127,4128],{"class":198},"\u002F\u002F元素逆置\n",[129,4130,4131,4133],{"class":131,"line":51},[129,4132,1963],{"class":135},[129,4134,1966],{"class":244},[129,4136,4137,4139,4141,4143],{"class":131,"line":1194},[129,4138,1971],{"class":135},[129,4140,1974],{"class":135},[129,4142,1978],{"class":1977},[129,4144,1305],{"class":139},[129,4146,4147,4149,4151],{"class":131,"line":1209},[129,4148,143],{"class":135},[129,4150,1987],{"class":1977},[129,4152,1990],{"class":139},[129,4154,4155],{"class":131,"line":1215},[129,4156,1560],{"class":139},[129,4158,4159,4162,4164,4166,4168,4170,4172,4174,4176,4178,4180,4182,4184,4186,4188,4190],{"class":131,"line":1229},[129,4160,4161],{"class":135},"   int",[129,4163,3976],{"class":139},[129,4165,458],{"class":188},[129,4167,1079],{"class":139},[129,4169,185],{"class":135},[129,4171,1035],{"class":139},[129,4173,357],{"class":188},[129,4175,517],{"class":139},[129,4177,217],{"class":188},[129,4179,517],{"class":139},[129,4181,211],{"class":188},[129,4183,517],{"class":139},[129,4185,432],{"class":188},[129,4187,517],{"class":139},[129,4189,458],{"class":188},[129,4191,4009],{"class":139},[129,4193,4194,4196,4199,4201,4203,4205],{"class":131,"line":1235},[129,4195,4161],{"class":135},[129,4197,4198],{"class":139}," start",[129,4200,185],{"class":135},[129,4202,331],{"class":188},[129,4204,195],{"class":139},[129,4206,4207],{"class":198},"\u002F\u002F起始下标\n",[129,4209,4210,4212,4215,4218,4221,4224,4226,4228,4231,4233,4235,4237],{"class":131,"line":1326},[129,4211,4161],{"class":135},[129,4213,4214],{"class":139}," end",[129,4216,4217],{"class":135},"=sizeof",[129,4219,4220],{"class":139},"(arr)",[129,4222,4223],{"class":135},"\u002Fsizeof",[129,4225,3865],{"class":139},[129,4227,331],{"class":188},[129,4229,4230],{"class":139},"])",[129,4232,671],{"class":135},[129,4234,357],{"class":188},[129,4236,195],{"class":139},[129,4238,4239],{"class":198},"\u002F\u002F结束下标\n",[129,4241,4242,4245,4248,4250],{"class":131,"line":1332},[129,4243,4244],{"class":135},"   while",[129,4246,4247],{"class":139}," (start",[129,4249,1049],{"class":135},[129,4251,4252],{"class":139},"end)\n",[129,4254,4255],{"class":131,"line":1344},[129,4256,4257],{"class":139},"   {\n",[129,4259,4260],{"class":131,"line":1626},[129,4261,4262],{"class":198},"    \u002F\u002F实现元素互换代码\n",[129,4264,4265,4267,4270,4272],{"class":131,"line":1631},[129,4266,1999],{"class":135},[129,4268,4269],{"class":139}," temp",[129,4271,185],{"class":135},[129,4273,4274],{"class":139},"arr[start];\n",[129,4276,4277,4280,4282],{"class":131,"line":1637},[129,4278,4279],{"class":139},"    arr[start]",[129,4281,185],{"class":135},[129,4283,4284],{"class":139},"arr[end];\n",[129,4286,4287,4290,4292],{"class":131,"line":1642},[129,4288,4289],{"class":139},"    arr[end]",[129,4291,185],{"class":135},[129,4293,4294],{"class":139},"temp;\n",[129,4296,4297],{"class":131,"line":1656},[129,4298,4299],{"class":198},"    \u002F\u002F下标更新\n",[129,4301,4302,4305,4307],{"class":131,"line":1661},[129,4303,4304],{"class":139},"    start",[129,4306,2306],{"class":135},[129,4308,1305],{"class":139},[129,4310,4311,4314,4317],{"class":131,"line":1667},[129,4312,4313],{"class":139},"    end",[129,4315,4316],{"class":135},"--",[129,4318,1305],{"class":139},[129,4320,4321],{"class":131,"line":1688},[129,4322,4323],{"class":139},"   }\n",[129,4325,4326],{"class":131,"line":1693},[129,4327,4328],{"class":198},"   \u002F\u002F输出逆置后的数组\n",[129,4330,4331,4334,4336,4338,4340,4342,4344,4346,4348,4350,4352,4354],{"class":131,"line":1707},[129,4332,4333],{"class":135},"   for",[129,4335,1672],{"class":139},[129,4337,143],{"class":135},[129,4339,3046],{"class":139},[129,4341,185],{"class":135},[129,4343,331],{"class":188},[129,4345,3053],{"class":139},[129,4347,1049],{"class":135},[129,4349,458],{"class":188},[129,4351,3053],{"class":139},[129,4353,2306],{"class":135},[129,4355,146],{"class":139},[129,4357,4358],{"class":131,"line":1712},[129,4359,4257],{"class":139},[129,4361,4362,4364,4366,4369,4371,4374],{"class":131,"line":1741},[129,4363,1565],{"class":139},[129,4365,1183],{"class":135},[129,4367,4368],{"class":139},"arr[i]",[129,4370,1183],{"class":135},[129,4372,4373],{"class":244},"\" \"",[129,4375,1305],{"class":139},[129,4377,4378],{"class":131,"line":1746},[129,4379,4323],{"class":139},[129,4381,4382,4385,4387,4389],{"class":131,"line":1763},[129,4383,4384],{"class":1977},"   system",[129,4386,140],{"class":139},[129,4388,2322],{"class":244},[129,4390,2733],{"class":139},[129,4392,4393,4396,4398],{"class":131,"line":1768},[129,4394,4395],{"class":135},"   return",[129,4397,4107],{"class":188},[129,4399,1305],{"class":139},[129,4401,4402],{"class":131,"line":1773},[129,4403,1579],{"class":139},[1146,4405,4406],{},[86,4407,4408],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[120,4410,4412],{"className":122,"code":4411,"language":124,"meta":42,"style":42},"\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",[126,4413,4414,4419,4425,4435,4443,4447,4499,4512,4538,4542,4556,4560,4565,4570,4600,4604,4609,4643,4647,4652,4672,4677,4689,4705,4720,4725,4729,4733,4746,4772,4776,4790,4794,4802],{"__ignoreMap":42},[129,4415,4416],{"class":131,"line":132},[129,4417,4418],{"class":198},"\u002F\u002F冒泡排序,升序\n",[129,4420,4421,4423],{"class":131,"line":51},[129,4422,1963],{"class":135},[129,4424,1966],{"class":244},[129,4426,4427,4429,4431,4433],{"class":131,"line":1194},[129,4428,1971],{"class":135},[129,4430,1974],{"class":135},[129,4432,1978],{"class":1977},[129,4434,1305],{"class":139},[129,4436,4437,4439,4441],{"class":131,"line":1209},[129,4438,143],{"class":135},[129,4440,1987],{"class":1977},[129,4442,1990],{"class":139},[129,4444,4445],{"class":131,"line":1215},[129,4446,1560],{"class":139},[129,4448,4449,4451,4453,4455,4458,4460,4463,4465,4467,4469,4471,4473,4475,4477,4479,4481,4483,4485,4487,4489,4491,4493,4495,4497],{"class":131,"line":1229},[129,4450,1999],{"class":135},[129,4452,3976],{"class":139},[129,4454,559],{"class":188},[129,4456,4457],{"class":139},"] ",[129,4459,185],{"class":135},[129,4461,4462],{"class":139}," {",[129,4464,432],{"class":188},[129,4466,517],{"class":139},[129,4468,217],{"class":188},[129,4470,517],{"class":139},[129,4472,534],{"class":188},[129,4474,517],{"class":139},[129,4476,331],{"class":188},[129,4478,517],{"class":139},[129,4480,458],{"class":188},[129,4482,517],{"class":139},[129,4484,508],{"class":188},[129,4486,517],{"class":139},[129,4488,357],{"class":188},[129,4490,517],{"class":139},[129,4492,211],{"class":188},[129,4494,517],{"class":139},[129,4496,559],{"class":188},[129,4498,4009],{"class":139},[129,4500,4501,4503,4505,4508,4510],{"class":131,"line":1235},[129,4502,1565],{"class":139},[129,4504,1183],{"class":135},[129,4506,4507],{"class":244},"\"排序前：\"",[129,4509,1183],{"class":135},[129,4511,1206],{"class":139},[129,4513,4514,4516,4518,4520,4522,4524,4526,4528,4530,4532,4534,4536],{"class":131,"line":1326},[129,4515,3215],{"class":135},[129,4517,1672],{"class":139},[129,4519,143],{"class":135},[129,4521,3046],{"class":139},[129,4523,185],{"class":135},[129,4525,331],{"class":188},[129,4527,3053],{"class":139},[129,4529,1049],{"class":135},[129,4531,559],{"class":188},[129,4533,3053],{"class":139},[129,4535,2306],{"class":135},[129,4537,146],{"class":139},[129,4539,4540],{"class":131,"line":1332},[129,4541,2044],{"class":139},[129,4543,4544,4546,4548,4550,4552,4554],{"class":131,"line":1344},[129,4545,3465],{"class":139},[129,4547,1183],{"class":135},[129,4549,4368],{"class":139},[129,4551,1183],{"class":135},[129,4553,4373],{"class":244},[129,4555,1305],{"class":139},[129,4557,4558],{"class":131,"line":1626},[129,4559,2201],{"class":139},[129,4561,4562],{"class":131,"line":1631},[129,4563,4564],{"class":198},"    \u002F\u002F开始冒泡排序\n",[129,4566,4567],{"class":131,"line":1637},[129,4568,4569],{"class":198},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[129,4571,4572,4574,4576,4578,4580,4582,4584,4586,4588,4590,4592,4594,4596,4598],{"class":131,"line":1642},[129,4573,3215],{"class":135},[129,4575,1672],{"class":139},[129,4577,143],{"class":135},[129,4579,3046],{"class":139},[129,4581,185],{"class":135},[129,4583,331],{"class":188},[129,4585,3053],{"class":139},[129,4587,1049],{"class":135},[129,4589,559],{"class":188},[129,4591,671],{"class":135},[129,4593,357],{"class":188},[129,4595,3053],{"class":139},[129,4597,2306],{"class":135},[129,4599,146],{"class":139},[129,4601,4602],{"class":131,"line":1656},[129,4603,2044],{"class":139},[129,4605,4606],{"class":131,"line":1661},[129,4607,4608],{"class":198},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[129,4610,4611,4613,4615,4617,4619,4621,4623,4625,4627,4629,4631,4633,4635,4637,4639,4641],{"class":131,"line":1667},[129,4612,3417],{"class":135},[129,4614,1672],{"class":139},[129,4616,143],{"class":135},[129,4618,3424],{"class":139},[129,4620,185],{"class":135},[129,4622,331],{"class":188},[129,4624,3431],{"class":139},[129,4626,1049],{"class":135},[129,4628,559],{"class":188},[129,4630,671],{"class":135},[129,4632,580],{"class":139},[129,4634,671],{"class":135},[129,4636,357],{"class":188},[129,4638,3431],{"class":139},[129,4640,2306],{"class":135},[129,4642,146],{"class":139},[129,4644,4645],{"class":131,"line":1688},[129,4646,2524],{"class":139},[129,4648,4649],{"class":131,"line":1693},[129,4650,4651],{"class":198},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[129,4653,4654,4657,4660,4662,4665,4667,4669],{"class":131,"line":1707},[129,4655,4656],{"class":135},"            if",[129,4658,4659],{"class":139},"(arr[j]",[129,4661,1099],{"class":135},[129,4663,4664],{"class":139},"arr[j",[129,4666,620],{"class":135},[129,4668,357],{"class":188},[129,4670,4671],{"class":139},"])\n",[129,4673,4674],{"class":131,"line":1712},[129,4675,4676],{"class":139},"            {\n",[129,4678,4679,4682,4684,4686],{"class":131,"line":1741},[129,4680,4681],{"class":135},"                int",[129,4683,4269],{"class":139},[129,4685,185],{"class":135},[129,4687,4688],{"class":139},"arr[j];\n",[129,4690,4691,4694,4696,4698,4700,4702],{"class":131,"line":1746},[129,4692,4693],{"class":139},"                arr[j]",[129,4695,185],{"class":135},[129,4697,4664],{"class":139},[129,4699,620],{"class":135},[129,4701,357],{"class":188},[129,4703,4704],{"class":139},"];\n",[129,4706,4707,4710,4712,4714,4716,4718],{"class":131,"line":1763},[129,4708,4709],{"class":139},"                arr[j",[129,4711,620],{"class":135},[129,4713,357],{"class":188},[129,4715,1079],{"class":139},[129,4717,185],{"class":135},[129,4719,4294],{"class":139},[129,4721,4722],{"class":131,"line":1768},[129,4723,4724],{"class":139},"            }\n",[129,4726,4727],{"class":131,"line":1773},[129,4728,2543],{"class":139},[129,4730,4731],{"class":131,"line":1778},[129,4732,2201],{"class":139},[129,4734,4735,4737,4739,4742,4744],{"class":131,"line":1792},[129,4736,1565],{"class":139},[129,4738,1183],{"class":135},[129,4740,4741],{"class":244},"\"排序后：\"",[129,4743,1183],{"class":135},[129,4745,1206],{"class":139},[129,4747,4748,4750,4752,4754,4756,4758,4760,4762,4764,4766,4768,4770],{"class":131,"line":1797},[129,4749,3215],{"class":135},[129,4751,1672],{"class":139},[129,4753,143],{"class":135},[129,4755,3046],{"class":139},[129,4757,185],{"class":135},[129,4759,331],{"class":188},[129,4761,3053],{"class":139},[129,4763,1049],{"class":135},[129,4765,559],{"class":188},[129,4767,3053],{"class":139},[129,4769,2306],{"class":135},[129,4771,146],{"class":139},[129,4773,4774],{"class":131,"line":2591},[129,4775,2044],{"class":139},[129,4777,4778,4780,4782,4784,4786,4788],{"class":131,"line":2605},[129,4779,3465],{"class":139},[129,4781,1183],{"class":135},[129,4783,4368],{"class":139},[129,4785,1183],{"class":135},[129,4787,4373],{"class":244},[129,4789,1305],{"class":139},[129,4791,4792],{"class":131,"line":2613},[129,4793,2201],{"class":139},[129,4795,4796,4798,4800],{"class":131,"line":2618},[129,4797,4104],{"class":135},[129,4799,4107],{"class":188},[129,4801,1305],{"class":139},[129,4803,4804],{"class":131,"line":2624},[129,4805,1579],{"class":139},[100,4807,4809],{"id":4808},"_172二维数组","1.7.2二维数组",[83,4811,4812],{},[86,4813,4814],{},"二维数组的四种定义方式",[277,4816,4817,4826],{},[280,4818,4819],{},[283,4820,4821,4824],{},[286,4822,4823],{},"序号",[286,4825,3795],{},[324,4827,4828,4838,4847,4856,4865],{},[283,4829,4830,4832],{},[329,4831,357],{},[329,4833,4834,4835,195],{},"数据类型 数组名[行数]",[129,4836,4837],{},"列数",[283,4839,4840,4842],{},[329,4841,217],{},[329,4843,4834,4844,4846],{},[129,4845,4837],{},"={ {数据1,数据2}，{数据3，数据4}... }",[283,4848,4849,4851],{},[329,4850,211],{},[329,4852,4834,4853,4855],{},[129,4854,4837],{},"={数据1,数据2,数据3...}",[283,4857,4858,4860],{},[329,4859,432],{},[329,4861,4862,4863,4855],{},"数据类型 数组名[]",[129,4864,4837],{},[283,4866,4867,4870],{},[329,4868,4869],{},"注意：不能只省略列数",[329,4871],{},[83,4873,4874],{"start":51},[86,4875,4876],{},"二维数组数组名",[1146,4878,4879,4882],{},[86,4880,4881],{},"1.查看二维数组所占内存空间",[86,4883,4884],{},"2.获取二维数组首地址",[14,4886,4887],{},"已知二维数组，求二维数组的行数与列数",[120,4889,4891],{"className":122,"code":4890,"language":124,"meta":42,"style":42},"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",[126,4892,4893,4901,4905,4923,4927,4945,4961,4966,4991,5024],{"__ignoreMap":42},[129,4894,4895,4897,4899],{"class":131,"line":132},[129,4896,143],{"class":135},[129,4898,1987],{"class":1977},[129,4900,1990],{"class":139},[129,4902,4903],{"class":131,"line":51},[129,4904,1560],{"class":139},[129,4906,4907,4909,4911,4913,4916,4918,4920],{"class":131,"line":1194},[129,4908,1999],{"class":135},[129,4910,3976],{"class":139},[129,4912,217],{"class":188},[129,4914,4915],{"class":139},"][",[129,4917,211],{"class":188},[129,4919,1079],{"class":139},[129,4921,4922],{"class":135},"=\n",[129,4924,4925],{"class":131,"line":1209},[129,4926,2044],{"class":139},[129,4928,4929,4932,4934,4936,4938,4940,4942],{"class":131,"line":1215},[129,4930,4931],{"class":139},"        {",[129,4933,357],{"class":188},[129,4935,517],{"class":139},[129,4937,217],{"class":188},[129,4939,517],{"class":139},[129,4941,211],{"class":188},[129,4943,4944],{"class":139},"},\n",[129,4946,4947,4949,4951,4953,4955,4957,4959],{"class":131,"line":1229},[129,4948,4931],{"class":139},[129,4950,432],{"class":188},[129,4952,517],{"class":139},[129,4954,458],{"class":188},[129,4956,517],{"class":139},[129,4958,483],{"class":188},[129,4960,1579],{"class":139},[129,4962,4963],{"class":131,"line":1235},[129,4964,4965],{"class":139},"    };\n",[129,4967,4968,4970,4972,4975,4977,4979,4981,4983,4985,4987,4989],{"class":131,"line":1326},[129,4969,1565],{"class":139},[129,4971,1183],{"class":135},[129,4973,4974],{"class":244},"\"二维数组的行数\"",[129,4976,1387],{"class":135},[129,4978,4220],{"class":139},[129,4980,4223],{"class":135},[129,4982,3865],{"class":139},[129,4984,331],{"class":188},[129,4986,4230],{"class":139},[129,4988,1183],{"class":135},[129,4990,1206],{"class":139},[129,4992,4993,4995,4997,5000,5002,5004,5006,5008,5010,5012,5014,5016,5018,5020,5022],{"class":131,"line":1332},[129,4994,1565],{"class":139},[129,4996,1183],{"class":135},[129,4998,4999],{"class":244},"\"二维数组的列数\"",[129,5001,1387],{"class":135},[129,5003,3865],{"class":139},[129,5005,331],{"class":188},[129,5007,4230],{"class":139},[129,5009,4223],{"class":135},[129,5011,3865],{"class":139},[129,5013,331],{"class":188},[129,5015,4915],{"class":139},[129,5017,331],{"class":188},[129,5019,4230],{"class":139},[129,5021,1183],{"class":135},[129,5023,1206],{"class":139},[129,5025,5026],{"class":131,"line":1344},[129,5027,1579],{"class":139},[14,5029,5030],{},"查看二维数组首地址",[120,5032,5034],{"className":122,"code":5033,"language":124,"meta":42,"style":42},"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",[126,5035,5036,5053,5079,5104],{"__ignoreMap":42},[129,5037,5038,5040,5042,5045,5047,5049,5051],{"class":131,"line":132},[129,5039,1384],{"class":139},[129,5041,1183],{"class":135},[129,5043,5044],{"class":244},"\"二维数组首地址：\"",[129,5046,1183],{"class":135},[129,5048,3894],{"class":139},[129,5050,1183],{"class":135},[129,5052,1206],{"class":139},[129,5054,5055,5057,5059,5062,5064,5066,5068,5071,5073,5075,5077],{"class":131,"line":51},[129,5056,1384],{"class":139},[129,5058,1183],{"class":135},[129,5060,5061],{"class":244},"\"二维数组第一行的首地址：\"",[129,5063,1183],{"class":135},[129,5065,140],{"class":139},[129,5067,143],{"class":135},[129,5069,5070],{"class":139},")arr[",[129,5072,331],{"class":188},[129,5074,1079],{"class":139},[129,5076,1183],{"class":135},[129,5078,1206],{"class":139},[129,5080,5081,5083,5085,5088,5090,5092,5094,5096,5098,5100,5102],{"class":131,"line":1194},[129,5082,1384],{"class":139},[129,5084,1183],{"class":135},[129,5086,5087],{"class":244},"\"二维数组第二行的首地址：\"",[129,5089,1183],{"class":135},[129,5091,140],{"class":139},[129,5093,143],{"class":135},[129,5095,5070],{"class":139},[129,5097,357],{"class":188},[129,5099,1079],{"class":139},[129,5101,1183],{"class":135},[129,5103,1206],{"class":139},[129,5105,5106,5108,5110,5113,5115,5117,5119,5121,5123,5125,5127,5129,5131,5133,5135,5137],{"class":131,"line":1209},[129,5107,1384],{"class":139},[129,5109,1183],{"class":135},[129,5111,5112],{"class":244},"\"二维数组第一个元素的首地址:\"",[129,5114,1183],{"class":135},[129,5116,140],{"class":139},[129,5118,143],{"class":135},[129,5120,568],{"class":139},[129,5122,492],{"class":135},[129,5124,3920],{"class":139},[129,5126,331],{"class":188},[129,5128,4915],{"class":139},[129,5130,331],{"class":188},[129,5132,1079],{"class":139},[129,5134,1183],{"class":135},[129,5136,1253],{"class":139},[129,5138,5139],{"class":198},"\u002F\u002F对于数，要加取址符\n",[5141,5142,5143],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":42,"searchDepth":51,"depth":51,"links":5145},[5146,5147,5148,5156,5157,5163,5168],{"id":73,"depth":51,"text":74},{"id":80,"depth":51,"text":81},{"id":97,"depth":51,"text":98,"children":5149},[5150,5151,5152,5153,5154,5155],{"id":102,"depth":1194,"text":103},{"id":156,"depth":1194,"text":157},{"id":225,"depth":1194,"text":226},{"id":1164,"depth":1194,"text":1165},{"id":1259,"depth":1194,"text":1260},{"id":1358,"depth":1194,"text":1359},{"id":1400,"depth":51,"text":1401},{"id":1468,"depth":51,"text":1469,"children":5158},[5159,5160,5161,5162],{"id":1472,"depth":1194,"text":1473},{"id":1493,"depth":1194,"text":1494},{"id":1502,"depth":1194,"text":1503},{"id":1511,"depth":1194,"text":1512},{"id":1520,"depth":51,"text":1521,"children":5164},[5165,5166,5167],{"id":1524,"depth":1194,"text":1525},{"id":2219,"depth":1194,"text":2220},{"id":3635,"depth":1194,"text":3636},{"id":3776,"depth":51,"text":3777,"children":5169},[5170,5171],{"id":3780,"depth":1194,"text":3781},{"id":4808,"depth":1194,"text":4809},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":64,"description":42},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5178,"title":5179,"body":5180,"description":42,"extension":54,"meta":6280,"navigation":56,"path":6281,"seo":6282,"stem":6283,"__hash__":6284},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5181,"toc":6272},[5182,5185,5189,5197,5205,5208,5274,5278,5281,5357,5361,5364,5367,5370,5583,5587,5592,5656,5661,5728,5733,5824,5827,5932,5936,5939,5945,6089,6093,6096,6110,6113,6158,6161,6269],[10,5183,5179],{"id":5184},"_2函数",[71,5186,5188],{"id":5187},"_21函数概述","2.1函数概述",[83,5190,5191,5194],{},[86,5192,5193],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[86,5195,5196],{},"语法：",[120,5198,5203],{"className":5199,"code":5201,"language":5202,"meta":42},[5200],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[126,5204,5201],{"__ignoreMap":42},[14,5206,5207],{},"小案例",[120,5209,5211],{"className":122,"code":5210,"language":124,"meta":42,"style":42},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[126,5212,5213,5218,5242,5246,5263,5270],{"__ignoreMap":42},[129,5214,5215],{"class":131,"line":132},[129,5216,5217],{"class":198},"\u002F\u002Fnum1,num2形参\n",[129,5219,5220,5222,5225,5227,5229,5233,5235,5237,5240],{"class":131,"line":51},[129,5221,143],{"class":135},[129,5223,5224],{"class":1977}," add",[129,5226,140],{"class":139},[129,5228,143],{"class":135},[129,5230,5232],{"class":5231},"s4XuR"," num1",[129,5234,517],{"class":139},[129,5236,143],{"class":135},[129,5238,5239],{"class":5231}," num2",[129,5241,146],{"class":139},[129,5243,5244],{"class":131,"line":1194},[129,5245,1560],{"class":139},[129,5247,5248,5250,5253,5255,5258,5260],{"class":131,"line":1209},[129,5249,1999],{"class":135},[129,5251,5252],{"class":139}," sum",[129,5254,185],{"class":135},[129,5256,5257],{"class":139},"num1",[129,5259,620],{"class":135},[129,5261,5262],{"class":139},"num2;\n",[129,5264,5265,5267],{"class":131,"line":1215},[129,5266,4104],{"class":135},[129,5268,5269],{"class":139}," sum;\n",[129,5271,5272],{"class":131,"line":1229},[129,5273,1579],{"class":139},[71,5275,5277],{"id":5276},"_22函数调用","2.2函数调用",[14,5279,5280],{},"调用刚刚写的求和函数",[120,5282,5284],{"className":122,"code":5283,"language":124,"meta":42,"style":42},"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",[126,5285,5286,5294,5298,5303,5315,5327,5336,5341,5353],{"__ignoreMap":42},[129,5287,5288,5290,5292],{"class":131,"line":132},[129,5289,143],{"class":135},[129,5291,1987],{"class":1977},[129,5293,1990],{"class":139},[129,5295,5296],{"class":131,"line":51},[129,5297,1560],{"class":139},[129,5299,5300],{"class":131,"line":1194},[129,5301,5302],{"class":198},"    \u002F\u002Fa,b实参\n",[129,5304,5305,5307,5309,5311,5313],{"class":131,"line":1209},[129,5306,1999],{"class":135},[129,5308,1413],{"class":139},[129,5310,185],{"class":135},[129,5312,331],{"class":188},[129,5314,1305],{"class":139},[129,5316,5317,5319,5321,5323,5325],{"class":131,"line":1215},[129,5318,1999],{"class":135},[129,5320,2847],{"class":139},[129,5322,185],{"class":135},[129,5324,331],{"class":188},[129,5326,1305],{"class":139},[129,5328,5329,5331,5333],{"class":131,"line":1229},[129,5330,2026],{"class":139},[129,5332,1444],{"class":135},[129,5334,5335],{"class":139},"a,b;\n",[129,5337,5338],{"class":131,"line":1235},[129,5339,5340],{"class":198},"    \u002F\u002F调用函数时，实参值传给了形参\n",[129,5342,5343,5345,5347,5350],{"class":131,"line":1326},[129,5344,1565],{"class":139},[129,5346,1183],{"class":135},[129,5348,5349],{"class":1977},"add",[129,5351,5352],{"class":139},"(a,b);\n",[129,5354,5355],{"class":131,"line":1332},[129,5356,1579],{"class":139},[71,5358,5360],{"id":5359},"_23值传递","2.3值传递",[14,5362,5363],{},"值传递就是函数调用时实参将数值传给形参",[14,5365,5366],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5368,5369],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[120,5371,5373],{"className":122,"code":5372,"language":124,"meta":42,"style":42},"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",[126,5374,5375,5397,5401,5414,5431,5449,5460,5469,5478,5491,5507,5523,5532,5536,5544,5548,5560,5572,5579],{"__ignoreMap":42},[129,5376,5377,5380,5383,5385,5387,5389,5391,5393,5395],{"class":131,"line":132},[129,5378,5379],{"class":135},"void",[129,5381,5382],{"class":1977}," swap",[129,5384,140],{"class":139},[129,5386,143],{"class":135},[129,5388,5232],{"class":5231},[129,5390,517],{"class":139},[129,5392,143],{"class":135},[129,5394,5239],{"class":5231},[129,5396,146],{"class":139},[129,5398,5399],{"class":131,"line":51},[129,5400,1560],{"class":139},[129,5402,5403,5405,5407,5410,5412],{"class":131,"line":1194},[129,5404,1565],{"class":139},[129,5406,1183],{"class":135},[129,5408,5409],{"class":244},"\"交换前：\"",[129,5411,1183],{"class":135},[129,5413,1206],{"class":139},[129,5415,5416,5418,5420,5423,5425,5427,5429],{"class":131,"line":1209},[129,5417,1565],{"class":139},[129,5419,1183],{"class":135},[129,5421,5422],{"class":244},"\"num1=\"",[129,5424,1183],{"class":135},[129,5426,5257],{"class":139},[129,5428,1183],{"class":135},[129,5430,1206],{"class":139},[129,5432,5433,5435,5437,5440,5442,5445,5447],{"class":131,"line":1215},[129,5434,1565],{"class":139},[129,5436,1183],{"class":135},[129,5438,5439],{"class":244},"\"num2=\"",[129,5441,1183],{"class":135},[129,5443,5444],{"class":139},"num2",[129,5446,1183],{"class":135},[129,5448,1206],{"class":139},[129,5450,5451,5453,5455,5457],{"class":131,"line":1229},[129,5452,1999],{"class":135},[129,5454,4269],{"class":139},[129,5456,185],{"class":135},[129,5458,5459],{"class":139},"num1;\n",[129,5461,5462,5465,5467],{"class":131,"line":1235},[129,5463,5464],{"class":139},"    num1",[129,5466,185],{"class":135},[129,5468,5262],{"class":139},[129,5470,5471,5474,5476],{"class":131,"line":1326},[129,5472,5473],{"class":139},"    num2",[129,5475,185],{"class":135},[129,5477,4294],{"class":139},[129,5479,5480,5482,5484,5487,5489],{"class":131,"line":1332},[129,5481,1565],{"class":139},[129,5483,1183],{"class":135},[129,5485,5486],{"class":244},"\"交换后：\"",[129,5488,1183],{"class":135},[129,5490,1206],{"class":139},[129,5492,5493,5495,5497,5499,5501,5503,5505],{"class":131,"line":1344},[129,5494,1565],{"class":139},[129,5496,1183],{"class":135},[129,5498,5422],{"class":244},[129,5500,1183],{"class":135},[129,5502,5257],{"class":139},[129,5504,1183],{"class":135},[129,5506,1206],{"class":139},[129,5508,5509,5511,5513,5515,5517,5519,5521],{"class":131,"line":1626},[129,5510,1565],{"class":139},[129,5512,1183],{"class":135},[129,5514,5439],{"class":244},[129,5516,1183],{"class":135},[129,5518,5444],{"class":139},[129,5520,1183],{"class":135},[129,5522,1206],{"class":139},[129,5524,5525,5527,5529],{"class":131,"line":1631},[129,5526,4104],{"class":135},[129,5528,195],{"class":139},[129,5530,5531],{"class":198},"\u002F\u002F或者不写\n",[129,5533,5534],{"class":131,"line":1637},[129,5535,1579],{"class":139},[129,5537,5538,5540,5542],{"class":131,"line":1642},[129,5539,143],{"class":135},[129,5541,1987],{"class":1977},[129,5543,1990],{"class":139},[129,5545,5546],{"class":131,"line":1656},[129,5547,1560],{"class":139},[129,5549,5550,5552,5554,5556,5558],{"class":131,"line":1661},[129,5551,1999],{"class":135},[129,5553,1413],{"class":139},[129,5555,185],{"class":135},[129,5557,585],{"class":188},[129,5559,1305],{"class":139},[129,5561,5562,5564,5566,5568,5570],{"class":131,"line":1667},[129,5563,1999],{"class":135},[129,5565,2847],{"class":139},[129,5567,185],{"class":135},[129,5569,839],{"class":188},[129,5571,1305],{"class":139},[129,5573,5574,5577],{"class":131,"line":1688},[129,5575,5576],{"class":1977},"    swap",[129,5578,5352],{"class":139},[129,5580,5581],{"class":131,"line":1693},[129,5582,1579],{"class":139},[71,5584,5586],{"id":5585},"_24函数的常见形式","2.4函数的常见形式",[83,5588,5589],{},[86,5590,5591],{},"无参无返",[120,5593,5595],{"className":122,"code":5594,"language":124,"meta":42,"style":42},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[126,5596,5597,5606,5610,5623,5627,5635,5639,5644,5652],{"__ignoreMap":42},[129,5598,5599,5601,5604],{"class":131,"line":132},[129,5600,5379],{"class":135},[129,5602,5603],{"class":1977}," test01",[129,5605,1990],{"class":139},[129,5607,5608],{"class":131,"line":51},[129,5609,1560],{"class":139},[129,5611,5612,5614,5616,5619,5621],{"class":131,"line":1194},[129,5613,1565],{"class":139},[129,5615,1183],{"class":135},[129,5617,5618],{"class":244},"\"你好\"",[129,5620,1183],{"class":135},[129,5622,1206],{"class":139},[129,5624,5625],{"class":131,"line":1209},[129,5626,1579],{"class":139},[129,5628,5629,5631,5633],{"class":131,"line":1215},[129,5630,143],{"class":135},[129,5632,1987],{"class":1977},[129,5634,1990],{"class":139},[129,5636,5637],{"class":131,"line":1229},[129,5638,1560],{"class":139},[129,5640,5641],{"class":131,"line":1235},[129,5642,5643],{"class":198},"    \u002F\u002F函数调用\n",[129,5645,5646,5649],{"class":131,"line":1326},[129,5647,5648],{"class":1977},"    test01",[129,5650,5651],{"class":139},"();\n",[129,5653,5654],{"class":131,"line":1332},[129,5655,1579],{"class":139},[83,5657,5658],{"start":51},[86,5659,5660],{},"有参无返",[120,5662,5664],{"className":122,"code":5663,"language":124,"meta":42,"style":42},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[126,5665,5666,5681,5685,5697,5701,5709,5713,5724],{"__ignoreMap":42},[129,5667,5668,5670,5673,5675,5677,5679],{"class":131,"line":132},[129,5669,5379],{"class":135},[129,5671,5672],{"class":1977}," test02",[129,5674,140],{"class":139},[129,5676,143],{"class":135},[129,5678,1413],{"class":5231},[129,5680,146],{"class":139},[129,5682,5683],{"class":131,"line":51},[129,5684,1560],{"class":139},[129,5686,5687,5689,5691,5693,5695],{"class":131,"line":1194},[129,5688,1565],{"class":139},[129,5690,1183],{"class":135},[129,5692,5618],{"class":244},[129,5694,1183],{"class":135},[129,5696,1206],{"class":139},[129,5698,5699],{"class":131,"line":1209},[129,5700,1579],{"class":139},[129,5702,5703,5705,5707],{"class":131,"line":1215},[129,5704,143],{"class":135},[129,5706,1987],{"class":1977},[129,5708,1990],{"class":139},[129,5710,5711],{"class":131,"line":1229},[129,5712,1560],{"class":139},[129,5714,5715,5718,5720,5722],{"class":131,"line":1235},[129,5716,5717],{"class":1977},"    test02",[129,5719,140],{"class":139},[129,5721,450],{"class":188},[129,5723,2733],{"class":139},[129,5725,5726],{"class":131,"line":1326},[129,5727,1579],{"class":139},[83,5729,5730],{"start":1194},[86,5731,5732],{},"无参有返",[120,5734,5736],{"className":122,"code":5735,"language":124,"meta":42,"style":42},"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",[126,5737,5738,5747,5751,5763,5772,5776,5784,5788,5801,5820],{"__ignoreMap":42},[129,5739,5740,5742,5745],{"class":131,"line":132},[129,5741,143],{"class":135},[129,5743,5744],{"class":1977}," test03",[129,5746,1990],{"class":139},[129,5748,5749],{"class":131,"line":51},[129,5750,1560],{"class":139},[129,5752,5753,5755,5757,5759,5761],{"class":131,"line":1194},[129,5754,1565],{"class":139},[129,5756,1183],{"class":135},[129,5758,5618],{"class":244},[129,5760,1183],{"class":135},[129,5762,1206],{"class":139},[129,5764,5765,5767,5770],{"class":131,"line":1209},[129,5766,4104],{"class":135},[129,5768,5769],{"class":188}," 100",[129,5771,1305],{"class":139},[129,5773,5774],{"class":131,"line":1215},[129,5775,1579],{"class":139},[129,5777,5778,5780,5782],{"class":131,"line":1229},[129,5779,143],{"class":135},[129,5781,1987],{"class":1977},[129,5783,1990],{"class":139},[129,5785,5786],{"class":131,"line":1235},[129,5787,1560],{"class":139},[129,5789,5790,5792,5794,5796,5799],{"class":131,"line":1326},[129,5791,1999],{"class":135},[129,5793,5232],{"class":139},[129,5795,185],{"class":135},[129,5797,5798],{"class":1977},"test03",[129,5800,5651],{"class":139},[129,5802,5803,5805,5807,5809,5811,5813,5815,5817],{"class":131,"line":1332},[129,5804,1565],{"class":139},[129,5806,1183],{"class":135},[129,5808,5422],{"class":244},[129,5810,1183],{"class":135},[129,5812,5257],{"class":139},[129,5814,1183],{"class":135},[129,5816,1253],{"class":139},[129,5818,5819],{"class":198}," \u002F\u002F100\n",[129,5821,5822],{"class":131,"line":1344},[129,5823,1579],{"class":139},[14,5825,5826],{},"4.有参有返",[120,5828,5830],{"className":122,"code":5829,"language":124,"meta":42,"style":42},"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",[126,5831,5832,5847,5851,5864,5870,5874,5883,5887,5899,5913,5928],{"__ignoreMap":42},[129,5833,5834,5836,5839,5841,5843,5845],{"class":131,"line":132},[129,5835,143],{"class":135},[129,5837,5838],{"class":1977}," test04",[129,5840,140],{"class":139},[129,5842,143],{"class":135},[129,5844,1413],{"class":5231},[129,5846,146],{"class":139},[129,5848,5849],{"class":131,"line":51},[129,5850,1560],{"class":139},[129,5852,5853,5855,5857,5860,5862],{"class":131,"line":1194},[129,5854,1565],{"class":139},[129,5856,1183],{"class":135},[129,5858,5859],{"class":244},"\"hello\"",[129,5861,1183],{"class":135},[129,5863,1206],{"class":139},[129,5865,5866,5868],{"class":131,"line":1209},[129,5867,4104],{"class":135},[129,5869,1447],{"class":139},[129,5871,5872],{"class":131,"line":1215},[129,5873,1579],{"class":139},[129,5875,5876,5878,5881],{"class":131,"line":1229},[129,5877,143],{"class":135},[129,5879,5880],{"class":1977}," mian",[129,5882,1990],{"class":139},[129,5884,5885],{"class":131,"line":1235},[129,5886,1560],{"class":139},[129,5888,5889,5891,5893,5895,5897],{"class":131,"line":1326},[129,5890,1999],{"class":135},[129,5892,2847],{"class":139},[129,5894,185],{"class":135},[129,5896,357],{"class":188},[129,5898,1305],{"class":139},[129,5900,5901,5903,5905,5907,5910],{"class":131,"line":1332},[129,5902,1999],{"class":135},[129,5904,2863],{"class":139},[129,5906,185],{"class":135},[129,5908,5909],{"class":1977},"test04",[129,5911,5912],{"class":139},"(b);\n",[129,5914,5915,5917,5919,5921,5923,5925],{"class":131,"line":1344},[129,5916,1565],{"class":139},[129,5918,1183],{"class":135},[129,5920,427],{"class":139},[129,5922,1183],{"class":135},[129,5924,1253],{"class":139},[129,5926,5927],{"class":198}," \u002F\u002F1\n",[129,5929,5930],{"class":131,"line":1626},[129,5931,1579],{"class":139},[71,5933,5935],{"id":5934},"_25函数的声明","2.5函数的声明",[14,5937,5938],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,5940,5941,5942],{},"函数的",[289,5943,5944],{},"声明可以多次，但是函数的定义只能有一次",[120,5946,5948],{"className":122,"code":5947,"language":124,"meta":42,"style":42},"\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",[126,5949,5950,5955,5960,5985,5994,5998,6010,6022,6038,6042,6062,6066,6085],{"__ignoreMap":42},[129,5951,5952],{"class":131,"line":132},[129,5953,5954],{"class":198},"\u002F\u002F函数声明\n",[129,5956,5957],{"class":131,"line":51},[129,5958,5959],{"class":198},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[129,5961,5962,5964,5967,5969,5971,5973,5975,5977,5979,5982],{"class":131,"line":1194},[129,5963,143],{"class":135},[129,5965,5966],{"class":1977}," max",[129,5968,140],{"class":139},[129,5970,143],{"class":135},[129,5972,1413],{"class":5231},[129,5974,517],{"class":139},[129,5976,143],{"class":135},[129,5978,2847],{"class":5231},[129,5980,5981],{"class":139},");",[129,5983,5984],{"class":198},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[129,5986,5987,5989,5991],{"class":131,"line":1209},[129,5988,143],{"class":135},[129,5990,1987],{"class":1977},[129,5992,5993],{"class":139},"() \n",[129,5995,5996],{"class":131,"line":1215},[129,5997,1560],{"class":139},[129,5999,6000,6002,6004,6006,6008],{"class":131,"line":1229},[129,6001,1999],{"class":135},[129,6003,1413],{"class":139},[129,6005,185],{"class":135},[129,6007,585],{"class":188},[129,6009,1305],{"class":139},[129,6011,6012,6014,6016,6018,6020],{"class":131,"line":1235},[129,6013,1999],{"class":135},[129,6015,2847],{"class":139},[129,6017,185],{"class":135},[129,6019,839],{"class":188},[129,6021,1305],{"class":139},[129,6023,6024,6026,6028,6031,6034,6036],{"class":131,"line":1326},[129,6025,1565],{"class":139},[129,6027,1183],{"class":135},[129,6029,6030],{"class":1977},"max",[129,6032,6033],{"class":139},"(a,b)",[129,6035,1183],{"class":135},[129,6037,1206],{"class":139},[129,6039,6040],{"class":131,"line":1332},[129,6041,1579],{"class":139},[129,6043,6044,6046,6048,6050,6052,6054,6056,6058,6060],{"class":131,"line":1344},[129,6045,143],{"class":135},[129,6047,5966],{"class":1977},[129,6049,140],{"class":139},[129,6051,143],{"class":135},[129,6053,1413],{"class":5231},[129,6055,517],{"class":139},[129,6057,143],{"class":135},[129,6059,2847],{"class":5231},[129,6061,146],{"class":139},[129,6063,6064],{"class":131,"line":1626},[129,6065,1560],{"class":139},[129,6067,6068,6070,6072,6074,6076,6078,6080,6082],{"class":131,"line":1631},[129,6069,4104],{"class":135},[129,6071,1413],{"class":139},[129,6073,1099],{"class":135},[129,6075,402],{"class":139},[129,6077,1125],{"class":135},[129,6079,20],{"class":139},[129,6081,998],{"class":135},[129,6083,6084],{"class":139},"b;\n",[129,6086,6087],{"class":131,"line":1637},[129,6088,1579],{"class":139},[71,6090,6092],{"id":6091},"_26函数的分文件编写","2.6函数的分文件编写",[14,6094,6095],{},"4个步骤：",[1146,6097,6098,6101,6104,6107],{},[86,6099,6100],{},"1.创建后缀名为.h的头文件",[86,6102,6103],{},"2.创建后缀名为.cpp的源文件",[86,6105,6106],{},"3.在头文件中写函数的定义",[86,6108,6109],{},"4.在源文件中写函数的定义\n示例：",[14,6111,6112],{},"头文件：swap.h",[120,6114,6116],{"className":122,"code":6115,"language":124,"meta":42,"style":42},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[126,6117,6118,6124,6134,6138],{"__ignoreMap":42},[129,6119,6120,6122],{"class":131,"line":132},[129,6121,1963],{"class":135},[129,6123,1966],{"class":244},[129,6125,6126,6128,6130,6132],{"class":131,"line":51},[129,6127,1971],{"class":135},[129,6129,1974],{"class":135},[129,6131,1978],{"class":1977},[129,6133,1305],{"class":139},[129,6135,6136],{"class":131,"line":1194},[129,6137,5954],{"class":198},[129,6139,6140,6142,6144,6146,6148,6150,6152,6154,6156],{"class":131,"line":1209},[129,6141,5379],{"class":135},[129,6143,5382],{"class":1977},[129,6145,140],{"class":139},[129,6147,143],{"class":135},[129,6149,1413],{"class":5231},[129,6151,517],{"class":139},[129,6153,143],{"class":135},[129,6155,2847],{"class":5231},[129,6157,2733],{"class":139},[14,6159,6160],{},"源文件：swap.cpp",[120,6162,6164],{"className":122,"code":6163,"language":124,"meta":42,"style":42},"#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",[126,6165,6166,6173,6178,6198,6202,6213,6222,6231,6248,6265],{"__ignoreMap":42},[129,6167,6168,6170],{"class":131,"line":132},[129,6169,1963],{"class":135},[129,6171,6172],{"class":244}," \"swap.h\"\n",[129,6174,6175],{"class":131,"line":51},[129,6176,6177],{"class":198},"\u002F\u002F函数的定义\n",[129,6179,6180,6182,6184,6186,6188,6190,6192,6194,6196],{"class":131,"line":1194},[129,6181,5379],{"class":135},[129,6183,5382],{"class":1977},[129,6185,140],{"class":139},[129,6187,143],{"class":135},[129,6189,1413],{"class":5231},[129,6191,517],{"class":139},[129,6193,143],{"class":135},[129,6195,2847],{"class":5231},[129,6197,146],{"class":139},[129,6199,6200],{"class":131,"line":1209},[129,6201,1560],{"class":139},[129,6203,6204,6206,6208,6210],{"class":131,"line":1215},[129,6205,1999],{"class":135},[129,6207,4269],{"class":139},[129,6209,185],{"class":135},[129,6211,6212],{"class":139},"a;\n",[129,6214,6215,6218,6220],{"class":131,"line":1229},[129,6216,6217],{"class":139},"    a",[129,6219,185],{"class":135},[129,6221,6084],{"class":139},[129,6223,6224,6227,6229],{"class":131,"line":1235},[129,6225,6226],{"class":139},"    b",[129,6228,185],{"class":135},[129,6230,4294],{"class":139},[129,6232,6233,6235,6237,6240,6242,6244,6246],{"class":131,"line":1326},[129,6234,1565],{"class":139},[129,6236,1183],{"class":135},[129,6238,6239],{"class":244},"\"a=\"",[129,6241,1183],{"class":135},[129,6243,20],{"class":139},[129,6245,1183],{"class":135},[129,6247,1206],{"class":139},[129,6249,6250,6252,6254,6257,6259,6261,6263],{"class":131,"line":1332},[129,6251,1565],{"class":139},[129,6253,1183],{"class":135},[129,6255,6256],{"class":244},"\"b=\"",[129,6258,1183],{"class":135},[129,6260,402],{"class":139},[129,6262,1183],{"class":135},[129,6264,1206],{"class":139},[129,6266,6267],{"class":131,"line":1344},[129,6268,1579],{"class":139},[5141,6270,6271],{},"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":42,"searchDepth":51,"depth":51,"links":6273},[6274,6275,6276,6277,6278,6279],{"id":5187,"depth":51,"text":5188},{"id":5276,"depth":51,"text":5277},{"id":5359,"depth":51,"text":5360},{"id":5585,"depth":51,"text":5586},{"id":5934,"depth":51,"text":5935},{"id":6091,"depth":51,"text":6092},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5179,"description":42},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6286,"title":6287,"body":6288,"description":6295,"extension":54,"meta":7700,"navigation":56,"path":7701,"seo":7702,"stem":7703,"__hash__":7704},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6289,"toc":7690},[6290,6293,6296,6300,6462,6466,6469,6472,6475,6478,6618,6622,6625,6628,6631,6696,6700,6705,6772,6775,6779,6782,6793,6798,6818,6821,6826,6845,6848,6852,6871,6874,6878,7113,7117,7120,7123,7126,7288,7291,7295,7298,7304,7687],[10,6291,6287],{"id":6292},"_3指针",[14,6294,6295],{},"通过指针保存一个地址，指针就是个地址",[71,6297,6299],{"id":6298},"_31定义指针","3.1定义指针",[120,6301,6303],{"className":122,"code":6302,"language":124,"meta":42,"style":42},"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",[126,6304,6305,6313,6317,6322,6334,6339,6347,6357,6375,6395,6399,6404,6409,6414,6428,6444,6458],{"__ignoreMap":42},[129,6306,6307,6309,6311],{"class":131,"line":132},[129,6308,143],{"class":135},[129,6310,1987],{"class":1977},[129,6312,1990],{"class":139},[129,6314,6315],{"class":131,"line":51},[129,6316,1560],{"class":139},[129,6318,6319],{"class":131,"line":1194},[129,6320,6321],{"class":198},"    \u002F\u002F1.定义指针\n",[129,6323,6324,6326,6328,6330,6332],{"class":131,"line":1209},[129,6325,1999],{"class":135},[129,6327,1413],{"class":139},[129,6329,185],{"class":135},[129,6331,585],{"class":188},[129,6333,1305],{"class":139},[129,6335,6336],{"class":131,"line":1215},[129,6337,6338],{"class":198},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[129,6340,6341,6344],{"class":131,"line":1229},[129,6342,6343],{"class":135},"    int*",[129,6345,6346],{"class":139},"p;\n",[129,6348,6349,6352,6355],{"class":131,"line":1235},[129,6350,6351],{"class":139},"    p",[129,6353,6354],{"class":135},"=&",[129,6356,6212],{"class":139},[129,6358,6359,6361,6363,6366,6369,6371,6373],{"class":131,"line":1326},[129,6360,1565],{"class":139},[129,6362,1183],{"class":135},[129,6364,6365],{"class":244},"\"a的地址为：\"",[129,6367,6368],{"class":135},"\u003C\u003C&",[129,6370,20],{"class":139},[129,6372,1183],{"class":135},[129,6374,1206],{"class":139},[129,6376,6377,6379,6381,6384,6386,6388,6390,6392],{"class":131,"line":1332},[129,6378,1565],{"class":139},[129,6380,1183],{"class":135},[129,6382,6383],{"class":244},"\"指针p为：\"",[129,6385,1183],{"class":135},[129,6387,14],{"class":139},[129,6389,1183],{"class":135},[129,6391,1253],{"class":139},[129,6393,6394],{"class":198},"\u002F\u002F指针p表示的就是a的地址\n",[129,6396,6397],{"class":131,"line":1344},[129,6398,2414],{"emptyLinePlaceholder":56},[129,6400,6401],{"class":131,"line":1626},[129,6402,6403],{"class":198},"    \u002F\u002F2.使用指针\n",[129,6405,6406],{"class":131,"line":1631},[129,6407,6408],{"class":198},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[129,6410,6411],{"class":131,"line":1637},[129,6412,6413],{"class":198},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[129,6415,6416,6419,6421,6423,6426],{"class":131,"line":1642},[129,6417,6418],{"class":135},"    *",[129,6420,14],{"class":139},[129,6422,185],{"class":135},[129,6424,6425],{"class":188},"1000",[129,6427,1305],{"class":139},[129,6429,6430,6432,6435,6437,6439,6441],{"class":131,"line":1656},[129,6431,1565],{"class":139},[129,6433,6434],{"class":135},"\u003C\u003C*",[129,6436,14],{"class":139},[129,6438,1183],{"class":135},[129,6440,1253],{"class":139},[129,6442,6443],{"class":198},"\u002F\u002F1000\n",[129,6445,6446,6448,6450,6452,6454,6456],{"class":131,"line":1661},[129,6447,1565],{"class":139},[129,6449,1183],{"class":135},[129,6451,20],{"class":139},[129,6453,1183],{"class":135},[129,6455,1253],{"class":139},[129,6457,6443],{"class":198},[129,6459,6460],{"class":131,"line":1667},[129,6461,1579],{"class":139},[71,6463,6465],{"id":6464},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6467,6468],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6470,6471],{},"在32位操作系统下：占用4个字节空间",[14,6473,6474],{},"在64位操作系统下：占用8个字节空间",[14,6476,6477],{},"上方是不管啥数据类型的",[120,6479,6481],{"className":122,"code":6480,"language":124,"meta":42,"style":42},"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",[126,6482,6483,6491,6495,6500,6512,6517,6522,6527,6540,6562,6588,6614],{"__ignoreMap":42},[129,6484,6485,6487,6489],{"class":131,"line":132},[129,6486,143],{"class":135},[129,6488,1987],{"class":1977},[129,6490,1990],{"class":139},[129,6492,6493],{"class":131,"line":51},[129,6494,1560],{"class":139},[129,6496,6497],{"class":131,"line":1194},[129,6498,6499],{"class":198},"    \u002F\u002F指针所占内存空间\n",[129,6501,6502,6504,6506,6508,6510],{"class":131,"line":1209},[129,6503,1999],{"class":135},[129,6505,1413],{"class":139},[129,6507,185],{"class":135},[129,6509,585],{"class":188},[129,6511,1305],{"class":139},[129,6513,6514],{"class":131,"line":1215},[129,6515,6516],{"class":198},"    \u002F\u002Fint *p;\n",[129,6518,6519],{"class":131,"line":1229},[129,6520,6521],{"class":198},"    \u002F\u002Fp=&a;\n",[129,6523,6524],{"class":131,"line":1235},[129,6525,6526],{"class":198},"    \u002F\u002F上述可以写为以下：\n",[129,6528,6529,6531,6534,6536,6538],{"class":131,"line":1326},[129,6530,1999],{"class":135},[129,6532,6533],{"class":135}," *",[129,6535,14],{"class":139},[129,6537,6354],{"class":135},[129,6539,6212],{"class":139},[129,6541,6542,6545,6547,6550,6552,6555,6557,6559],{"class":131,"line":1332},[129,6543,6544],{"class":139},"    cout ",[129,6546,1183],{"class":135},[129,6548,6549],{"class":244},"\"sizeof(int *)\"",[129,6551,1387],{"class":135},[129,6553,6554],{"class":139},"(p)",[129,6556,1183],{"class":135},[129,6558,1253],{"class":139},[129,6560,6561],{"class":198},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[129,6563,6564,6566,6568,6570,6572,6574,6576,6578,6580,6582,6585],{"class":131,"line":1344},[129,6565,6544],{"class":139},[129,6567,1183],{"class":135},[129,6569,6549],{"class":244},[129,6571,1387],{"class":135},[129,6573,140],{"class":139},[129,6575,143],{"class":135},[129,6577,6533],{"class":135},[129,6579,568],{"class":139},[129,6581,1183],{"class":135},[129,6583,6584],{"class":139},"endl",[129,6586,6587],{"class":198},"  \u002F\u002F4字节(32位的话)\n",[129,6589,6590,6592,6594,6597,6599,6601,6603,6605,6607,6609,6611],{"class":131,"line":1626},[129,6591,6544],{"class":139},[129,6593,1183],{"class":135},[129,6595,6596],{"class":244},"\"sizeof(char *)\"",[129,6598,1387],{"class":135},[129,6600,140],{"class":139},[129,6602,236],{"class":135},[129,6604,6533],{"class":135},[129,6606,568],{"class":139},[129,6608,1183],{"class":135},[129,6610,1253],{"class":139},[129,6612,6613],{"class":198}," \u002F\u002F4字节(32位的话)\n",[129,6615,6616],{"class":131,"line":1631},[129,6617,1579],{"class":139},[71,6619,6621],{"id":6620},"_33空指针","3.3空指针",[14,6623,6624],{},"空指针：指针变量指向内存中编号为0的空间",[14,6626,6627],{},"用途：初始化指针变量",[14,6629,6630],{},"注意：空指针指向的内存是不可以访问的",[120,6632,6634],{"className":122,"code":6633,"language":124,"meta":42,"style":42},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[126,6635,6636,6644,6648,6653,6667,6672,6687,6692],{"__ignoreMap":42},[129,6637,6638,6640,6642],{"class":131,"line":132},[129,6639,143],{"class":135},[129,6641,1987],{"class":1977},[129,6643,1990],{"class":139},[129,6645,6646],{"class":131,"line":51},[129,6647,1560],{"class":139},[129,6649,6650],{"class":131,"line":1194},[129,6651,6652],{"class":198},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[129,6654,6655,6657,6659,6661,6663,6665],{"class":131,"line":1209},[129,6656,1999],{"class":135},[129,6658,6533],{"class":135},[129,6660,14],{"class":139},[129,6662,185],{"class":135},[129,6664,2406],{"class":188},[129,6666,1305],{"class":139},[129,6668,6669],{"class":131,"line":1215},[129,6670,6671],{"class":198},"    \u002F\u002F2.空指针不能进行访问\n",[129,6673,6674,6676,6678,6680,6682,6684],{"class":131,"line":1229},[129,6675,6418],{"class":135},[129,6677,14],{"class":139},[129,6679,185],{"class":135},[129,6681,450],{"class":188},[129,6683,195],{"class":139},[129,6685,6686],{"class":198},"\u002F\u002F直接报错，压根不能访问\n",[129,6688,6689],{"class":131,"line":1235},[129,6690,6691],{"class":198},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[129,6693,6694],{"class":131,"line":1326},[129,6695,1579],{"class":139},[71,6697,6699],{"id":6698},"_34野指针","3.4野指针",[14,6701,6702],{},[289,6703,6704],{},"指针变量指向非法的内存空间",[120,6706,6708],{"className":122,"code":6707,"language":124,"meta":42,"style":42},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[126,6709,6710,6718,6722,6751,6756,6768],{"__ignoreMap":42},[129,6711,6712,6714,6716],{"class":131,"line":132},[129,6713,143],{"class":135},[129,6715,1987],{"class":1977},[129,6717,1990],{"class":139},[129,6719,6720],{"class":131,"line":51},[129,6721,1560],{"class":139},[129,6723,6724,6726,6728,6730,6732,6734,6736,6738,6740,6743,6746,6748],{"class":131,"line":1194},[129,6725,1999],{"class":135},[129,6727,6533],{"class":135},[129,6729,14],{"class":139},[129,6731,185],{"class":135},[129,6733,140],{"class":139},[129,6735,143],{"class":135},[129,6737,6533],{"class":135},[129,6739,568],{"class":139},[129,6741,6742],{"class":135},"0x",[129,6744,6745],{"class":188},"1100",[129,6747,195],{"class":139},[129,6749,6750],{"class":198}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[129,6752,6753],{"class":131,"line":1209},[129,6754,6755],{"class":198},"    \u002F\u002F访问野指针报错\n",[129,6757,6758,6760,6762,6764,6766],{"class":131,"line":1215},[129,6759,1565],{"class":139},[129,6761,6434],{"class":135},[129,6763,14],{"class":139},[129,6765,1183],{"class":135},[129,6767,1206],{"class":139},[129,6769,6770],{"class":131,"line":1229},[129,6771,1579],{"class":139},[14,6773,6774],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[71,6776,6778],{"id":6777},"_35const修饰指针","3.5const修饰指针",[14,6780,6781],{},"三种情况：",[1146,6783,6784,6787,6790],{},[86,6785,6786],{},"const修饰指针 常量指针",[86,6788,6789],{},"const修饰常量 指针常量",[86,6791,6792],{},"const即修饰指针，又修饰常量",[83,6794,6795],{},[86,6796,6797],{},"常量指针",[120,6799,6801],{"className":122,"code":6800,"language":124,"meta":42,"style":42},"const int *p=&a;\n",[126,6802,6803],{"__ignoreMap":42},[129,6804,6805,6808,6810,6812,6814,6816],{"class":131,"line":132},[129,6806,6807],{"class":135},"const",[129,6809,2396],{"class":135},[129,6811,6533],{"class":135},[129,6813,14],{"class":139},[129,6815,6354],{"class":135},[129,6817,6212],{"class":139},[14,6819,6820],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[83,6822,6823],{"start":51},[86,6824,6825],{},"指针常量",[120,6827,6829],{"className":122,"code":6828,"language":124,"meta":42,"style":42},"int *const p=&a;\n",[126,6830,6831],{"__ignoreMap":42},[129,6832,6833,6835,6838,6841,6843],{"class":131,"line":132},[129,6834,143],{"class":135},[129,6836,6837],{"class":135}," *const",[129,6839,6840],{"class":139}," p",[129,6842,6354],{"class":135},[129,6844,6212],{"class":139},[14,6846,6847],{},"指针的指向不可以改，指针指向的值可以改",[83,6849,6850],{"start":1194},[86,6851,6792],{},[120,6853,6855],{"className":122,"code":6854,"language":124,"meta":42,"style":42},"const int *const p=&a;\n",[126,6856,6857],{"__ignoreMap":42},[129,6858,6859,6861,6863,6865,6867,6869],{"class":131,"line":132},[129,6860,6807],{"class":135},[129,6862,2396],{"class":135},[129,6864,6837],{"class":135},[129,6866,6840],{"class":139},[129,6868,6354],{"class":135},[129,6870,6212],{"class":139},[14,6872,6873],{},"指针的指向和指针指向的值都不可以改变",[71,6875,6877],{"id":6876},"_36指针和数组","3.6指针和数组",[120,6879,6881],{"className":122,"code":6880,"language":124,"meta":42,"style":42},"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",[126,6882,6883,6891,6895,6900,6954,6975,6991,7007,7018,7035,7040,7054,7080,7084,7096,7105,7109],{"__ignoreMap":42},[129,6884,6885,6887,6889],{"class":131,"line":132},[129,6886,143],{"class":135},[129,6888,1987],{"class":1977},[129,6890,1990],{"class":139},[129,6892,6893],{"class":131,"line":51},[129,6894,1560],{"class":139},[129,6896,6897],{"class":131,"line":1194},[129,6898,6899],{"class":198},"    \u002F\u002F利用指针访问数组中的元素\n",[129,6901,6902,6904,6906,6908,6910,6912,6914,6916,6918,6920,6922,6924,6926,6928,6930,6932,6934,6936,6938,6940,6942,6944,6946,6948,6950,6952],{"class":131,"line":1209},[129,6903,1999],{"class":135},[129,6905,3976],{"class":139},[129,6907,585],{"class":188},[129,6909,1079],{"class":139},[129,6911,185],{"class":135},[129,6913,1035],{"class":139},[129,6915,357],{"class":188},[129,6917,517],{"class":139},[129,6919,217],{"class":188},[129,6921,517],{"class":139},[129,6923,211],{"class":188},[129,6925,517],{"class":139},[129,6927,432],{"class":188},[129,6929,517],{"class":139},[129,6931,458],{"class":188},[129,6933,517],{"class":139},[129,6935,483],{"class":188},[129,6937,517],{"class":139},[129,6939,508],{"class":188},[129,6941,517],{"class":139},[129,6943,534],{"class":188},[129,6945,517],{"class":139},[129,6947,559],{"class":188},[129,6949,517],{"class":139},[129,6951,585],{"class":188},[129,6953,4009],{"class":139},[129,6955,6956,6958,6960,6963,6965,6967,6969,6971,6973],{"class":131,"line":1215},[129,6957,1565],{"class":139},[129,6959,1183],{"class":135},[129,6961,6962],{"class":244},"\"数组的第一个元素为：\"",[129,6964,1183],{"class":135},[129,6966,3920],{"class":139},[129,6968,331],{"class":188},[129,6970,1079],{"class":139},[129,6972,1183],{"class":135},[129,6974,1206],{"class":139},[129,6976,6977,6979,6981,6983,6985,6988],{"class":131,"line":1229},[129,6978,1999],{"class":135},[129,6980,6533],{"class":135},[129,6982,14],{"class":139},[129,6984,185],{"class":135},[129,6986,6987],{"class":139},"arr;",[129,6989,6990],{"class":198},"\u002F\u002F注意数才要加取地址符号&\n",[129,6992,6993,6995,6997,6999,7001,7003,7005],{"class":131,"line":1235},[129,6994,1565],{"class":139},[129,6996,1183],{"class":135},[129,6998,6962],{"class":244},[129,7000,6434],{"class":135},[129,7002,14],{"class":139},[129,7004,1183],{"class":135},[129,7006,1206],{"class":139},[129,7008,7009,7011,7013,7015],{"class":131,"line":1326},[129,7010,6351],{"class":139},[129,7012,2306],{"class":135},[129,7014,195],{"class":139},[129,7016,7017],{"class":198}," \u002F\u002F让指针向后偏移4个字节\n",[129,7019,7020,7022,7024,7027,7029,7031,7033],{"class":131,"line":1332},[129,7021,1565],{"class":139},[129,7023,1183],{"class":135},[129,7025,7026],{"class":244},"\"数组的第二个元素为：\"",[129,7028,6434],{"class":135},[129,7030,14],{"class":139},[129,7032,1183],{"class":135},[129,7034,1206],{"class":139},[129,7036,7037],{"class":131,"line":1344},[129,7038,7039],{"class":198},"    \u002F\u002F利用指针遍历数组\n",[129,7041,7042,7044,7046,7049,7051],{"class":131,"line":1626},[129,7043,1999],{"class":135},[129,7045,6533],{"class":135},[129,7047,7048],{"class":139},"p2",[129,7050,185],{"class":135},[129,7052,7053],{"class":139},"arr;\n",[129,7055,7056,7058,7060,7062,7064,7066,7068,7070,7072,7074,7076,7078],{"class":131,"line":1631},[129,7057,3215],{"class":135},[129,7059,1672],{"class":139},[129,7061,143],{"class":135},[129,7063,3046],{"class":139},[129,7065,185],{"class":135},[129,7067,331],{"class":188},[129,7069,3053],{"class":139},[129,7071,1049],{"class":135},[129,7073,585],{"class":188},[129,7075,3053],{"class":139},[129,7077,2306],{"class":135},[129,7079,146],{"class":139},[129,7081,7082],{"class":131,"line":1637},[129,7083,2044],{"class":139},[129,7085,7086,7088,7090,7092,7094],{"class":131,"line":1642},[129,7087,3465],{"class":139},[129,7089,6434],{"class":135},[129,7091,7048],{"class":139},[129,7093,1183],{"class":135},[129,7095,1206],{"class":139},[129,7097,7098,7101,7103],{"class":131,"line":1656},[129,7099,7100],{"class":139},"        p2",[129,7102,2306],{"class":135},[129,7104,1305],{"class":139},[129,7106,7107],{"class":131,"line":1661},[129,7108,2201],{"class":139},[129,7110,7111],{"class":131,"line":1667},[129,7112,1579],{"class":139},[71,7114,7116],{"id":7115},"_37指针和函数","3.7指针和函数",[14,7118,7119],{},"利用指针做函数参数，可以修改实参的值",[14,7121,7122],{},"值传递：只改变形参，不改变实参",[14,7124,7125],{},"地址传递：",[120,7127,7129],{"className":122,"code":7128,"language":124,"meta":42,"style":42},"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",[126,7130,7131,7156,7160,7172,7183,7193,7197,7205,7209,7221,7233,7238,7254,7269,7284],{"__ignoreMap":42},[129,7132,7133,7135,7137,7139,7141,7143,7146,7148,7150,7152,7154],{"class":131,"line":132},[129,7134,5379],{"class":135},[129,7136,5382],{"class":1977},[129,7138,140],{"class":139},[129,7140,143],{"class":135},[129,7142,6533],{"class":135},[129,7144,7145],{"class":5231},"p1",[129,7147,517],{"class":139},[129,7149,143],{"class":135},[129,7151,6533],{"class":135},[129,7153,7048],{"class":5231},[129,7155,146],{"class":139},[129,7157,7158],{"class":131,"line":51},[129,7159,1560],{"class":139},[129,7161,7162,7164,7166,7169],{"class":131,"line":1194},[129,7163,1999],{"class":135},[129,7165,4269],{"class":139},[129,7167,7168],{"class":135},"=*",[129,7170,7171],{"class":139},"p1;\n",[129,7173,7174,7176,7178,7180],{"class":131,"line":1209},[129,7175,6418],{"class":135},[129,7177,7145],{"class":139},[129,7179,7168],{"class":135},[129,7181,7182],{"class":139},"p2;\n",[129,7184,7185,7187,7189,7191],{"class":131,"line":1215},[129,7186,6418],{"class":135},[129,7188,7048],{"class":139},[129,7190,185],{"class":135},[129,7192,4294],{"class":139},[129,7194,7195],{"class":131,"line":1229},[129,7196,1579],{"class":139},[129,7198,7199,7201,7203],{"class":131,"line":1235},[129,7200,143],{"class":135},[129,7202,1987],{"class":1977},[129,7204,1990],{"class":139},[129,7206,7207],{"class":131,"line":1326},[129,7208,1560],{"class":139},[129,7210,7211,7213,7215,7217,7219],{"class":131,"line":1332},[129,7212,1999],{"class":135},[129,7214,1413],{"class":139},[129,7216,185],{"class":135},[129,7218,585],{"class":188},[129,7220,1305],{"class":139},[129,7222,7223,7225,7227,7229,7231],{"class":131,"line":1344},[129,7224,1999],{"class":135},[129,7226,2847],{"class":139},[129,7228,185],{"class":135},[129,7230,839],{"class":188},[129,7232,1305],{"class":139},[129,7234,7235],{"class":131,"line":1626},[129,7236,7237],{"class":198},"    \u002F\u002F地址传递\n",[129,7239,7240,7242,7244,7246,7249,7251],{"class":131,"line":1631},[129,7241,5576],{"class":1977},[129,7243,140],{"class":139},[129,7245,492],{"class":135},[129,7247,7248],{"class":139},"a,",[129,7250,492],{"class":135},[129,7252,7253],{"class":139},"b);\n",[129,7255,7256,7258,7260,7262,7264,7266],{"class":131,"line":1637},[129,7257,1565],{"class":139},[129,7259,1183],{"class":135},[129,7261,20],{"class":139},[129,7263,1183],{"class":135},[129,7265,1253],{"class":139},[129,7267,7268],{"class":198},"\u002F\u002F20\n",[129,7270,7271,7273,7275,7277,7279,7281],{"class":131,"line":1642},[129,7272,1565],{"class":139},[129,7274,1183],{"class":135},[129,7276,402],{"class":139},[129,7278,1183],{"class":135},[129,7280,1253],{"class":139},[129,7282,7283],{"class":198},"\u002F\u002F10\n",[129,7285,7286],{"class":131,"line":1656},[129,7287,1579],{"class":139},[14,7289,7290],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[71,7292,7294],{"id":7293},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7296,7297],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7299,7300,7301,7303],{},"例如数组：int arr",[129,7302,585],{},"={4,3,6,9,1,2,10,8,7,5}",[120,7305,7307],{"className":122,"code":7306,"language":124,"meta":42,"style":42},"#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",[126,7308,7309,7315,7325,7349,7353,7384,7388,7422,7426,7444,7448,7459,7474,7489,7493,7497,7501,7505,7509,7517,7521,7526,7580,7592,7604,7609,7617,7621,7626,7651,7655,7670,7679,7683],{"__ignoreMap":42},[129,7310,7311,7313],{"class":131,"line":132},[129,7312,1963],{"class":135},[129,7314,1966],{"class":244},[129,7316,7317,7319,7321,7323],{"class":131,"line":51},[129,7318,1971],{"class":135},[129,7320,1974],{"class":135},[129,7322,1978],{"class":1977},[129,7324,1305],{"class":139},[129,7326,7327,7329,7332,7334,7336,7338,7340,7342,7344,7347],{"class":131,"line":1194},[129,7328,5379],{"class":135},[129,7330,7331],{"class":1977}," bubbleSort",[129,7333,140],{"class":139},[129,7335,143],{"class":135},[129,7337,6533],{"class":135},[129,7339,14],{"class":5231},[129,7341,517],{"class":139},[129,7343,143],{"class":135},[129,7345,7346],{"class":5231}," len",[129,7348,146],{"class":139},[129,7350,7351],{"class":131,"line":1209},[129,7352,1560],{"class":139},[129,7354,7355,7357,7359,7361,7363,7365,7367,7369,7371,7374,7376,7378,7380,7382],{"class":131,"line":1215},[129,7356,3215],{"class":135},[129,7358,140],{"class":139},[129,7360,143],{"class":135},[129,7362,3046],{"class":139},[129,7364,185],{"class":135},[129,7366,331],{"class":188},[129,7368,3053],{"class":139},[129,7370,1049],{"class":135},[129,7372,7373],{"class":139},"len",[129,7375,671],{"class":135},[129,7377,357],{"class":188},[129,7379,3053],{"class":139},[129,7381,2306],{"class":135},[129,7383,146],{"class":139},[129,7385,7386],{"class":131,"line":1229},[129,7387,2044],{"class":139},[129,7389,7390,7392,7394,7396,7398,7400,7402,7404,7406,7408,7410,7412,7414,7416,7418,7420],{"class":131,"line":1235},[129,7391,3417],{"class":135},[129,7393,140],{"class":139},[129,7395,143],{"class":135},[129,7397,3424],{"class":139},[129,7399,185],{"class":135},[129,7401,331],{"class":188},[129,7403,3431],{"class":139},[129,7405,1049],{"class":135},[129,7407,7373],{"class":139},[129,7409,671],{"class":135},[129,7411,580],{"class":139},[129,7413,671],{"class":135},[129,7415,357],{"class":188},[129,7417,3431],{"class":139},[129,7419,2306],{"class":135},[129,7421,146],{"class":139},[129,7423,7424],{"class":131,"line":1326},[129,7425,2524],{"class":139},[129,7427,7428,7430,7433,7435,7438,7440,7442],{"class":131,"line":1332},[129,7429,4656],{"class":135},[129,7431,7432],{"class":139},"(p[j]",[129,7434,1099],{"class":135},[129,7436,7437],{"class":139},"p[j",[129,7439,620],{"class":135},[129,7441,357],{"class":188},[129,7443,4671],{"class":139},[129,7445,7446],{"class":131,"line":1344},[129,7447,4676],{"class":139},[129,7449,7450,7452,7454,7456],{"class":131,"line":1626},[129,7451,4681],{"class":135},[129,7453,4269],{"class":139},[129,7455,185],{"class":135},[129,7457,7458],{"class":139},"p[j];\n",[129,7460,7461,7464,7466,7468,7470,7472],{"class":131,"line":1631},[129,7462,7463],{"class":139},"                p[j]",[129,7465,185],{"class":135},[129,7467,7437],{"class":139},[129,7469,620],{"class":135},[129,7471,357],{"class":188},[129,7473,4704],{"class":139},[129,7475,7476,7479,7481,7483,7485,7487],{"class":131,"line":1637},[129,7477,7478],{"class":139},"                p[j",[129,7480,620],{"class":135},[129,7482,357],{"class":188},[129,7484,1079],{"class":139},[129,7486,185],{"class":135},[129,7488,4294],{"class":139},[129,7490,7491],{"class":131,"line":1642},[129,7492,4724],{"class":139},[129,7494,7495],{"class":131,"line":1656},[129,7496,2543],{"class":139},[129,7498,7499],{"class":131,"line":1661},[129,7500,2201],{"class":139},[129,7502,7503],{"class":131,"line":1667},[129,7504,1579],{"class":139},[129,7506,7507],{"class":131,"line":1688},[129,7508,2414],{"emptyLinePlaceholder":56},[129,7510,7511,7513,7515],{"class":131,"line":1693},[129,7512,143],{"class":135},[129,7514,1987],{"class":1977},[129,7516,1990],{"class":139},[129,7518,7519],{"class":131,"line":1707},[129,7520,1560],{"class":139},[129,7522,7523],{"class":131,"line":1712},[129,7524,7525],{"class":198},"    \u002F\u002F 1.创建数组\n",[129,7527,7528,7530,7532,7534,7536,7538,7540,7542,7544,7546,7548,7550,7552,7554,7556,7558,7560,7562,7564,7566,7568,7570,7572,7574,7576,7578],{"class":131,"line":1741},[129,7529,1999],{"class":135},[129,7531,3976],{"class":139},[129,7533,585],{"class":188},[129,7535,1079],{"class":139},[129,7537,185],{"class":135},[129,7539,1035],{"class":139},[129,7541,432],{"class":188},[129,7543,517],{"class":139},[129,7545,211],{"class":188},[129,7547,517],{"class":139},[129,7549,483],{"class":188},[129,7551,517],{"class":139},[129,7553,559],{"class":188},[129,7555,517],{"class":139},[129,7557,357],{"class":188},[129,7559,517],{"class":139},[129,7561,217],{"class":188},[129,7563,517],{"class":139},[129,7565,585],{"class":188},[129,7567,517],{"class":139},[129,7569,534],{"class":188},[129,7571,517],{"class":139},[129,7573,508],{"class":188},[129,7575,517],{"class":139},[129,7577,458],{"class":188},[129,7579,4009],{"class":139},[129,7581,7582,7584,7586,7588,7590],{"class":131,"line":1746},[129,7583,1999],{"class":135},[129,7585,7346],{"class":139},[129,7587,185],{"class":135},[129,7589,585],{"class":188},[129,7591,1305],{"class":139},[129,7593,7594,7596,7598,7600,7602],{"class":131,"line":1763},[129,7595,1999],{"class":135},[129,7597,6533],{"class":135},[129,7599,14],{"class":139},[129,7601,185],{"class":135},[129,7603,7053],{"class":139},[129,7605,7606],{"class":131,"line":1768},[129,7607,7608],{"class":198},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[129,7610,7611,7614],{"class":131,"line":1773},[129,7612,7613],{"class":1977},"    bubbleSort",[129,7615,7616],{"class":139},"(p,len);\n",[129,7618,7619],{"class":131,"line":1778},[129,7620,2414],{"emptyLinePlaceholder":56},[129,7622,7623],{"class":131,"line":1792},[129,7624,7625],{"class":198},"    \u002F\u002F 3.打印排序后的数组\n",[129,7627,7628,7630,7632,7634,7636,7638,7640,7642,7644,7647,7649],{"class":131,"line":1797},[129,7629,3215],{"class":135},[129,7631,1672],{"class":139},[129,7633,143],{"class":135},[129,7635,3046],{"class":139},[129,7637,185],{"class":135},[129,7639,331],{"class":188},[129,7641,3228],{"class":139},[129,7643,1049],{"class":135},[129,7645,7646],{"class":139},"len; i",[129,7648,2306],{"class":135},[129,7650,146],{"class":139},[129,7652,7653],{"class":131,"line":2591},[129,7654,2044],{"class":139},[129,7656,7657,7659,7661,7663,7665,7668],{"class":131,"line":2605},[129,7658,3465],{"class":139},[129,7660,6434],{"class":135},[129,7662,14],{"class":139},[129,7664,1183],{"class":135},[129,7666,7667],{"class":244},"\"\"",[129,7669,1305],{"class":139},[129,7671,7672,7675,7677],{"class":131,"line":2613},[129,7673,7674],{"class":139},"        p",[129,7676,2306],{"class":135},[129,7678,1305],{"class":139},[129,7680,7681],{"class":131,"line":2618},[129,7682,2201],{"class":139},[129,7684,7685],{"class":131,"line":2624},[129,7686,1579],{"class":139},[5141,7688,7689],{},"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":42,"searchDepth":51,"depth":51,"links":7691},[7692,7693,7694,7695,7696,7697,7698,7699],{"id":6298,"depth":51,"text":6299},{"id":6464,"depth":51,"text":6465},{"id":6620,"depth":51,"text":6621},{"id":6698,"depth":51,"text":6699},{"id":6777,"depth":51,"text":6778},{"id":6876,"depth":51,"text":6877},{"id":7115,"depth":51,"text":7116},{"id":7293,"depth":51,"text":7294},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6287,"description":6295},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7706,"title":7707,"body":7708,"description":7715,"extension":54,"meta":10689,"navigation":56,"path":10690,"seo":10691,"stem":10692,"__hash__":10693},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7709,"toc":10680},[7710,7713,7716,7720,7723,7726,7737,8075,8078,8082,8085,8092,8347,8351,8354,8357,8512,8516,8519,8522,8728,8732,8735,9038,9041,9049,9053,9056,9207,9209,9220,9277,9281,9286,9943,9951,9954,10048,10051,10671,10677],[10,7711,7707],{"id":7712},"_4结构体",[14,7714,7715],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[71,7717,7719],{"id":7718},"_41结构体定义与使用","4.1结构体定义与使用",[14,7721,7722],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7724,7725],{},"通过结构体创建变量的方式：",[1146,7727,7728,7731,7734],{},[86,7729,7730],{},"struct 结构体名 变量名",[86,7732,7733],{},"struct 结构体名 变量名={成员1值，成员2值...}",[86,7735,7736],{},"定义结构体时顺便创建变量",[120,7738,7740],{"className":122,"code":7739,"language":124,"meta":42,"style":42},"#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",[126,7741,7742,7748,7758,7765,7770,7778,7782,7787,7791,7796,7801,7806,7813,7818,7825,7829,7836,7840,7844,7848,7852,7856,7860,7866,7870,7876,7884,7892,7896,7901,7906,7917,7922,7934,7945,7956,7961,7985,7990,7996,8023,8028,8034,8046,8058,8070],{"__ignoreMap":42},[129,7743,7744,7746],{"class":131,"line":132},[129,7745,1963],{"class":135},[129,7747,1966],{"class":244},[129,7749,7750,7752,7754,7756],{"class":131,"line":51},[129,7751,1971],{"class":135},[129,7753,1974],{"class":135},[129,7755,1978],{"class":1977},[129,7757,1305],{"class":139},[129,7759,7760,7762],{"class":131,"line":1194},[129,7761,1963],{"class":135},[129,7763,7764],{"class":244},"\u003Cstring>\n",[129,7766,7767],{"class":131,"line":1209},[129,7768,7769],{"class":198},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[129,7771,7772,7775],{"class":131,"line":1215},[129,7773,7774],{"class":135},"struct",[129,7776,7777],{"class":1977}," Student\n",[129,7779,7780],{"class":131,"line":1229},[129,7781,1560],{"class":139},[129,7783,7784],{"class":131,"line":1235},[129,7785,7786],{"class":198},"    \u002F\u002F成员列表\n",[129,7788,7789],{"class":131,"line":1326},[129,7790,2414],{"emptyLinePlaceholder":56},[129,7792,7793],{"class":131,"line":1332},[129,7794,7795],{"class":198},"    \u002F\u002F姓名\n",[129,7797,7798],{"class":131,"line":1344},[129,7799,7800],{"class":139},"    string name;\n",[129,7802,7803],{"class":131,"line":1626},[129,7804,7805],{"class":198},"    \u002F\u002F年龄\n",[129,7807,7808,7810],{"class":131,"line":1631},[129,7809,1999],{"class":135},[129,7811,7812],{"class":139}," age;\n",[129,7814,7815],{"class":131,"line":1637},[129,7816,7817],{"class":198},"    \u002F\u002F分数\n",[129,7819,7820,7822],{"class":131,"line":1642},[129,7821,1999],{"class":135},[129,7823,7824],{"class":139}," score;\n",[129,7826,7827],{"class":131,"line":1656},[129,7828,4009],{"class":139},[129,7830,7831,7833],{"class":131,"line":1661},[129,7832,7774],{"class":135},[129,7834,7835],{"class":1977}," School\n",[129,7837,7838],{"class":131,"line":1667},[129,7839,1560],{"class":139},[129,7841,7842],{"class":131,"line":1688},[129,7843,7786],{"class":198},[129,7845,7846],{"class":131,"line":1693},[129,7847,2414],{"emptyLinePlaceholder":56},[129,7849,7850],{"class":131,"line":1707},[129,7851,7795],{"class":198},[129,7853,7854],{"class":131,"line":1712},[129,7855,7800],{"class":139},[129,7857,7858],{"class":131,"line":1741},[129,7859,7805],{"class":198},[129,7861,7862,7864],{"class":131,"line":1746},[129,7863,1999],{"class":135},[129,7865,7812],{"class":139},[129,7867,7868],{"class":131,"line":1763},[129,7869,7817],{"class":198},[129,7871,7872,7874],{"class":131,"line":1768},[129,7873,1999],{"class":135},[129,7875,7824],{"class":139},[129,7877,7878,7881],{"class":131,"line":1773},[129,7879,7880],{"class":139},"} s3;",[129,7882,7883],{"class":198}," \u002F\u002F创建结构体时就创建了变量\n",[129,7885,7886,7888,7890],{"class":131,"line":1778},[129,7887,143],{"class":135},[129,7889,1987],{"class":1977},[129,7891,1990],{"class":139},[129,7893,7894],{"class":131,"line":1792},[129,7895,1560],{"class":139},[129,7897,7898],{"class":131,"line":1797},[129,7899,7900],{"class":198},"    \u002F\u002F2.通过学生类型创建具体学生\n",[129,7902,7903],{"class":131,"line":2591},[129,7904,7905],{"class":198},"    \u002F\u002F2.1 struct Student s1;\n",[129,7907,7908,7911,7914],{"class":131,"line":2605},[129,7909,7910],{"class":135},"    struct",[129,7912,7913],{"class":1977}," Student",[129,7915,7916],{"class":139}," s1;\n",[129,7918,7919],{"class":131,"line":2613},[129,7920,7921],{"class":198},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[129,7923,7924,7927,7929,7932],{"class":131,"line":2618},[129,7925,7926],{"class":139},"    s1.name",[129,7928,185],{"class":135},[129,7930,7931],{"class":244},"\"张三\"",[129,7933,1305],{"class":139},[129,7935,7936,7939,7941,7943],{"class":131,"line":2624},[129,7937,7938],{"class":139},"    s1.age",[129,7940,185],{"class":135},[129,7942,789],{"class":188},[129,7944,1305],{"class":139},[129,7946,7947,7950,7952,7954],{"class":131,"line":2630},[129,7948,7949],{"class":139},"    s1.score",[129,7951,185],{"class":135},[129,7953,393],{"class":188},[129,7955,1305],{"class":139},[129,7957,7958],{"class":131,"line":2635},[129,7959,7960],{"class":198},"    \u002F\u002F输出结果\n",[129,7962,7964,7966,7968,7971,7973,7976,7978,7981,7983],{"class":131,"line":7963},37,[129,7965,1565],{"class":139},[129,7967,1183],{"class":135},[129,7969,7970],{"class":139},"s1.name",[129,7972,1183],{"class":135},[129,7974,7975],{"class":139},"s1.age",[129,7977,1183],{"class":135},[129,7979,7980],{"class":139},"s1.score",[129,7982,1183],{"class":135},[129,7984,1206],{"class":139},[129,7986,7988],{"class":131,"line":7987},38,[129,7989,2414],{"emptyLinePlaceholder":56},[129,7991,7993],{"class":131,"line":7992},39,[129,7994,7995],{"class":198},"    \u002F\u002F2.2 struct Student s2={...}\n",[129,7997,7999,8001,8003,8006,8008,8010,8013,8015,8017,8019,8021],{"class":131,"line":7998},40,[129,8000,7910],{"class":135},[129,8002,7913],{"class":1977},[129,8004,8005],{"class":139}," s2",[129,8007,185],{"class":135},[129,8009,1035],{"class":139},[129,8011,8012],{"class":244},"\"王五\"",[129,8014,517],{"class":139},[129,8016,789],{"class":188},[129,8018,517],{"class":139},[129,8020,393],{"class":188},[129,8022,4009],{"class":139},[129,8024,8026],{"class":131,"line":8025},41,[129,8027,2414],{"emptyLinePlaceholder":56},[129,8029,8031],{"class":131,"line":8030},42,[129,8032,8033],{"class":198},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[129,8035,8037,8040,8042,8044],{"class":131,"line":8036},43,[129,8038,8039],{"class":139},"    s3.name",[129,8041,185],{"class":135},[129,8043,3692],{"class":244},[129,8045,1305],{"class":139},[129,8047,8049,8052,8054,8056],{"class":131,"line":8048},44,[129,8050,8051],{"class":139},"    s3.age",[129,8053,185],{"class":135},[129,8055,789],{"class":188},[129,8057,1305],{"class":139},[129,8059,8061,8064,8066,8068],{"class":131,"line":8060},45,[129,8062,8063],{"class":139},"    s3.score",[129,8065,185],{"class":135},[129,8067,839],{"class":188},[129,8069,1305],{"class":139},[129,8071,8073],{"class":131,"line":8072},46,[129,8074,1579],{"class":139},[14,8076,8077],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[71,8079,8081],{"id":8080},"_42结构体数组","4.2结构体数组",[14,8083,8084],{},"将自定义的结构体放入到数组中方便维护",[14,8086,8087,8088,8091],{},"语法：struct 结构体名 数组名",[129,8089,8090],{},"元素个数","={ {}，{},...{} };",[120,8093,8095],{"className":122,"code":8094,"language":124,"meta":42,"style":42},"#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",[126,8096,8097,8103,8113,8119,8124,8130,8134,8138,8144,8150,8154,8158,8166,8170,8175,8190,8194,8210,8226,8230,8235,8251,8266,8281,8286,8312,8316,8339,8343],{"__ignoreMap":42},[129,8098,8099,8101],{"class":131,"line":132},[129,8100,1963],{"class":135},[129,8102,1966],{"class":244},[129,8104,8105,8107,8109,8111],{"class":131,"line":51},[129,8106,1971],{"class":135},[129,8108,1974],{"class":135},[129,8110,1978],{"class":1977},[129,8112,1305],{"class":139},[129,8114,8115,8117],{"class":131,"line":1194},[129,8116,1963],{"class":135},[129,8118,7764],{"class":244},[129,8120,8121],{"class":131,"line":1209},[129,8122,8123],{"class":198},"\u002F\u002F1.定义结构体\n",[129,8125,8126,8128],{"class":131,"line":1215},[129,8127,7774],{"class":135},[129,8129,7777],{"class":1977},[129,8131,8132],{"class":131,"line":1229},[129,8133,1560],{"class":139},[129,8135,8136],{"class":131,"line":1235},[129,8137,7800],{"class":139},[129,8139,8140,8142],{"class":131,"line":1326},[129,8141,1999],{"class":135},[129,8143,7812],{"class":139},[129,8145,8146,8148],{"class":131,"line":1332},[129,8147,1999],{"class":135},[129,8149,7824],{"class":139},[129,8151,8152],{"class":131,"line":1344},[129,8153,2414],{"emptyLinePlaceholder":56},[129,8155,8156],{"class":131,"line":1626},[129,8157,4009],{"class":139},[129,8159,8160,8162,8164],{"class":131,"line":1631},[129,8161,143],{"class":135},[129,8163,1987],{"class":1977},[129,8165,1990],{"class":139},[129,8167,8168],{"class":131,"line":1637},[129,8169,1560],{"class":139},[129,8171,8172],{"class":131,"line":1642},[129,8173,8174],{"class":198},"    \u002F\u002F2.创建结构体数组\n",[129,8176,8177,8179,8181,8184,8186,8188],{"class":131,"line":1656},[129,8178,7910],{"class":135},[129,8180,7913],{"class":1977},[129,8182,8183],{"class":139}," stuArray[",[129,8185,217],{"class":188},[129,8187,1079],{"class":139},[129,8189,4922],{"class":135},[129,8191,8192],{"class":131,"line":1661},[129,8193,2044],{"class":139},[129,8195,8196,8198,8200,8202,8204,8206,8208],{"class":131,"line":1667},[129,8197,4931],{"class":139},[129,8199,7931],{"class":244},[129,8201,517],{"class":139},[129,8203,789],{"class":188},[129,8205,517],{"class":139},[129,8207,450],{"class":188},[129,8209,4944],{"class":139},[129,8211,8212,8214,8216,8218,8220,8222,8224],{"class":131,"line":1688},[129,8213,4931],{"class":139},[129,8215,3692],{"class":244},[129,8217,517],{"class":139},[129,8219,714],{"class":188},[129,8221,517],{"class":139},[129,8223,714],{"class":188},[129,8225,1579],{"class":139},[129,8227,8228],{"class":131,"line":1693},[129,8229,2201],{"class":139},[129,8231,8232],{"class":131,"line":1707},[129,8233,8234],{"class":198},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[129,8236,8237,8240,8242,8245,8247,8249],{"class":131,"line":1712},[129,8238,8239],{"class":139},"    stuArray[",[129,8241,357],{"class":188},[129,8243,8244],{"class":139},"].name",[129,8246,185],{"class":135},[129,8248,3715],{"class":244},[129,8250,1305],{"class":139},[129,8252,8253,8255,8257,8260,8262,8264],{"class":131,"line":1741},[129,8254,8239],{"class":139},[129,8256,357],{"class":188},[129,8258,8259],{"class":139},"].age",[129,8261,185],{"class":135},[129,8263,217],{"class":188},[129,8265,1305],{"class":139},[129,8267,8268,8270,8272,8275,8277,8279],{"class":131,"line":1746},[129,8269,8239],{"class":139},[129,8271,357],{"class":188},[129,8273,8274],{"class":139},"].score",[129,8276,185],{"class":135},[129,8278,217],{"class":188},[129,8280,1305],{"class":139},[129,8282,8283],{"class":131,"line":1763},[129,8284,8285],{"class":198},"    \u002F\u002F4.遍历结构体数组\n",[129,8287,8288,8290,8292,8294,8296,8298,8300,8302,8304,8306,8308,8310],{"class":131,"line":1768},[129,8289,3215],{"class":135},[129,8291,1672],{"class":139},[129,8293,143],{"class":135},[129,8295,3046],{"class":139},[129,8297,185],{"class":135},[129,8299,331],{"class":188},[129,8301,3053],{"class":139},[129,8303,1049],{"class":135},[129,8305,217],{"class":188},[129,8307,3053],{"class":139},[129,8309,2306],{"class":135},[129,8311,146],{"class":139},[129,8313,8314],{"class":131,"line":1773},[129,8315,2044],{"class":139},[129,8317,8318,8320,8322,8325,8327,8330,8332,8335,8337],{"class":131,"line":1778},[129,8319,3465],{"class":139},[129,8321,1183],{"class":135},[129,8323,8324],{"class":139},"stuArray[i].name",[129,8326,1183],{"class":135},[129,8328,8329],{"class":139},"stuArray[i].age",[129,8331,1183],{"class":135},[129,8333,8334],{"class":139},"stuArray[i].score",[129,8336,1183],{"class":135},[129,8338,1206],{"class":139},[129,8340,8341],{"class":131,"line":1792},[129,8342,2201],{"class":139},[129,8344,8345],{"class":131,"line":1797},[129,8346,1579],{"class":139},[71,8348,8350],{"id":8349},"_43结构体指针","4.3结构体指针",[14,8352,8353],{},"作用：通过指针访问结构体中的成员",[14,8355,8356],{},"利用操作符->可以通过结构体指针访问结构体属性",[120,8358,8360],{"className":122,"code":8359,"language":124,"meta":42,"style":42},"#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",[126,8361,8362,8368,8378,8384,8388,8394,8398,8402,8408,8414,8418,8426,8430,8435,8460,8465,8480,8485,8508],{"__ignoreMap":42},[129,8363,8364,8366],{"class":131,"line":132},[129,8365,1963],{"class":135},[129,8367,1966],{"class":244},[129,8369,8370,8372,8374,8376],{"class":131,"line":51},[129,8371,1971],{"class":135},[129,8373,1974],{"class":135},[129,8375,1978],{"class":1977},[129,8377,1305],{"class":139},[129,8379,8380,8382],{"class":131,"line":1194},[129,8381,1963],{"class":135},[129,8383,7764],{"class":244},[129,8385,8386],{"class":131,"line":1209},[129,8387,8123],{"class":198},[129,8389,8390,8392],{"class":131,"line":1215},[129,8391,7774],{"class":135},[129,8393,7777],{"class":1977},[129,8395,8396],{"class":131,"line":1229},[129,8397,1560],{"class":139},[129,8399,8400],{"class":131,"line":1235},[129,8401,7800],{"class":139},[129,8403,8404,8406],{"class":131,"line":1326},[129,8405,1999],{"class":135},[129,8407,7812],{"class":139},[129,8409,8410,8412],{"class":131,"line":1332},[129,8411,1999],{"class":135},[129,8413,7824],{"class":139},[129,8415,8416],{"class":131,"line":1344},[129,8417,4009],{"class":139},[129,8419,8420,8422,8424],{"class":131,"line":1626},[129,8421,143],{"class":135},[129,8423,1987],{"class":1977},[129,8425,1990],{"class":139},[129,8427,8428],{"class":131,"line":1631},[129,8429,1560],{"class":139},[129,8431,8432],{"class":131,"line":1637},[129,8433,8434],{"class":198},"    \u002F\u002F创建学生结构体变量\n",[129,8436,8437,8439,8441,8444,8446,8448,8450,8452,8454,8456,8458],{"class":131,"line":1642},[129,8438,7910],{"class":135},[129,8440,7913],{"class":1977},[129,8442,8443],{"class":139}," s",[129,8445,185],{"class":135},[129,8447,1035],{"class":139},[129,8449,7931],{"class":244},[129,8451,517],{"class":139},[129,8453,789],{"class":188},[129,8455,517],{"class":139},[129,8457,1736],{"class":188},[129,8459,4009],{"class":139},[129,8461,8462],{"class":131,"line":1656},[129,8463,8464],{"class":198},"    \u002F\u002F通过指针指向结构体变量\n",[129,8466,8467,8469,8471,8473,8475,8477],{"class":131,"line":1661},[129,8468,7910],{"class":135},[129,8470,7913],{"class":1977},[129,8472,6533],{"class":135},[129,8474,14],{"class":139},[129,8476,6354],{"class":135},[129,8478,8479],{"class":139},"s\n",[129,8481,8482],{"class":131,"line":1667},[129,8483,8484],{"class":198},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[129,8486,8487,8489,8491,8494,8496,8499,8501,8504,8506],{"class":131,"line":1688},[129,8488,1565],{"class":139},[129,8490,1183],{"class":135},[129,8492,8493],{"class":139},"p->name",[129,8495,1183],{"class":135},[129,8497,8498],{"class":139},"p->age",[129,8500,1183],{"class":135},[129,8502,8503],{"class":139},"p->score",[129,8505,1183],{"class":135},[129,8507,1206],{"class":139},[129,8509,8510],{"class":131,"line":1693},[129,8511,1579],{"class":139},[71,8513,8515],{"id":8514},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8517,8518],{},"作用：结构体中的成员可以是另一个结构体",[14,8520,8521],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[120,8523,8525],{"className":122,"code":8524,"language":124,"meta":42,"style":42},"#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",[126,8526,8527,8533,8543,8549,8554,8562,8566,8570,8576,8582,8586,8591,8598,8602,8609,8613,8619,8624,8628,8636,8640,8645,8650,8655,8666,8678,8689,8702,8713,8724],{"__ignoreMap":42},[129,8528,8529,8531],{"class":131,"line":132},[129,8530,1963],{"class":135},[129,8532,1966],{"class":244},[129,8534,8535,8537,8539,8541],{"class":131,"line":51},[129,8536,1971],{"class":135},[129,8538,1974],{"class":135},[129,8540,1978],{"class":1977},[129,8542,1305],{"class":139},[129,8544,8545,8547],{"class":131,"line":1194},[129,8546,1963],{"class":135},[129,8548,7764],{"class":244},[129,8550,8551],{"class":131,"line":1209},[129,8552,8553],{"class":198},"\u002F\u002F定义学生结构体\n",[129,8555,8556,8558,8560],{"class":131,"line":1215},[129,8557,7774],{"class":135},[129,8559,7913],{"class":1977},[129,8561,2688],{"class":139},[129,8563,8564],{"class":131,"line":1229},[129,8565,1560],{"class":139},[129,8567,8568],{"class":131,"line":1235},[129,8569,7800],{"class":139},[129,8571,8572,8574],{"class":131,"line":1326},[129,8573,1999],{"class":135},[129,8575,7812],{"class":139},[129,8577,8578,8580],{"class":131,"line":1332},[129,8579,1999],{"class":135},[129,8581,7824],{"class":139},[129,8583,8584],{"class":131,"line":1344},[129,8585,1579],{"class":139},[129,8587,8588],{"class":131,"line":1626},[129,8589,8590],{"class":198},"\u002F\u002F定义老师结构体\n",[129,8592,8593,8595],{"class":131,"line":1631},[129,8594,7774],{"class":135},[129,8596,8597],{"class":1977}," Teacher\n",[129,8599,8600],{"class":131,"line":1637},[129,8601,1560],{"class":139},[129,8603,8604,8606],{"class":131,"line":1642},[129,8605,1999],{"class":135},[129,8607,8608],{"class":139}," id;\n",[129,8610,8611],{"class":131,"line":1656},[129,8612,7800],{"class":139},[129,8614,8615,8617],{"class":131,"line":1661},[129,8616,1999],{"class":135},[129,8618,7812],{"class":139},[129,8620,8621],{"class":131,"line":1667},[129,8622,8623],{"class":139},"    Student stu;\n",[129,8625,8626],{"class":131,"line":1688},[129,8627,1579],{"class":139},[129,8629,8630,8632,8634],{"class":131,"line":1693},[129,8631,143],{"class":135},[129,8633,1987],{"class":1977},[129,8635,5993],{"class":139},[129,8637,8638],{"class":131,"line":1707},[129,8639,1560],{"class":139},[129,8641,8642],{"class":131,"line":1712},[129,8643,8644],{"class":198},"    \u002F\u002F结构体嵌套结构体\n",[129,8646,8647],{"class":131,"line":1741},[129,8648,8649],{"class":198},"    \u002F\u002F创建老师\n",[129,8651,8652],{"class":131,"line":1746},[129,8653,8654],{"class":139},"    Teacher t;\n",[129,8656,8657,8660,8662,8664],{"class":131,"line":1763},[129,8658,8659],{"class":139},"    t.id",[129,8661,185],{"class":135},[129,8663,450],{"class":188},[129,8665,1305],{"class":139},[129,8667,8668,8671,8673,8676],{"class":131,"line":1768},[129,8669,8670],{"class":139},"    t.name",[129,8672,185],{"class":135},[129,8674,8675],{"class":244},"\"老王\"",[129,8677,1305],{"class":139},[129,8679,8680,8683,8685,8687],{"class":131,"line":1773},[129,8681,8682],{"class":139},"    t.age",[129,8684,185],{"class":135},[129,8686,789],{"class":188},[129,8688,1305],{"class":139},[129,8690,8691,8694,8696,8699],{"class":131,"line":1778},[129,8692,8693],{"class":139},"    t.stu.name",[129,8695,185],{"class":135},[129,8697,8698],{"class":244},"\"小王\"",[129,8700,8701],{"class":139},"；\n",[129,8703,8704,8707,8709,8711],{"class":131,"line":1792},[129,8705,8706],{"class":139},"    t.stu.age",[129,8708,185],{"class":135},[129,8710,839],{"class":188},[129,8712,1305],{"class":139},[129,8714,8715,8718,8720,8722],{"class":131,"line":1797},[129,8716,8717],{"class":139},"    t.stu.score",[129,8719,185],{"class":135},[129,8721,483],{"class":188},[129,8723,1305],{"class":139},[129,8725,8726],{"class":131,"line":2591},[129,8727,1579],{"class":139},[71,8729,8731],{"id":8730},"_45结构体做函数参数","4.5结构体做函数参数",[14,8733,8734],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[120,8736,8738],{"className":122,"code":8737,"language":124,"meta":42,"style":42},"#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",[126,8739,8740,8746,8756,8762,8768,8772,8776,8782,8788,8792,8797,8802,8819,8823,8856,8860,8865,8884,8888,8919,8923,8931,8935,8944,8956,8968,8980,8993,9001,9014,9026,9034],{"__ignoreMap":42},[129,8741,8742,8744],{"class":131,"line":132},[129,8743,1963],{"class":135},[129,8745,1966],{"class":244},[129,8747,8748,8750,8752,8754],{"class":131,"line":51},[129,8749,1971],{"class":135},[129,8751,1974],{"class":135},[129,8753,1978],{"class":1977},[129,8755,1305],{"class":139},[129,8757,8758,8760],{"class":131,"line":1194},[129,8759,1963],{"class":135},[129,8761,7764],{"class":244},[129,8763,8764,8766],{"class":131,"line":1209},[129,8765,7774],{"class":135},[129,8767,7777],{"class":1977},[129,8769,8770],{"class":131,"line":1215},[129,8771,1560],{"class":139},[129,8773,8774],{"class":131,"line":1229},[129,8775,7800],{"class":139},[129,8777,8778,8780],{"class":131,"line":1235},[129,8779,1999],{"class":135},[129,8781,7812],{"class":139},[129,8783,8784,8786],{"class":131,"line":1326},[129,8785,1999],{"class":135},[129,8787,7824],{"class":139},[129,8789,8790],{"class":131,"line":1332},[129,8791,4009],{"class":139},[129,8793,8794],{"class":131,"line":1344},[129,8795,8796],{"class":198},"\u002F\u002F打印学生信息的函数\n",[129,8798,8799],{"class":131,"line":1626},[129,8800,8801],{"class":198},"\u002F\u002F值传递\n",[129,8803,8804,8806,8809,8811,8813,8815,8817],{"class":131,"line":1631},[129,8805,5379],{"class":135},[129,8807,8808],{"class":1977}," printStudent1",[129,8810,140],{"class":139},[129,8812,7774],{"class":135},[129,8814,7913],{"class":1977},[129,8816,8443],{"class":5231},[129,8818,146],{"class":139},[129,8820,8821],{"class":131,"line":1637},[129,8822,1560],{"class":139},[129,8824,8825,8827,8829,8832,8834,8837,8839,8842,8844,8846,8848,8851,8853],{"class":131,"line":1642},[129,8826,6544],{"class":139},[129,8828,1183],{"class":135},[129,8830,8831],{"class":139}," s.name ",[129,8833,1183],{"class":135},[129,8835,8836],{"class":244}," \" \"",[129,8838,1459],{"class":135},[129,8840,8841],{"class":139}," s.age ",[129,8843,1183],{"class":135},[129,8845,8836],{"class":244},[129,8847,1459],{"class":135},[129,8849,8850],{"class":139}," s.score ",[129,8852,1183],{"class":135},[129,8854,8855],{"class":139}," endl;\n",[129,8857,8858],{"class":131,"line":1656},[129,8859,1579],{"class":139},[129,8861,8862],{"class":131,"line":1661},[129,8863,8864],{"class":198},"\u002F\u002F地址传递\n",[129,8866,8867,8869,8872,8874,8876,8878,8880,8882],{"class":131,"line":1667},[129,8868,5379],{"class":135},[129,8870,8871],{"class":1977}," printStudent2",[129,8873,140],{"class":139},[129,8875,7774],{"class":135},[129,8877,7913],{"class":1977},[129,8879,6533],{"class":135},[129,8881,834],{"class":5231},[129,8883,146],{"class":139},[129,8885,8886],{"class":131,"line":1688},[129,8887,1560],{"class":139},[129,8889,8890,8892,8894,8897,8899,8901,8903,8906,8908,8910,8912,8915,8917],{"class":131,"line":1693},[129,8891,6544],{"class":139},[129,8893,1183],{"class":135},[129,8895,8896],{"class":139}," s->name ",[129,8898,1183],{"class":135},[129,8900,8836],{"class":244},[129,8902,1459],{"class":135},[129,8904,8905],{"class":139}," s->age ",[129,8907,1183],{"class":135},[129,8909,8836],{"class":244},[129,8911,1459],{"class":135},[129,8913,8914],{"class":139}," s->score ",[129,8916,1183],{"class":135},[129,8918,8855],{"class":139},[129,8920,8921],{"class":131,"line":1707},[129,8922,1579],{"class":139},[129,8924,8925,8927,8929],{"class":131,"line":1712},[129,8926,143],{"class":135},[129,8928,1987],{"class":1977},[129,8930,1990],{"class":139},[129,8932,8933],{"class":131,"line":1741},[129,8934,1560],{"class":139},[129,8936,8937,8939,8941],{"class":131,"line":1746},[129,8938,7910],{"class":135},[129,8940,7913],{"class":1977},[129,8942,8943],{"class":139}," s;\n",[129,8945,8946,8949,8951,8954],{"class":131,"line":1763},[129,8947,8948],{"class":139},"    s.name ",[129,8950,185],{"class":135},[129,8952,8953],{"class":244}," \"张三\"",[129,8955,1305],{"class":139},[129,8957,8958,8961,8963,8966],{"class":131,"line":1768},[129,8959,8960],{"class":139},"    s.age ",[129,8962,185],{"class":135},[129,8964,8965],{"class":188}," 20",[129,8967,1305],{"class":139},[129,8969,8970,8973,8975,8978],{"class":131,"line":1773},[129,8971,8972],{"class":139},"    s.score ",[129,8974,185],{"class":135},[129,8976,8977],{"class":188}," 85",[129,8979,1305],{"class":139},[129,8981,8982,8984,8986,8989,8991],{"class":131,"line":1778},[129,8983,1565],{"class":139},[129,8985,1183],{"class":135},[129,8987,8988],{"class":244},"\"值传递:\"",[129,8990,1183],{"class":135},[129,8992,1206],{"class":139},[129,8994,8995,8998],{"class":131,"line":1792},[129,8996,8997],{"class":1977},"    printStudent1",[129,8999,9000],{"class":139},"(s);\n",[129,9002,9003,9005,9007,9010,9012],{"class":131,"line":1797},[129,9004,1565],{"class":139},[129,9006,1183],{"class":135},[129,9008,9009],{"class":244},"\"地址传递:\"",[129,9011,1183],{"class":135},[129,9013,1206],{"class":139},[129,9015,9016,9019,9021,9023],{"class":131,"line":2591},[129,9017,9018],{"class":1977},"    printStudent2",[129,9020,140],{"class":139},[129,9022,492],{"class":135},[129,9024,9025],{"class":139},"s); \n",[129,9027,9028,9030,9032],{"class":131,"line":2605},[129,9029,4104],{"class":135},[129,9031,4107],{"class":188},[129,9033,1305],{"class":139},[129,9035,9036],{"class":131,"line":2613},[129,9037,1579],{"class":139},[14,9039,9040],{},"注意：",[1146,9042,9043,9046],{},[86,9044,9045],{},"1.先定义结构体，不要在函数中写结构体的定义",[86,9047,9048],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[71,9050,9052],{"id":9051},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9054,9055],{},"用const防止误操作",[120,9057,9059],{"className":122,"code":9058,"language":124,"meta":42,"style":42},"#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",[126,9060,9061,9067,9077,9083,9088,9092,9096,9102,9108,9112,9128,9132,9155,9159,9167,9171,9192,9199,9203],{"__ignoreMap":42},[129,9062,9063,9065],{"class":131,"line":132},[129,9064,1963],{"class":135},[129,9066,1966],{"class":244},[129,9068,9069,9071,9073,9075],{"class":131,"line":51},[129,9070,1971],{"class":135},[129,9072,1974],{"class":135},[129,9074,1978],{"class":1977},[129,9076,1305],{"class":139},[129,9078,9079,9081],{"class":131,"line":1194},[129,9080,1963],{"class":135},[129,9082,7764],{"class":244},[129,9084,9085],{"class":131,"line":1209},[129,9086,9087],{"class":139},"sctuct Student\n",[129,9089,9090],{"class":131,"line":1215},[129,9091,1560],{"class":139},[129,9093,9094],{"class":131,"line":1229},[129,9095,7800],{"class":139},[129,9097,9098,9100],{"class":131,"line":1235},[129,9099,1999],{"class":135},[129,9101,7812],{"class":139},[129,9103,9104,9106],{"class":131,"line":1326},[129,9105,1999],{"class":135},[129,9107,7824],{"class":139},[129,9109,9110],{"class":131,"line":1332},[129,9111,4009],{"class":139},[129,9113,9114,9116,9119,9121,9124,9126],{"class":131,"line":1344},[129,9115,5379],{"class":135},[129,9117,9118],{"class":1977}," printStudents",[129,9120,140],{"class":139},[129,9122,9123],{"class":1977},"student",[129,9125,8443],{"class":5231},[129,9127,146],{"class":139},[129,9129,9130],{"class":131,"line":1626},[129,9131,1560],{"class":139},[129,9133,9134,9136,9138,9141,9143,9146,9148,9151,9153],{"class":131,"line":1631},[129,9135,1565],{"class":139},[129,9137,1183],{"class":135},[129,9139,9140],{"class":139},"s.name",[129,9142,1183],{"class":135},[129,9144,9145],{"class":139},"s.age",[129,9147,1183],{"class":135},[129,9149,9150],{"class":139},"s.score",[129,9152,1183],{"class":135},[129,9154,1206],{"class":139},[129,9156,9157],{"class":131,"line":1637},[129,9158,1579],{"class":139},[129,9160,9161,9163,9165],{"class":131,"line":1642},[129,9162,143],{"class":135},[129,9164,1987],{"class":1977},[129,9166,5993],{"class":139},[129,9168,9169],{"class":131,"line":1656},[129,9170,1560],{"class":139},[129,9172,9173,9176,9178,9180,9182,9184,9186,9188,9190],{"class":131,"line":1661},[129,9174,9175],{"class":139},"    Student s",[129,9177,185],{"class":135},[129,9179,1035],{"class":139},[129,9181,7931],{"class":244},[129,9183,517],{"class":139},[129,9185,789],{"class":188},[129,9187,517],{"class":139},[129,9189,789],{"class":188},[129,9191,4009],{"class":139},[129,9193,9194,9197],{"class":131,"line":1667},[129,9195,9196],{"class":1977},"    printStudent",[129,9198,9000],{"class":139},[129,9200,9201],{"class":131,"line":1688},[129,9202,2414],{"emptyLinePlaceholder":56},[129,9204,9205],{"class":131,"line":1693},[129,9206,1579],{"class":139},[14,9208,9040],{},[1146,9210,9211,9214,9217],{},[86,9212,9213],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[86,9215,9216],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[86,9218,9219],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[120,9221,9223],{"className":122,"code":9222,"language":124,"meta":42,"style":42},"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",[126,9224,9225,9244,9248,9253,9273],{"__ignoreMap":42},[129,9226,9227,9229,9231,9233,9235,9238,9240,9242],{"class":131,"line":132},[129,9228,5379],{"class":135},[129,9230,9118],{"class":1977},[129,9232,140],{"class":139},[129,9234,6807],{"class":135},[129,9236,9237],{"class":1977}," student",[129,9239,6533],{"class":135},[129,9241,834],{"class":5231},[129,9243,146],{"class":139},[129,9245,9246],{"class":131,"line":51},[129,9247,1560],{"class":139},[129,9249,9250],{"class":131,"line":1194},[129,9251,9252],{"class":198},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[129,9254,9255,9257,9259,9261,9263,9265,9267,9269,9271],{"class":131,"line":1209},[129,9256,1565],{"class":139},[129,9258,1183],{"class":135},[129,9260,9140],{"class":139},[129,9262,1183],{"class":135},[129,9264,9145],{"class":139},[129,9266,1183],{"class":135},[129,9268,9150],{"class":139},[129,9270,1183],{"class":135},[129,9272,1206],{"class":139},[129,9274,9275],{"class":131,"line":1215},[129,9276,1579],{"class":139},[71,9278,9280],{"id":9279},"_47案例","4.7案例",[83,9282,9283],{},[86,9284,9285],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[120,9287,9289],{"className":122,"code":9288,"language":124,"meta":42,"style":42},"#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",[126,9290,9291,9297,9307,9313,9320,9324,9330,9334,9339,9345,9351,9355,9359,9365,9369,9374,9379,9392,9396,9401,9427,9431,9443,9470,9474,9486,9496,9500,9505,9534,9538,9550,9559,9586,9597,9607,9611,9615,9619,9624,9648,9652,9676,9680,9699,9725,9729,9754,9777,9801,9806,9811,9816,9825,9830,9836,9857,9863,9877,9883,9910,9919,9925,9933,9938],{"__ignoreMap":42},[129,9292,9293,9295],{"class":131,"line":132},[129,9294,1963],{"class":135},[129,9296,1966],{"class":244},[129,9298,9299,9301,9303,9305],{"class":131,"line":51},[129,9300,1971],{"class":135},[129,9302,1974],{"class":135},[129,9304,1978],{"class":1977},[129,9306,1305],{"class":139},[129,9308,9309,9311],{"class":131,"line":1194},[129,9310,1963],{"class":135},[129,9312,7764],{"class":244},[129,9314,9315,9317],{"class":131,"line":1209},[129,9316,1963],{"class":135},[129,9318,9319],{"class":244},"\u003Cctime>\n",[129,9321,9322],{"class":131,"line":1215},[129,9323,8553],{"class":198},[129,9325,9326,9328],{"class":131,"line":1229},[129,9327,7774],{"class":135},[129,9329,7777],{"class":1977},[129,9331,9332],{"class":131,"line":1235},[129,9333,1560],{"class":139},[129,9335,9336],{"class":131,"line":1326},[129,9337,9338],{"class":139},"    string sName;\n",[129,9340,9341,9343],{"class":131,"line":1332},[129,9342,1999],{"class":135},[129,9344,7812],{"class":139},[129,9346,9347,9349],{"class":131,"line":1344},[129,9348,1999],{"class":135},[129,9350,7824],{"class":139},[129,9352,9353],{"class":131,"line":1626},[129,9354,4009],{"class":139},[129,9356,9357],{"class":131,"line":1631},[129,9358,8590],{"class":198},[129,9360,9361,9363],{"class":131,"line":1637},[129,9362,7774],{"class":135},[129,9364,8597],{"class":1977},[129,9366,9367],{"class":131,"line":1642},[129,9368,1560],{"class":139},[129,9370,9371],{"class":131,"line":1656},[129,9372,9373],{"class":139},"    string tName;\n",[129,9375,9376],{"class":131,"line":1661},[129,9377,9378],{"class":198},"    \u002F\u002F学生数组\n",[129,9380,9381,9383,9385,9388,9390],{"class":131,"line":1667},[129,9382,7910],{"class":135},[129,9384,7913],{"class":1977},[129,9386,9387],{"class":139}," sArray[",[129,9389,458],{"class":188},[129,9391,4704],{"class":139},[129,9393,9394],{"class":131,"line":1688},[129,9395,4009],{"class":139},[129,9397,9398],{"class":131,"line":1693},[129,9399,9400],{"class":198},"\u002F\u002F给老师和学生赋值的函数\n",[129,9402,9403,9405,9408,9410,9412,9415,9418,9421,9423,9425],{"class":131,"line":1707},[129,9404,5379],{"class":135},[129,9406,9407],{"class":1977}," allocateSpace",[129,9409,140],{"class":139},[129,9411,7774],{"class":135},[129,9413,9414],{"class":1977}," Teacher",[129,9416,9417],{"class":5231}," tArray",[129,9419,9420],{"class":139},"[],",[129,9422,143],{"class":135},[129,9424,7346],{"class":5231},[129,9426,146],{"class":139},[129,9428,9429],{"class":131,"line":1712},[129,9430,1560],{"class":139},[129,9432,9433,9436,9438,9441],{"class":131,"line":1741},[129,9434,9435],{"class":139},"    string nameSeed",[129,9437,185],{"class":135},[129,9439,9440],{"class":244},"\"ABCDE\"",[129,9442,1305],{"class":139},[129,9444,9445,9447,9449,9451,9454,9456,9458,9461,9463,9466,9468],{"class":131,"line":1746},[129,9446,3215],{"class":135},[129,9448,1672],{"class":139},[129,9450,143],{"class":135},[129,9452,9453],{"class":139}," i ",[129,9455,185],{"class":135},[129,9457,4107],{"class":188},[129,9459,9460],{"class":139},"; i ",[129,9462,1049],{"class":135},[129,9464,9465],{"class":139}," len; i",[129,9467,2306],{"class":135},[129,9469,146],{"class":139},[129,9471,9472],{"class":131,"line":1763},[129,9473,2044],{"class":139},[129,9475,9476,9479,9481,9484],{"class":131,"line":1768},[129,9477,9478],{"class":139},"        tArray[i].tName ",[129,9480,185],{"class":135},[129,9482,9483],{"class":244}," \"Teacher_\"",[129,9485,1305],{"class":139},[129,9487,9488,9490,9493],{"class":131,"line":1773},[129,9489,9478],{"class":139},[129,9491,9492],{"class":135},"+=",[129,9494,9495],{"class":139},"nameSeed[i];\n",[129,9497,9498],{"class":131,"line":1778},[129,9499,2414],{"emptyLinePlaceholder":56},[129,9501,9502],{"class":131,"line":1792},[129,9503,9504],{"class":198},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[129,9506,9507,9509,9511,9513,9516,9518,9520,9523,9525,9527,9530,9532],{"class":131,"line":1797},[129,9508,3417],{"class":135},[129,9510,1672],{"class":139},[129,9512,143],{"class":135},[129,9514,9515],{"class":139}," j ",[129,9517,185],{"class":135},[129,9519,4107],{"class":188},[129,9521,9522],{"class":139},"; j ",[129,9524,1049],{"class":135},[129,9526,2162],{"class":188},[129,9528,9529],{"class":139},"; j",[129,9531,2306],{"class":135},[129,9533,146],{"class":139},[129,9535,9536],{"class":131,"line":2591},[129,9537,2524],{"class":139},[129,9539,9540,9543,9545,9548],{"class":131,"line":2605},[129,9541,9542],{"class":139},"            tArray[i].sArray[j].sName ",[129,9544,185],{"class":135},[129,9546,9547],{"class":244}," \"Student_\"",[129,9549,1305],{"class":139},[129,9551,9552,9554,9556],{"class":131,"line":2613},[129,9553,9542],{"class":139},[129,9555,9492],{"class":135},[129,9557,9558],{"class":139}," nameSeed[j];\n",[129,9560,9561,9564,9567,9569,9571,9573,9575,9577,9579,9581,9583],{"class":131,"line":2618},[129,9562,9563],{"class":135},"            int",[129,9565,9566],{"class":139}," random",[129,9568,185],{"class":135},[129,9570,2438],{"class":1977},[129,9572,2441],{"class":139},[129,9574,467],{"class":135},[129,9576,1046],{"class":188},[129,9578,620],{"class":135},[129,9580,540],{"class":188},[129,9582,195],{"class":139},[129,9584,9585],{"class":198},"\u002F\u002F40~99\n",[129,9587,9588,9591,9593,9595],{"class":131,"line":2624},[129,9589,9590],{"class":139},"            tArray[i].sArray[j].age ",[129,9592,185],{"class":135},[129,9594,8965],{"class":188},[129,9596,1305],{"class":139},[129,9598,9599,9602,9604],{"class":131,"line":2630},[129,9600,9601],{"class":139},"            tArray[i].sArray[j].score ",[129,9603,185],{"class":135},[129,9605,9606],{"class":139}," random;\n",[129,9608,9609],{"class":131,"line":2635},[129,9610,2543],{"class":139},[129,9612,9613],{"class":131,"line":7963},[129,9614,2201],{"class":139},[129,9616,9617],{"class":131,"line":7987},[129,9618,1579],{"class":139},[129,9620,9621],{"class":131,"line":7992},[129,9622,9623],{"class":198},"\u002F\u002F打印所有信息的函数\n",[129,9625,9626,9628,9631,9633,9635,9637,9639,9642,9644,9646],{"class":131,"line":7998},[129,9627,5379],{"class":135},[129,9629,9630],{"class":1977}," printInfo",[129,9632,140],{"class":139},[129,9634,7774],{"class":135},[129,9636,9414],{"class":1977},[129,9638,9417],{"class":5231},[129,9640,9641],{"class":139},"[], ",[129,9643,143],{"class":135},[129,9645,7346],{"class":5231},[129,9647,146],{"class":139},[129,9649,9650],{"class":131,"line":8025},[129,9651,1560],{"class":139},[129,9653,9654,9656,9658,9660,9662,9664,9666,9668,9670,9672,9674],{"class":131,"line":8030},[129,9655,3215],{"class":135},[129,9657,1672],{"class":139},[129,9659,143],{"class":135},[129,9661,9453],{"class":139},[129,9663,185],{"class":135},[129,9665,4107],{"class":188},[129,9667,9460],{"class":139},[129,9669,1049],{"class":135},[129,9671,9465],{"class":139},[129,9673,2306],{"class":135},[129,9675,146],{"class":139},[129,9677,9678],{"class":131,"line":8036},[129,9679,2044],{"class":139},[129,9681,9682,9685,9687,9690,9692,9695,9697],{"class":131,"line":8048},[129,9683,9684],{"class":139},"        cout ",[129,9686,1183],{"class":135},[129,9688,9689],{"class":244}," \"Teacher: \"",[129,9691,1459],{"class":135},[129,9693,9694],{"class":139}," tArray[i].tName ",[129,9696,1183],{"class":135},[129,9698,8855],{"class":139},[129,9700,9701,9703,9705,9707,9709,9711,9713,9715,9717,9719,9721,9723],{"class":131,"line":8060},[129,9702,3417],{"class":135},[129,9704,1672],{"class":139},[129,9706,143],{"class":135},[129,9708,9515],{"class":139},[129,9710,185],{"class":135},[129,9712,4107],{"class":188},[129,9714,9522],{"class":139},[129,9716,1049],{"class":135},[129,9718,2162],{"class":188},[129,9720,9529],{"class":139},[129,9722,2306],{"class":135},[129,9724,146],{"class":139},[129,9726,9727],{"class":131,"line":8072},[129,9728,2524],{"class":139},[129,9730,9732,9735,9737,9740,9742,9745,9747,9750,9752],{"class":131,"line":9731},47,[129,9733,9734],{"class":139},"            cout ",[129,9736,1183],{"class":135},[129,9738,9739],{"class":244}," \"",[129,9741,1245],{"class":188},[129,9743,9744],{"class":244},"Student: \"",[129,9746,1459],{"class":135},[129,9748,9749],{"class":139}," tArray[i].sArray[j].sName",[129,9751,1183],{"class":135},[129,9753,1206],{"class":139},[129,9755,9757,9759,9761,9763,9765,9768,9770,9773,9775],{"class":131,"line":9756},48,[129,9758,9734],{"class":139},[129,9760,1183],{"class":135},[129,9762,9739],{"class":244},[129,9764,1245],{"class":188},[129,9766,9767],{"class":244},"Age: \"",[129,9769,1459],{"class":135},[129,9771,9772],{"class":139}," tArray[i].sArray[j].age ",[129,9774,1183],{"class":135},[129,9776,8855],{"class":139},[129,9778,9780,9782,9784,9786,9788,9791,9793,9796,9798],{"class":131,"line":9779},49,[129,9781,9734],{"class":139},[129,9783,1183],{"class":135},[129,9785,9739],{"class":244},[129,9787,1245],{"class":188},[129,9789,9790],{"class":244},"Score: \"",[129,9792,1459],{"class":135},[129,9794,9795],{"class":139}," tArray[i].sArray[j].score ",[129,9797,1183],{"class":135},[129,9799,9800],{"class":139}," endl;   \n",[129,9802,9804],{"class":131,"line":9803},50,[129,9805,2543],{"class":139},[129,9807,9809],{"class":131,"line":9808},51,[129,9810,2201],{"class":139},[129,9812,9814],{"class":131,"line":9813},52,[129,9815,1579],{"class":139},[129,9817,9819,9821,9823],{"class":131,"line":9818},53,[129,9820,143],{"class":135},[129,9822,1987],{"class":1977},[129,9824,1990],{"class":139},[129,9826,9828],{"class":131,"line":9827},54,[129,9829,1560],{"class":139},[129,9831,9833],{"class":131,"line":9832},55,[129,9834,9835],{"class":198},"    \u002F\u002F随机数种子\n",[129,9837,9839,9841,9843,9845,9847,9849,9851,9853,9855],{"class":131,"line":9838},56,[129,9840,2387],{"class":1977},[129,9842,2390],{"class":139},[129,9844,2393],{"class":135},[129,9846,2396],{"class":135},[129,9848,568],{"class":139},[129,9850,2401],{"class":1977},[129,9852,140],{"class":139},[129,9854,2406],{"class":188},[129,9856,2409],{"class":139},[129,9858,9860],{"class":131,"line":9859},57,[129,9861,9862],{"class":198},"    \u002F\u002F1.创建3名老师的数组\n",[129,9864,9866,9868,9870,9873,9875],{"class":131,"line":9865},58,[129,9867,7910],{"class":135},[129,9869,9414],{"class":1977},[129,9871,9872],{"class":139}," tArray[",[129,9874,211],{"class":188},[129,9876,4704],{"class":139},[129,9878,9880],{"class":131,"line":9879},59,[129,9881,9882],{"class":198},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[129,9884,9886,9888,9891,9893,9896,9899,9901,9903,9906,9908],{"class":131,"line":9885},60,[129,9887,1999],{"class":135},[129,9889,9890],{"class":139}," len ",[129,9892,185],{"class":135},[129,9894,9895],{"class":135}," sizeof",[129,9897,9898],{"class":139},"(tArray) ",[129,9900,723],{"class":135},[129,9902,9895],{"class":135},[129,9904,9905],{"class":139},"(tArray[",[129,9907,331],{"class":188},[129,9909,3870],{"class":139},[129,9911,9913,9916],{"class":131,"line":9912},61,[129,9914,9915],{"class":1977},"    allocateSpace",[129,9917,9918],{"class":139},"(tArray, len);\n",[129,9920,9922],{"class":131,"line":9921},62,[129,9923,9924],{"class":198},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[129,9926,9928,9931],{"class":131,"line":9927},63,[129,9929,9930],{"class":1977},"    printInfo",[129,9932,9918],{"class":139},[129,9934,9936],{"class":131,"line":9935},64,[129,9937,2414],{"emptyLinePlaceholder":56},[129,9939,9941],{"class":131,"line":9940},65,[129,9942,1579],{"class":139},[83,9944,9945],{"start":51},[86,9946,9947,9950],{},[289,9948,9949],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,9952,9953],{},"五名英雄信息如下：",[120,9955,9959],{"className":9956,"code":9957,"language":9958,"meta":42,"style":42},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[126,9960,9961,9979,9996,10013,10030],{"__ignoreMap":42},[129,9962,9963,9965,9968,9970,9972,9974,9977],{"class":131,"line":132},[129,9964,4931],{"class":139},[129,9966,9967],{"class":244},"\"刘备\"",[129,9969,517],{"class":139},[129,9971,914],{"class":188},[129,9973,517],{"class":139},[129,9975,9976],{"class":244},"\"男\"",[129,9978,4944],{"class":139},[129,9980,9981,9983,9986,9988,9990,9992,9994],{"class":131,"line":51},[129,9982,4931],{"class":139},[129,9984,9985],{"class":244},"\"关羽\"",[129,9987,517],{"class":139},[129,9989,889],{"class":188},[129,9991,517],{"class":139},[129,9993,9976],{"class":244},[129,9995,4944],{"class":139},[129,9997,9998,10000,10003,10005,10007,10009,10011],{"class":131,"line":1194},[129,9999,4931],{"class":139},[129,10001,10002],{"class":244},"\"张飞\"",[129,10004,517],{"class":139},[129,10006,839],{"class":188},[129,10008,517],{"class":139},[129,10010,9976],{"class":244},[129,10012,4944],{"class":139},[129,10014,10015,10017,10020,10022,10024,10026,10028],{"class":131,"line":1209},[129,10016,4931],{"class":139},[129,10018,10019],{"class":244},"\"赵云\"",[129,10021,517],{"class":139},[129,10023,864],{"class":188},[129,10025,517],{"class":139},[129,10027,9976],{"class":244},[129,10029,4944],{"class":139},[129,10031,10032,10034,10037,10039,10041,10043,10046],{"class":131,"line":1215},[129,10033,4931],{"class":139},[129,10035,10036],{"class":244},"\"貂蝉\"",[129,10038,517],{"class":139},[129,10040,814],{"class":188},[129,10042,517],{"class":139},[129,10044,10045],{"class":244},"\"女\"",[129,10047,4944],{"class":139},[14,10049,10050],{},"代码：",[120,10052,10054],{"className":122,"code":10053,"language":124,"meta":42,"style":42},"#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",[126,10055,10056,10062,10072,10078,10085,10089,10093,10099,10104,10108,10113,10136,10140,10165,10169,10202,10207,10236,10241,10256,10282,10302,10307,10312,10316,10320,10325,10347,10351,10375,10379,10441,10445,10449,10457,10461,10466,10477,10481,10497,10513,10529,10545,10561,10565,10585,10607,10612,10625,10632,10637,10643,10648,10661,10667],{"__ignoreMap":42},[129,10057,10058,10060],{"class":131,"line":132},[129,10059,1963],{"class":135},[129,10061,1966],{"class":244},[129,10063,10064,10066,10068,10070],{"class":131,"line":51},[129,10065,1971],{"class":135},[129,10067,1974],{"class":135},[129,10069,1978],{"class":1977},[129,10071,1305],{"class":139},[129,10073,10074,10076],{"class":131,"line":1194},[129,10075,1963],{"class":135},[129,10077,7764],{"class":244},[129,10079,10080,10082],{"class":131,"line":1209},[129,10081,7774],{"class":135},[129,10083,10084],{"class":1977}," Sanguo\n",[129,10086,10087],{"class":131,"line":1215},[129,10088,1560],{"class":139},[129,10090,10091],{"class":131,"line":1229},[129,10092,7800],{"class":139},[129,10094,10095,10097],{"class":131,"line":1235},[129,10096,1999],{"class":135},[129,10098,7812],{"class":139},[129,10100,10101],{"class":131,"line":1326},[129,10102,10103],{"class":139},"    string gender;\n",[129,10105,10106],{"class":131,"line":1332},[129,10107,4009],{"class":139},[129,10109,10110],{"class":131,"line":1344},[129,10111,10112],{"class":198},"\u002F\u002F定义排序函数\n",[129,10114,10115,10117,10119,10121,10124,10126,10128,10130,10132,10134],{"class":131,"line":1626},[129,10116,5379],{"class":135},[129,10118,7331],{"class":1977},[129,10120,140],{"class":139},[129,10122,10123],{"class":1977},"Sanguo",[129,10125,6533],{"class":135},[129,10127,834],{"class":5231},[129,10129,517],{"class":139},[129,10131,143],{"class":135},[129,10133,7346],{"class":5231},[129,10135,146],{"class":139},[129,10137,10138],{"class":131,"line":1631},[129,10139,1560],{"class":139},[129,10141,10142,10144,10146,10148,10150,10152,10154,10156,10158,10161,10163],{"class":131,"line":1637},[129,10143,3215],{"class":135},[129,10145,140],{"class":139},[129,10147,143],{"class":135},[129,10149,3046],{"class":139},[129,10151,185],{"class":135},[129,10153,331],{"class":188},[129,10155,3053],{"class":139},[129,10157,1049],{"class":135},[129,10159,10160],{"class":139},"len;i",[129,10162,2306],{"class":135},[129,10164,146],{"class":139},[129,10166,10167],{"class":131,"line":1642},[129,10168,2044],{"class":139},[129,10170,10171,10174,10176,10178,10180,10182,10184,10186,10188,10190,10192,10194,10196,10198,10200],{"class":131,"line":1656},[129,10172,10173],{"class":135},"     for",[129,10175,1672],{"class":139},[129,10177,143],{"class":135},[129,10179,3424],{"class":139},[129,10181,185],{"class":135},[129,10183,331],{"class":188},[129,10185,3431],{"class":139},[129,10187,1049],{"class":135},[129,10189,7373],{"class":139},[129,10191,671],{"class":135},[129,10193,357],{"class":188},[129,10195,671],{"class":135},[129,10197,3564],{"class":139},[129,10199,2306],{"class":135},[129,10201,146],{"class":139},[129,10203,10204],{"class":131,"line":1661},[129,10205,10206],{"class":139},"     {\n",[129,10208,10209,10212,10215,10217,10220,10222,10225,10227,10229,10231,10233],{"class":131,"line":1667},[129,10210,10211],{"class":135},"         if",[129,10213,10214],{"class":139}," ((s",[129,10216,620],{"class":135},[129,10218,10219],{"class":139},"j)->age ",[129,10221,1099],{"class":135},[129,10223,10224],{"class":139}," (s",[129,10226,620],{"class":135},[129,10228,606],{"class":139},[129,10230,620],{"class":135},[129,10232,357],{"class":188},[129,10234,10235],{"class":139},")->age)\n",[129,10237,10238],{"class":131,"line":1688},[129,10239,10240],{"class":139},"         {\n",[129,10242,10243,10246,10248,10251,10253],{"class":131,"line":1693},[129,10244,10245],{"class":139},"             Sanguo temp",[129,10247,7168],{"class":135},[129,10249,10250],{"class":139},"(s",[129,10252,620],{"class":135},[129,10254,10255],{"class":139},"j);\n",[129,10257,10258,10261,10263,10265,10268,10270,10272,10274,10276,10278,10280],{"class":131,"line":1707},[129,10259,10260],{"class":135},"             *",[129,10262,10250],{"class":139},[129,10264,620],{"class":135},[129,10266,10267],{"class":139},"j)",[129,10269,7168],{"class":135},[129,10271,10250],{"class":139},[129,10273,620],{"class":135},[129,10275,606],{"class":139},[129,10277,620],{"class":135},[129,10279,357],{"class":188},[129,10281,2733],{"class":139},[129,10283,10284,10286,10288,10290,10292,10294,10296,10298,10300],{"class":131,"line":1712},[129,10285,10260],{"class":135},[129,10287,10250],{"class":139},[129,10289,620],{"class":135},[129,10291,606],{"class":139},[129,10293,620],{"class":135},[129,10295,357],{"class":188},[129,10297,568],{"class":139},[129,10299,185],{"class":135},[129,10301,4294],{"class":139},[129,10303,10304],{"class":131,"line":1741},[129,10305,10306],{"class":139},"         }\n",[129,10308,10309],{"class":131,"line":1746},[129,10310,10311],{"class":139},"     }\n",[129,10313,10314],{"class":131,"line":1763},[129,10315,2201],{"class":139},[129,10317,10318],{"class":131,"line":1768},[129,10319,1579],{"class":139},[129,10321,10322],{"class":131,"line":1773},[129,10323,10324],{"class":198},"\u002F\u002F定义打印函数\n",[129,10326,10327,10329,10331,10333,10335,10337,10339,10341,10343,10345],{"class":131,"line":1778},[129,10328,5379],{"class":135},[129,10330,9630],{"class":1977},[129,10332,140],{"class":139},[129,10334,10123],{"class":1977},[129,10336,6533],{"class":135},[129,10338,834],{"class":5231},[129,10340,517],{"class":139},[129,10342,143],{"class":135},[129,10344,7346],{"class":5231},[129,10346,146],{"class":139},[129,10348,10349],{"class":131,"line":1792},[129,10350,1560],{"class":139},[129,10352,10353,10355,10357,10359,10361,10363,10365,10367,10369,10371,10373],{"class":131,"line":1797},[129,10354,3215],{"class":135},[129,10356,1672],{"class":139},[129,10358,143],{"class":135},[129,10360,3046],{"class":139},[129,10362,185],{"class":135},[129,10364,331],{"class":188},[129,10366,3053],{"class":139},[129,10368,1049],{"class":135},[129,10370,10160],{"class":139},[129,10372,2306],{"class":135},[129,10374,146],{"class":139},[129,10376,10377],{"class":131,"line":2591},[129,10378,2044],{"class":139},[129,10380,10381,10383,10385,10387,10389,10392,10394,10396,10398,10401,10403,10405,10407,10410,10412,10414,10416,10419,10421,10423,10425,10428,10430,10432,10434,10437,10439],{"class":131,"line":2605},[129,10382,3465],{"class":139},[129,10384,1183],{"class":135},[129,10386,390],{"class":244},[129,10388,1245],{"class":188},[129,10390,10391],{"class":244},"姓名：\"",[129,10393,1183],{"class":135},[129,10395,10250],{"class":139},[129,10397,620],{"class":135},[129,10399,10400],{"class":139},"i)->name",[129,10402,1183],{"class":135},[129,10404,390],{"class":244},[129,10406,1245],{"class":188},[129,10408,10409],{"class":244},"年龄：\"",[129,10411,1183],{"class":135},[129,10413,10250],{"class":139},[129,10415,620],{"class":135},[129,10417,10418],{"class":139},"i)->age",[129,10420,1183],{"class":135},[129,10422,390],{"class":244},[129,10424,1245],{"class":188},[129,10426,10427],{"class":244},"性别：\"",[129,10429,1183],{"class":135},[129,10431,10250],{"class":139},[129,10433,620],{"class":135},[129,10435,10436],{"class":139},"i)->gender",[129,10438,1183],{"class":135},[129,10440,1206],{"class":139},[129,10442,10443],{"class":131,"line":2613},[129,10444,2201],{"class":139},[129,10446,10447],{"class":131,"line":2618},[129,10448,1579],{"class":139},[129,10450,10451,10453,10455],{"class":131,"line":2624},[129,10452,143],{"class":135},[129,10454,1987],{"class":1977},[129,10456,1990],{"class":139},[129,10458,10459],{"class":131,"line":2630},[129,10460,1560],{"class":139},[129,10462,10463],{"class":131,"line":2635},[129,10464,10465],{"class":198},"    \u002F\u002F定义结构体变量\n",[129,10467,10468,10471,10473,10475],{"class":131,"line":7963},[129,10469,10470],{"class":139},"    Sanguo s1[",[129,10472,458],{"class":188},[129,10474,1079],{"class":139},[129,10476,4922],{"class":135},[129,10478,10479],{"class":131,"line":7987},[129,10480,2044],{"class":139},[129,10482,10483,10485,10487,10489,10491,10493,10495],{"class":131,"line":7992},[129,10484,4931],{"class":139},[129,10486,9967],{"class":244},[129,10488,517],{"class":139},[129,10490,914],{"class":188},[129,10492,517],{"class":139},[129,10494,9976],{"class":244},[129,10496,4944],{"class":139},[129,10498,10499,10501,10503,10505,10507,10509,10511],{"class":131,"line":7998},[129,10500,4931],{"class":139},[129,10502,9985],{"class":244},[129,10504,517],{"class":139},[129,10506,889],{"class":188},[129,10508,517],{"class":139},[129,10510,9976],{"class":244},[129,10512,4944],{"class":139},[129,10514,10515,10517,10519,10521,10523,10525,10527],{"class":131,"line":8025},[129,10516,4931],{"class":139},[129,10518,10002],{"class":244},[129,10520,517],{"class":139},[129,10522,839],{"class":188},[129,10524,517],{"class":139},[129,10526,9976],{"class":244},[129,10528,4944],{"class":139},[129,10530,10531,10533,10535,10537,10539,10541,10543],{"class":131,"line":8030},[129,10532,4931],{"class":139},[129,10534,10019],{"class":244},[129,10536,517],{"class":139},[129,10538,864],{"class":188},[129,10540,517],{"class":139},[129,10542,9976],{"class":244},[129,10544,4944],{"class":139},[129,10546,10547,10549,10551,10553,10555,10557,10559],{"class":131,"line":8036},[129,10548,4931],{"class":139},[129,10550,10036],{"class":244},[129,10552,517],{"class":139},[129,10554,814],{"class":188},[129,10556,517],{"class":139},[129,10558,10045],{"class":244},[129,10560,4944],{"class":139},[129,10562,10563],{"class":131,"line":8048},[129,10564,4965],{"class":139},[129,10566,10567,10569,10571,10573,10576,10578,10581,10583],{"class":131,"line":8060},[129,10568,1999],{"class":135},[129,10570,7346],{"class":139},[129,10572,4217],{"class":135},[129,10574,10575],{"class":139},"(s1)",[129,10577,4223],{"class":135},[129,10579,10580],{"class":139},"(s1[",[129,10582,331],{"class":188},[129,10584,3870],{"class":139},[129,10586,10587,10590,10592,10595,10597,10600,10603,10605],{"class":131,"line":8072},[129,10588,10589],{"class":139},"    Sanguo ",[129,10591,594],{"class":135},[129,10593,10594],{"class":139},"s ",[129,10596,185],{"class":135},[129,10598,10599],{"class":135}," &",[129,10601,10602],{"class":139},"s1[",[129,10604,331],{"class":188},[129,10606,4704],{"class":139},[129,10608,10609],{"class":131,"line":9731},[129,10610,10611],{"class":198},"    \u002F\u002F排序前：\n",[129,10613,10614,10616,10618,10621,10623],{"class":131,"line":9756},[129,10615,6544],{"class":139},[129,10617,1183],{"class":135},[129,10619,10620],{"class":244}," \"排序前：\"",[129,10622,1459],{"class":135},[129,10624,8855],{"class":139},[129,10626,10627,10629],{"class":131,"line":9779},[129,10628,9930],{"class":1977},[129,10630,10631],{"class":139},"(s,len);\n",[129,10633,10634],{"class":131,"line":9803},[129,10635,10636],{"class":198},"    \u002F\u002F调用排序函数\n",[129,10638,10639,10641],{"class":131,"line":9808},[129,10640,7613],{"class":1977},[129,10642,10631],{"class":139},[129,10644,10645],{"class":131,"line":9813},[129,10646,10647],{"class":198},"    \u002F\u002F排序后\n",[129,10649,10650,10652,10654,10657,10659],{"class":131,"line":9818},[129,10651,6544],{"class":139},[129,10653,1183],{"class":135},[129,10655,10656],{"class":244}," \"排序后：\"",[129,10658,1459],{"class":135},[129,10660,8855],{"class":139},[129,10662,10663,10665],{"class":131,"line":9827},[129,10664,9930],{"class":1977},[129,10666,10631],{"class":139},[129,10668,10669],{"class":131,"line":9832},[129,10670,1579],{"class":139},[14,10672,10673,10674,10676],{},"注意：使用指针时直接用传首地址**&s",[129,10675,331],{},"**",[5141,10678,10679],{},"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":42,"searchDepth":51,"depth":51,"links":10681},[10682,10683,10684,10685,10686,10687,10688],{"id":7718,"depth":51,"text":7719},{"id":8080,"depth":51,"text":8081},{"id":8349,"depth":51,"text":8350},{"id":8514,"depth":51,"text":8515},{"id":8730,"depth":51,"text":8731},{"id":9051,"depth":51,"text":9052},{"id":9279,"depth":51,"text":9280},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7707,"description":7715},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10695,"title":10696,"body":10697,"description":42,"extension":54,"meta":12040,"navigation":56,"path":12041,"seo":12042,"stem":12043,"__hash__":12044},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10698,"toc":12034},[10699,10702,10706,10712,10726,10731,10734,10738,10745,10751,10754,10761,10767,10772,10775,10778,10781,11345,11348,11362,11366,11371,11387,11527,11530,11536,11539,11544,11552,11660,11663,11668,11671,11676,11679,11685,11688,12031],[10,10700,10696],{"id":10701},"_5程序内存模型",[71,10703,10705],{"id":10704},"_51内存分区模型","5.1内存分区模型",[14,10707,10708,10709],{},"C++程序在执行时，将内存大方向划分为",[289,10710,10711],{},"4个区域",[1146,10713,10714,10717,10720,10723],{},[86,10715,10716],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[86,10718,10719],{},"全局区：存放全局变量和静态变量以及常量",[86,10721,10722],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[86,10724,10725],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10727,10728],{},[289,10729,10730],{},"内存四区意义：",[14,10732,10733],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[100,10735,10737],{"id":10736},"_511程序运行前","5.1.1程序运行前",[14,10739,10740,10741,10744],{},"​\t在程序编译后，生成了exe可执行程序，",[289,10742,10743],{},"未执行该程序前","分为两个区域",[14,10746,10747,10748],{},"​\t",[289,10749,10750],{},"代码区：",[14,10752,10753],{},"​\t\t存放 CPU 执行的机器指令",[14,10755,10756,10757,10760],{},"​\t\t代码区是",[289,10758,10759],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10762,10756,10763,10766],{},[289,10764,10765],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10768,10747,10769],{},[289,10770,10771],{},"全局区：",[14,10773,10774],{},"​\t\t全局变量和静态变量存放在此.",[14,10776,10777],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10779,10780],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[120,10782,10784],{"className":122,"code":10783,"language":124,"meta":42,"style":42},"\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",[126,10785,10786,10791,10804,10817,10821,10826,10841,10856,10860,10869,10873,10878,10891,10904,10908,10913,10939,10965,10969,10996,11022,11026,11031,11047,11062,11066,11092,11118,11122,11147,11172,11176,11202,11228,11232,11248,11263,11289,11315,11319,11329,11333,11341],{"__ignoreMap":42},[129,10787,10788],{"class":131,"line":132},[129,10789,10790],{"class":198},"\u002F\u002F全局变量\n",[129,10792,10793,10795,10798,10800,10802],{"class":131,"line":51},[129,10794,143],{"class":135},[129,10796,10797],{"class":139}," g_a ",[129,10799,185],{"class":135},[129,10801,2052],{"class":188},[129,10803,1305],{"class":139},[129,10805,10806,10808,10811,10813,10815],{"class":131,"line":1194},[129,10807,143],{"class":135},[129,10809,10810],{"class":139}," g_b ",[129,10812,185],{"class":135},[129,10814,2052],{"class":188},[129,10816,1305],{"class":139},[129,10818,10819],{"class":131,"line":1209},[129,10820,2414],{"emptyLinePlaceholder":56},[129,10822,10823],{"class":131,"line":1215},[129,10824,10825],{"class":198},"\u002F\u002F全局常量\n",[129,10827,10828,10830,10832,10835,10837,10839],{"class":131,"line":1229},[129,10829,6807],{"class":135},[129,10831,2396],{"class":135},[129,10833,10834],{"class":139}," c_g_a ",[129,10836,185],{"class":135},[129,10838,2052],{"class":188},[129,10840,1305],{"class":139},[129,10842,10843,10845,10847,10850,10852,10854],{"class":131,"line":1235},[129,10844,6807],{"class":135},[129,10846,2396],{"class":135},[129,10848,10849],{"class":139}," c_g_b ",[129,10851,185],{"class":135},[129,10853,2052],{"class":188},[129,10855,1305],{"class":139},[129,10857,10858],{"class":131,"line":1326},[129,10859,2414],{"emptyLinePlaceholder":56},[129,10861,10862,10864,10866],{"class":131,"line":1332},[129,10863,143],{"class":135},[129,10865,1987],{"class":1977},[129,10867,10868],{"class":139},"() {\n",[129,10870,10871],{"class":131,"line":1344},[129,10872,2414],{"emptyLinePlaceholder":56},[129,10874,10875],{"class":131,"line":1626},[129,10876,10877],{"class":198},"    \u002F\u002F局部变量\n",[129,10879,10880,10882,10885,10887,10889],{"class":131,"line":1631},[129,10881,1999],{"class":135},[129,10883,10884],{"class":139}," a ",[129,10886,185],{"class":135},[129,10888,2052],{"class":188},[129,10890,1305],{"class":139},[129,10892,10893,10895,10898,10900,10902],{"class":131,"line":1637},[129,10894,1999],{"class":135},[129,10896,10897],{"class":139}," b ",[129,10899,185],{"class":135},[129,10901,2052],{"class":188},[129,10903,1305],{"class":139},[129,10905,10906],{"class":131,"line":1642},[129,10907,2414],{"emptyLinePlaceholder":56},[129,10909,10910],{"class":131,"line":1656},[129,10911,10912],{"class":198},"    \u002F\u002F打印地址\n",[129,10914,10915,10917,10919,10922,10924,10926,10928,10930,10932,10935,10937],{"class":131,"line":1661},[129,10916,6544],{"class":139},[129,10918,1183],{"class":135},[129,10920,10921],{"class":244}," \"局部变量a地址为： \"",[129,10923,1459],{"class":135},[129,10925,1672],{"class":139},[129,10927,143],{"class":135},[129,10929,568],{"class":139},[129,10931,492],{"class":135},[129,10933,10934],{"class":139},"a ",[129,10936,1183],{"class":135},[129,10938,8855],{"class":139},[129,10940,10941,10943,10945,10948,10950,10952,10954,10956,10958,10961,10963],{"class":131,"line":1667},[129,10942,6544],{"class":139},[129,10944,1183],{"class":135},[129,10946,10947],{"class":244}," \"局部变量b地址为： \"",[129,10949,1459],{"class":135},[129,10951,1672],{"class":139},[129,10953,143],{"class":135},[129,10955,568],{"class":139},[129,10957,492],{"class":135},[129,10959,10960],{"class":139},"b ",[129,10962,1183],{"class":135},[129,10964,8855],{"class":139},[129,10966,10967],{"class":131,"line":1688},[129,10968,2414],{"emptyLinePlaceholder":56},[129,10970,10971,10973,10975,10978,10980,10983,10985,10987,10989,10992,10994],{"class":131,"line":1693},[129,10972,6544],{"class":139},[129,10974,1183],{"class":135},[129,10976,10977],{"class":244}," \"全局变量g_a地址为： \"",[129,10979,1459],{"class":135},[129,10981,10982],{"class":139},"  (",[129,10984,143],{"class":135},[129,10986,568],{"class":139},[129,10988,492],{"class":135},[129,10990,10991],{"class":139},"g_a ",[129,10993,1183],{"class":135},[129,10995,8855],{"class":139},[129,10997,10998,11000,11002,11005,11007,11009,11011,11013,11015,11018,11020],{"class":131,"line":1707},[129,10999,6544],{"class":139},[129,11001,1183],{"class":135},[129,11003,11004],{"class":244}," \"全局变量g_b地址为： \"",[129,11006,1459],{"class":135},[129,11008,10982],{"class":139},[129,11010,143],{"class":135},[129,11012,568],{"class":139},[129,11014,492],{"class":135},[129,11016,11017],{"class":139},"g_b ",[129,11019,1183],{"class":135},[129,11021,8855],{"class":139},[129,11023,11024],{"class":131,"line":1712},[129,11025,2414],{"emptyLinePlaceholder":56},[129,11027,11028],{"class":131,"line":1741},[129,11029,11030],{"class":198},"    \u002F\u002F静态变量\n",[129,11032,11033,11036,11038,11041,11043,11045],{"class":131,"line":1746},[129,11034,11035],{"class":135},"    static",[129,11037,2396],{"class":135},[129,11039,11040],{"class":139}," s_a ",[129,11042,185],{"class":135},[129,11044,2052],{"class":188},[129,11046,1305],{"class":139},[129,11048,11049,11051,11053,11056,11058,11060],{"class":131,"line":1763},[129,11050,11035],{"class":135},[129,11052,2396],{"class":135},[129,11054,11055],{"class":139}," s_b ",[129,11057,185],{"class":135},[129,11059,2052],{"class":188},[129,11061,1305],{"class":139},[129,11063,11064],{"class":131,"line":1768},[129,11065,2414],{"emptyLinePlaceholder":56},[129,11067,11068,11070,11072,11075,11077,11079,11081,11083,11085,11088,11090],{"class":131,"line":1773},[129,11069,6544],{"class":139},[129,11071,1183],{"class":135},[129,11073,11074],{"class":244}," \"静态变量s_a地址为： \"",[129,11076,1459],{"class":135},[129,11078,1672],{"class":139},[129,11080,143],{"class":135},[129,11082,568],{"class":139},[129,11084,492],{"class":135},[129,11086,11087],{"class":139},"s_a ",[129,11089,1183],{"class":135},[129,11091,8855],{"class":139},[129,11093,11094,11096,11098,11101,11103,11105,11107,11109,11111,11114,11116],{"class":131,"line":1778},[129,11095,6544],{"class":139},[129,11097,1183],{"class":135},[129,11099,11100],{"class":244}," \"静态变量s_b地址为： \"",[129,11102,1459],{"class":135},[129,11104,1672],{"class":139},[129,11106,143],{"class":135},[129,11108,568],{"class":139},[129,11110,492],{"class":135},[129,11112,11113],{"class":139},"s_b ",[129,11115,1183],{"class":135},[129,11117,8855],{"class":139},[129,11119,11120],{"class":131,"line":1792},[129,11121,2414],{"emptyLinePlaceholder":56},[129,11123,11124,11126,11128,11131,11133,11135,11137,11139,11141,11143,11145],{"class":131,"line":1797},[129,11125,6544],{"class":139},[129,11127,1183],{"class":135},[129,11129,11130],{"class":244}," \"字符串常量地址为： \"",[129,11132,1459],{"class":135},[129,11134,1672],{"class":139},[129,11136,143],{"class":135},[129,11138,568],{"class":139},[129,11140,492],{"class":135},[129,11142,1201],{"class":244},[129,11144,1459],{"class":135},[129,11146,8855],{"class":139},[129,11148,11149,11151,11153,11155,11157,11159,11161,11163,11165,11168,11170],{"class":131,"line":2591},[129,11150,6544],{"class":139},[129,11152,1183],{"class":135},[129,11154,11130],{"class":244},[129,11156,1459],{"class":135},[129,11158,1672],{"class":139},[129,11160,143],{"class":135},[129,11162,568],{"class":139},[129,11164,492],{"class":135},[129,11166,11167],{"class":244},"\"hello world1\"",[129,11169,1459],{"class":135},[129,11171,8855],{"class":139},[129,11173,11174],{"class":131,"line":2605},[129,11175,2414],{"emptyLinePlaceholder":56},[129,11177,11178,11180,11182,11185,11187,11189,11191,11193,11195,11198,11200],{"class":131,"line":2613},[129,11179,6544],{"class":139},[129,11181,1183],{"class":135},[129,11183,11184],{"class":244}," \"全局常量c_g_a地址为： \"",[129,11186,1459],{"class":135},[129,11188,1672],{"class":139},[129,11190,143],{"class":135},[129,11192,568],{"class":139},[129,11194,492],{"class":135},[129,11196,11197],{"class":139},"c_g_a ",[129,11199,1183],{"class":135},[129,11201,8855],{"class":139},[129,11203,11204,11206,11208,11211,11213,11215,11217,11219,11221,11224,11226],{"class":131,"line":2618},[129,11205,6544],{"class":139},[129,11207,1183],{"class":135},[129,11209,11210],{"class":244}," \"全局常量c_g_b地址为： \"",[129,11212,1459],{"class":135},[129,11214,1672],{"class":139},[129,11216,143],{"class":135},[129,11218,568],{"class":139},[129,11220,492],{"class":135},[129,11222,11223],{"class":139},"c_g_b ",[129,11225,1183],{"class":135},[129,11227,8855],{"class":139},[129,11229,11230],{"class":131,"line":2624},[129,11231,2414],{"emptyLinePlaceholder":56},[129,11233,11234,11237,11239,11242,11244,11246],{"class":131,"line":2630},[129,11235,11236],{"class":135},"    const",[129,11238,2396],{"class":135},[129,11240,11241],{"class":139}," c_l_a ",[129,11243,185],{"class":135},[129,11245,2052],{"class":188},[129,11247,1305],{"class":139},[129,11249,11250,11252,11254,11257,11259,11261],{"class":131,"line":2635},[129,11251,11236],{"class":135},[129,11253,2396],{"class":135},[129,11255,11256],{"class":139}," c_l_b ",[129,11258,185],{"class":135},[129,11260,2052],{"class":188},[129,11262,1305],{"class":139},[129,11264,11265,11267,11269,11272,11274,11276,11278,11280,11282,11285,11287],{"class":131,"line":7963},[129,11266,6544],{"class":139},[129,11268,1183],{"class":135},[129,11270,11271],{"class":244}," \"局部常量c_l_a地址为： \"",[129,11273,1459],{"class":135},[129,11275,1672],{"class":139},[129,11277,143],{"class":135},[129,11279,568],{"class":139},[129,11281,492],{"class":135},[129,11283,11284],{"class":139},"c_l_a ",[129,11286,1183],{"class":135},[129,11288,8855],{"class":139},[129,11290,11291,11293,11295,11298,11300,11302,11304,11306,11308,11311,11313],{"class":131,"line":7987},[129,11292,6544],{"class":139},[129,11294,1183],{"class":135},[129,11296,11297],{"class":244}," \"局部常量c_l_b地址为： \"",[129,11299,1459],{"class":135},[129,11301,1672],{"class":139},[129,11303,143],{"class":135},[129,11305,568],{"class":139},[129,11307,492],{"class":135},[129,11309,11310],{"class":139},"c_l_b ",[129,11312,1183],{"class":135},[129,11314,8855],{"class":139},[129,11316,11317],{"class":131,"line":7992},[129,11318,2414],{"emptyLinePlaceholder":56},[129,11320,11321,11323,11325,11327],{"class":131,"line":7998},[129,11322,2317],{"class":1977},[129,11324,140],{"class":139},[129,11326,2322],{"class":244},[129,11328,2733],{"class":139},[129,11330,11331],{"class":131,"line":8025},[129,11332,2414],{"emptyLinePlaceholder":56},[129,11334,11335,11337,11339],{"class":131,"line":8030},[129,11336,4104],{"class":135},[129,11338,4107],{"class":188},[129,11340,1305],{"class":139},[129,11342,11343],{"class":131,"line":8036},[129,11344,1579],{"class":139},[14,11346,11347],{},"总结：",[1146,11349,11350,11353,11356,11359],{},[86,11351,11352],{},"c++中程序运行前分为全局区和代码区",[86,11354,11355],{},"代码区特点是共享和只读",[86,11357,11358],{},"全局区中存放全局变量、静态变量、常量",[86,11360,11361],{},"常量区中存放const修饰的全局常量和字符串常量",[100,11363,11365],{"id":11364},"_512程序运行后","5.1.2程序运行后",[83,11367,11368],{},[86,11369,11370],{},"栈区：",[1146,11372,11373,11380],{},[86,11374,11375,11376,11379],{},"由编译器自动分配释放, 存放",[289,11377,11378],{},"函数的参数值,局部变量","等",[86,11381,11382,11383,11386],{},"注意事项：",[289,11384,11385],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[120,11388,11390],{"className":122,"code":11389,"language":124,"meta":42,"style":42},"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",[126,11391,11392,11403,11407,11422,11434,11438,11442,11450,11455,11470,11488,11505,11515,11523],{"__ignoreMap":42},[129,11393,11394,11396,11398,11401],{"class":131,"line":132},[129,11395,143],{"class":135},[129,11397,6533],{"class":135},[129,11399,11400],{"class":1977}," func",[129,11402,1990],{"class":139},[129,11404,11405],{"class":131,"line":51},[129,11406,1560],{"class":139},[129,11408,11409,11411,11413,11415,11417,11419],{"class":131,"line":1194},[129,11410,1999],{"class":135},[129,11412,10884],{"class":139},[129,11414,185],{"class":135},[129,11416,2052],{"class":188},[129,11418,195],{"class":139},[129,11420,11421],{"class":198}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[129,11423,11424,11426,11428,11431],{"class":131,"line":1209},[129,11425,4104],{"class":135},[129,11427,10599],{"class":135},[129,11429,11430],{"class":139},"a;",[129,11432,11433],{"class":198}," \u002F\u002F放回局部变量的地址\n",[129,11435,11436],{"class":131,"line":1215},[129,11437,1579],{"class":139},[129,11439,11440],{"class":131,"line":1229},[129,11441,2414],{"emptyLinePlaceholder":56},[129,11443,11444,11446,11448],{"class":131,"line":1235},[129,11445,143],{"class":135},[129,11447,1987],{"class":1977},[129,11449,10868],{"class":139},[129,11451,11452],{"class":131,"line":1326},[129,11453,11454],{"class":198},"    \u002F\u002F接受func的返回值\n",[129,11456,11457,11459,11461,11464,11466,11468],{"class":131,"line":1332},[129,11458,1999],{"class":135},[129,11460,6533],{"class":135},[129,11462,11463],{"class":139},"p ",[129,11465,185],{"class":135},[129,11467,11400],{"class":1977},[129,11469,5651],{"class":139},[129,11471,11472,11474,11476,11478,11480,11482,11485],{"class":131,"line":1344},[129,11473,6544],{"class":139},[129,11475,1183],{"class":135},[129,11477,6533],{"class":135},[129,11479,11463],{"class":139},[129,11481,1183],{"class":135},[129,11483,11484],{"class":139}," endl;",[129,11486,11487],{"class":198}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[129,11489,11490,11492,11494,11496,11498,11500,11502],{"class":131,"line":1626},[129,11491,6544],{"class":139},[129,11493,1183],{"class":135},[129,11495,6533],{"class":135},[129,11497,11463],{"class":139},[129,11499,1183],{"class":135},[129,11501,11484],{"class":139},[129,11503,11504],{"class":198}," \u002F\u002F第二次这个数据不再保留\n",[129,11506,11507,11509,11511,11513],{"class":131,"line":1631},[129,11508,2317],{"class":1977},[129,11510,140],{"class":139},[129,11512,2322],{"class":244},[129,11514,2733],{"class":139},[129,11516,11517,11519,11521],{"class":131,"line":1637},[129,11518,4104],{"class":135},[129,11520,4107],{"class":188},[129,11522,1305],{"class":139},[129,11524,11525],{"class":131,"line":1642},[129,11526,1579],{"class":139},[14,11528,11529],{},"输出结果：",[14,11531,11532],{},[40,11533],{"alt":11534,"src":11535},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11537,11538],{},"总结：不要返回局部变量的地址",[83,11540,11541],{"start":51},[86,11542,11543],{},"堆区",[1146,11545,11546,11549],{},[86,11547,11548],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[86,11550,11551],{},"在c++中主要利用new在堆区开辟内存",[120,11553,11555],{"className":122,"code":11554,"language":124,"meta":42,"style":42},"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",[126,11556,11557,11572,11576,11581,11602,11609,11613,11621,11625,11630,11644,11656],{"__ignoreMap":42},[129,11558,11559,11561,11564,11567,11569],{"class":131,"line":132},[129,11560,143],{"class":135},[129,11562,11563],{"class":135},"  *",[129,11565,11566],{"class":1977},"func",[129,11568,2441],{"class":139},[129,11570,11571],{"class":198},"  \u002F\u002F函数返回指针\n",[129,11573,11574],{"class":131,"line":51},[129,11575,1560],{"class":139},[129,11577,11578],{"class":131,"line":1194},[129,11579,11580],{"class":198},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[129,11582,11583,11585,11587,11589,11591,11594,11596,11598,11600],{"class":131,"line":1209},[129,11584,4161],{"class":135},[129,11586,6533],{"class":135},[129,11588,14],{"class":139},[129,11590,185],{"class":135},[129,11592,11593],{"class":135}," new",[129,11595,2396],{"class":135},[129,11597,140],{"class":139},[129,11599,585],{"class":188},[129,11601,2733],{"class":139},[129,11603,11604,11606],{"class":131,"line":1215},[129,11605,4395],{"class":135},[129,11607,11608],{"class":139}," p;\n",[129,11610,11611],{"class":131,"line":1229},[129,11612,1579],{"class":139},[129,11614,11615,11617,11619],{"class":131,"line":1235},[129,11616,143],{"class":135},[129,11618,1987],{"class":1977},[129,11620,1990],{"class":139},[129,11622,11623],{"class":131,"line":1326},[129,11624,1560],{"class":139},[129,11626,11627],{"class":131,"line":1332},[129,11628,11629],{"class":198},"    \u002F\u002F在堆区开辟数据\n",[129,11631,11632,11634,11636,11638,11640,11642],{"class":131,"line":1344},[129,11633,1999],{"class":135},[129,11635,6533],{"class":135},[129,11637,14],{"class":139},[129,11639,185],{"class":135},[129,11641,11566],{"class":1977},[129,11643,5651],{"class":139},[129,11645,11646,11648,11650,11652,11654],{"class":131,"line":1626},[129,11647,1565],{"class":139},[129,11649,6434],{"class":135},[129,11651,14],{"class":139},[129,11653,1183],{"class":135},[129,11655,1206],{"class":139},[129,11657,11658],{"class":131,"line":1631},[129,11659,1579],{"class":139},[14,11661,11662],{},"图片展示：",[14,11664,11665],{},[40,11666],{"alt":11534,"src":11667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11669,11670],{},"堆区内存由程序员管生死！！！",[83,11672,11673],{"start":1194},[86,11674,11675],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11677,11678],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11680,11681,11682],{},"​语法：",[126,11683,11684],{}," new 数据类型",[14,11686,11687],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[120,11689,11691],{"className":122,"code":11690,"language":124,"meta":42,"style":42},"\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",[126,11692,11693,11698,11708,11712,11717,11722,11744,11748,11756,11760,11774,11786,11798,11810,11815,11820,11831,11835,11840,11848,11852,11857,11879,11905,11909,11927,11931,11957,11961,11973,11977,11982,11987,11995,11999,12003,12011,12015,12021,12027],{"__ignoreMap":42},[129,11694,11695],{"class":131,"line":132},[129,11696,11697],{"class":198},"\u002F\u002F1.new的基本语法\n",[129,11699,11700,11702,11704,11706],{"class":131,"line":51},[129,11701,143],{"class":135},[129,11703,6533],{"class":135},[129,11705,11566],{"class":1977},[129,11707,1990],{"class":139},[129,11709,11710],{"class":131,"line":1194},[129,11711,1560],{"class":139},[129,11713,11714],{"class":131,"line":1209},[129,11715,11716],{"class":198},"    \u002F\u002F在堆区创建整型数据\n",[129,11718,11719],{"class":131,"line":1215},[129,11720,11721],{"class":198},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[129,11723,11724,11726,11728,11730,11733,11735,11737,11739,11741],{"class":131,"line":1229},[129,11725,1999],{"class":135},[129,11727,6533],{"class":135},[129,11729,14],{"class":139},[129,11731,11732],{"class":135},"=new",[129,11734,2396],{"class":135},[129,11736,140],{"class":139},[129,11738,585],{"class":188},[129,11740,5981],{"class":139},[129,11742,11743],{"class":198},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[129,11745,11746],{"class":131,"line":1235},[129,11747,1579],{"class":139},[129,11749,11750,11752,11754],{"class":131,"line":1326},[129,11751,5379],{"class":135},[129,11753,5603],{"class":1977},[129,11755,1990],{"class":139},[129,11757,11758],{"class":131,"line":1332},[129,11759,1560],{"class":139},[129,11761,11762,11764,11766,11768,11770,11772],{"class":131,"line":1344},[129,11763,1999],{"class":135},[129,11765,6533],{"class":135},[129,11767,14],{"class":139},[129,11769,185],{"class":135},[129,11771,11566],{"class":1977},[129,11773,5651],{"class":139},[129,11775,11776,11778,11780,11782,11784],{"class":131,"line":1626},[129,11777,1565],{"class":139},[129,11779,6434],{"class":135},[129,11781,14],{"class":139},[129,11783,1183],{"class":135},[129,11785,1206],{"class":139},[129,11787,11788,11790,11792,11794,11796],{"class":131,"line":1631},[129,11789,1565],{"class":139},[129,11791,6434],{"class":135},[129,11793,14],{"class":139},[129,11795,1183],{"class":135},[129,11797,1206],{"class":139},[129,11799,11800,11802,11804,11806,11808],{"class":131,"line":1637},[129,11801,1565],{"class":139},[129,11803,6434],{"class":135},[129,11805,14],{"class":139},[129,11807,1183],{"class":135},[129,11809,1206],{"class":139},[129,11811,11812],{"class":131,"line":1642},[129,11813,11814],{"class":198},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[129,11816,11817],{"class":131,"line":1656},[129,11818,11819],{"class":198},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[129,11821,11822,11825,11828],{"class":131,"line":1661},[129,11823,11824],{"class":135},"    delete",[129,11826,11827],{"class":139}," p;",[129,11829,11830],{"class":198},"\u002F\u002F删除这块地址\n",[129,11832,11833],{"class":131,"line":1667},[129,11834,1579],{"class":139},[129,11836,11837],{"class":131,"line":1688},[129,11838,11839],{"class":198},"\u002F\u002F2.在堆区利用new开辟数组\n",[129,11841,11842,11844,11846],{"class":131,"line":1693},[129,11843,5379],{"class":135},[129,11845,5672],{"class":1977},[129,11847,1990],{"class":139},[129,11849,11850],{"class":131,"line":1707},[129,11851,1560],{"class":139},[129,11853,11854],{"class":131,"line":1712},[129,11855,11856],{"class":198},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[129,11858,11859,11861,11863,11865,11867,11869,11871,11873,11876],{"class":131,"line":1741},[129,11860,1999],{"class":135},[129,11862,6533],{"class":135},[129,11864,3894],{"class":139},[129,11866,11732],{"class":135},[129,11868,2396],{"class":135},[129,11870,1029],{"class":139},[129,11872,585],{"class":188},[129,11874,11875],{"class":139},"];",[129,11877,11878],{"class":198},"\u002F\u002F10代表数组有10个元素\n",[129,11880,11881,11883,11885,11887,11889,11891,11893,11895,11897,11899,11901,11903],{"class":131,"line":1746},[129,11882,3215],{"class":135},[129,11884,1672],{"class":139},[129,11886,143],{"class":135},[129,11888,3046],{"class":139},[129,11890,185],{"class":135},[129,11892,331],{"class":188},[129,11894,3053],{"class":139},[129,11896,1049],{"class":135},[129,11898,585],{"class":188},[129,11900,3053],{"class":139},[129,11902,2306],{"class":135},[129,11904,146],{"class":139},[129,11906,11907],{"class":131,"line":1763},[129,11908,2044],{"class":139},[129,11910,11911,11914,11916,11918,11920,11922,11924],{"class":131,"line":1768},[129,11912,11913],{"class":139},"        arr[i]",[129,11915,185],{"class":135},[129,11917,580],{"class":139},[129,11919,620],{"class":135},[129,11921,450],{"class":188},[129,11923,195],{"class":139},[129,11925,11926],{"class":198},"\u002F\u002F给10个元素赋值100～109\n",[129,11928,11929],{"class":131,"line":1773},[129,11930,2201],{"class":139},[129,11932,11933,11935,11937,11939,11941,11943,11945,11947,11949,11951,11953,11955],{"class":131,"line":1778},[129,11934,3215],{"class":135},[129,11936,1672],{"class":139},[129,11938,143],{"class":135},[129,11940,3046],{"class":139},[129,11942,185],{"class":135},[129,11944,331],{"class":188},[129,11946,3053],{"class":139},[129,11948,1049],{"class":135},[129,11950,585],{"class":188},[129,11952,3053],{"class":139},[129,11954,2306],{"class":135},[129,11956,146],{"class":139},[129,11958,11959],{"class":131,"line":1792},[129,11960,2044],{"class":139},[129,11962,11963,11965,11967,11969,11971],{"class":131,"line":1797},[129,11964,3465],{"class":139},[129,11966,1183],{"class":135},[129,11968,4368],{"class":139},[129,11970,1183],{"class":135},[129,11972,1206],{"class":139},[129,11974,11975],{"class":131,"line":2591},[129,11976,2201],{"class":139},[129,11978,11979],{"class":131,"line":2605},[129,11980,11981],{"class":198},"    \u002F\u002F释放堆区数组\n",[129,11983,11984],{"class":131,"line":2613},[129,11985,11986],{"class":198},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[129,11988,11989,11992],{"class":131,"line":2618},[129,11990,11991],{"class":135},"    delete[]",[129,11993,11994],{"class":139}," arr;\n",[129,11996,11997],{"class":131,"line":2624},[129,11998,1579],{"class":139},[129,12000,12001],{"class":131,"line":2630},[129,12002,2414],{"emptyLinePlaceholder":56},[129,12004,12005,12007,12009],{"class":131,"line":2635},[129,12006,143],{"class":135},[129,12008,1987],{"class":1977},[129,12010,1990],{"class":139},[129,12012,12013],{"class":131,"line":7963},[129,12014,1560],{"class":139},[129,12016,12017,12019],{"class":131,"line":7987},[129,12018,5648],{"class":1977},[129,12020,5651],{"class":139},[129,12022,12023,12025],{"class":131,"line":7992},[129,12024,5717],{"class":1977},[129,12026,5651],{"class":139},[129,12028,12029],{"class":131,"line":7998},[129,12030,1579],{"class":139},[5141,12032,12033],{},"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":42,"searchDepth":51,"depth":51,"links":12035},[12036],{"id":10704,"depth":51,"text":10705,"children":12037},[12038,12039],{"id":10736,"depth":1194,"text":10737},{"id":11364,"depth":1194,"text":11365},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10696,"description":42},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12046,"title":12047,"body":12048,"description":42,"extension":54,"meta":13529,"navigation":56,"path":13530,"seo":13531,"stem":13532,"__hash__":13533},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12049,"toc":13521},[12050,12053,12057,12060,12063,12232,12236,12241,12258,12263,12415,12419,12422,12425,12819,12823,12826,12831,12834,13146,13150,13156,13316,13318,13326,13330,13333,13340,13518],[10,12051,12047],{"id":12052},"_6引用",[71,12054,12056],{"id":12055},"_61引用基本用法","6.1引用基本用法",[14,12058,12059],{},"引用的本质：给变量起别名",[14,12061,12062],{},"语法：数据类型 &别名=原名",[120,12064,12066],{"className":122,"code":12065,"language":124,"meta":42,"style":42},"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",[126,12067,12068,12076,12080,12092,12104,12108,12127,12146,12150,12161,12165,12184,12202,12206,12216,12220,12228],{"__ignoreMap":42},[129,12069,12070,12072,12074],{"class":131,"line":132},[129,12071,143],{"class":135},[129,12073,1987],{"class":1977},[129,12075,10868],{"class":139},[129,12077,12078],{"class":131,"line":51},[129,12079,2414],{"emptyLinePlaceholder":56},[129,12081,12082,12084,12086,12088,12090],{"class":131,"line":1194},[129,12083,1999],{"class":135},[129,12085,10884],{"class":139},[129,12087,185],{"class":135},[129,12089,2052],{"class":188},[129,12091,1305],{"class":139},[129,12093,12094,12096,12098,12100,12102],{"class":131,"line":1209},[129,12095,1999],{"class":135},[129,12097,10599],{"class":135},[129,12099,10960],{"class":139},[129,12101,185],{"class":135},[129,12103,1447],{"class":139},[129,12105,12106],{"class":131,"line":1215},[129,12107,2414],{"emptyLinePlaceholder":56},[129,12109,12110,12112,12114,12117,12119,12121,12123,12125],{"class":131,"line":1229},[129,12111,6544],{"class":139},[129,12113,1183],{"class":135},[129,12115,12116],{"class":244}," \"a = \"",[129,12118,1459],{"class":135},[129,12120,10884],{"class":139},[129,12122,1183],{"class":135},[129,12124,11484],{"class":139},[129,12126,7283],{"class":198},[129,12128,12129,12131,12133,12136,12138,12140,12142,12144],{"class":131,"line":1235},[129,12130,6544],{"class":139},[129,12132,1183],{"class":135},[129,12134,12135],{"class":244}," \"b = \"",[129,12137,1459],{"class":135},[129,12139,10897],{"class":139},[129,12141,1183],{"class":135},[129,12143,11484],{"class":139},[129,12145,7283],{"class":198},[129,12147,12148],{"class":131,"line":1326},[129,12149,2414],{"emptyLinePlaceholder":56},[129,12151,12152,12155,12157,12159],{"class":131,"line":1332},[129,12153,12154],{"class":139},"    b ",[129,12156,185],{"class":135},[129,12158,5769],{"class":188},[129,12160,1305],{"class":139},[129,12162,12163],{"class":131,"line":1344},[129,12164,2414],{"emptyLinePlaceholder":56},[129,12166,12167,12169,12171,12173,12175,12177,12179,12181],{"class":131,"line":1626},[129,12168,6544],{"class":139},[129,12170,1183],{"class":135},[129,12172,12116],{"class":244},[129,12174,1459],{"class":135},[129,12176,10884],{"class":139},[129,12178,1183],{"class":135},[129,12180,11484],{"class":139},[129,12182,12183],{"class":198},"\u002F\u002F100\n",[129,12185,12186,12188,12190,12192,12194,12196,12198,12200],{"class":131,"line":1631},[129,12187,6544],{"class":139},[129,12189,1183],{"class":135},[129,12191,12135],{"class":244},[129,12193,1459],{"class":135},[129,12195,10897],{"class":139},[129,12197,1183],{"class":135},[129,12199,11484],{"class":139},[129,12201,12183],{"class":198},[129,12203,12204],{"class":131,"line":1637},[129,12205,2414],{"emptyLinePlaceholder":56},[129,12207,12208,12210,12212,12214],{"class":131,"line":1642},[129,12209,2317],{"class":1977},[129,12211,140],{"class":139},[129,12213,2322],{"class":244},[129,12215,2733],{"class":139},[129,12217,12218],{"class":131,"line":1656},[129,12219,2414],{"emptyLinePlaceholder":56},[129,12221,12222,12224,12226],{"class":131,"line":1661},[129,12223,4104],{"class":135},[129,12225,4107],{"class":188},[129,12227,1305],{"class":139},[129,12229,12230],{"class":131,"line":1667},[129,12231,1579],{"class":139},[71,12233,12235],{"id":12234},"_62引用的注意事项","6.2引用的注意事项",[83,12237,12238],{},[86,12239,12240],{},"引用必须要初始化",[120,12242,12244],{"className":122,"code":12243,"language":124,"meta":42,"style":42},"int &b;\u002F\u002F非常错误！\n",[126,12245,12246],{"__ignoreMap":42},[129,12247,12248,12250,12252,12255],{"class":131,"line":132},[129,12249,143],{"class":135},[129,12251,10599],{"class":135},[129,12253,12254],{"class":139},"b;",[129,12256,12257],{"class":198},"\u002F\u002F非常错误！\n",[83,12259,12260],{"start":51},[86,12261,12262],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[120,12264,12266],{"className":122,"code":12265,"language":124,"meta":42,"style":42},"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",[126,12267,12268,12276,12288,12300,12308,12324,12337,12355,12373,12393,12403,12411],{"__ignoreMap":42},[129,12269,12270,12272,12274],{"class":131,"line":132},[129,12271,143],{"class":135},[129,12273,1987],{"class":1977},[129,12275,10868],{"class":139},[129,12277,12278,12280,12282,12284,12286],{"class":131,"line":51},[129,12279,1999],{"class":135},[129,12281,10884],{"class":139},[129,12283,185],{"class":135},[129,12285,2052],{"class":188},[129,12287,1305],{"class":139},[129,12289,12290,12292,12294,12296,12298],{"class":131,"line":1194},[129,12291,1999],{"class":135},[129,12293,10897],{"class":139},[129,12295,185],{"class":135},[129,12297,8965],{"class":188},[129,12299,1305],{"class":139},[129,12301,12302,12305],{"class":131,"line":1209},[129,12303,12304],{"class":198},"    \u002F\u002Fint &c;",[129,12306,12307],{"class":198}," \u002F\u002F错误，引用必须初始化\n",[129,12309,12310,12312,12314,12316,12318,12321],{"class":131,"line":1215},[129,12311,1999],{"class":135},[129,12313,10599],{"class":135},[129,12315,2960],{"class":139},[129,12317,185],{"class":135},[129,12319,12320],{"class":139}," a;",[129,12322,12323],{"class":198}," \u002F\u002F一旦初始化后，就不可以更改\n",[129,12325,12326,12329,12331,12334],{"class":131,"line":1229},[129,12327,12328],{"class":139},"    c ",[129,12330,185],{"class":135},[129,12332,12333],{"class":139}," b;",[129,12335,12336],{"class":198}," \u002F\u002F这是赋值操作，不是更改引用\n",[129,12338,12339,12341,12343,12345,12347,12349,12351,12353],{"class":131,"line":1235},[129,12340,6544],{"class":139},[129,12342,1183],{"class":135},[129,12344,12116],{"class":244},[129,12346,1459],{"class":135},[129,12348,10884],{"class":139},[129,12350,1183],{"class":135},[129,12352,11484],{"class":139},[129,12354,7268],{"class":198},[129,12356,12357,12359,12361,12363,12365,12367,12369,12371],{"class":131,"line":1326},[129,12358,6544],{"class":139},[129,12360,1183],{"class":135},[129,12362,12135],{"class":244},[129,12364,1459],{"class":135},[129,12366,10897],{"class":139},[129,12368,1183],{"class":135},[129,12370,11484],{"class":139},[129,12372,7268],{"class":198},[129,12374,12375,12377,12379,12382,12384,12387,12389,12391],{"class":131,"line":1332},[129,12376,6544],{"class":139},[129,12378,1183],{"class":135},[129,12380,12381],{"class":244}," \"c = \"",[129,12383,1459],{"class":135},[129,12385,12386],{"class":139}," c ",[129,12388,1183],{"class":135},[129,12390,11484],{"class":139},[129,12392,7268],{"class":198},[129,12394,12395,12397,12399,12401],{"class":131,"line":1344},[129,12396,2317],{"class":1977},[129,12398,140],{"class":139},[129,12400,2322],{"class":244},[129,12402,2733],{"class":139},[129,12404,12405,12407,12409],{"class":131,"line":1626},[129,12406,4104],{"class":135},[129,12408,4107],{"class":188},[129,12410,1305],{"class":139},[129,12412,12413],{"class":131,"line":1631},[129,12414,1579],{"class":139},[71,12416,12418],{"id":12417},"_63引用做函数参数","6.3引用做函数参数",[14,12420,12421],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12423,12424],{},"优点：可以简化指针修改实参",[120,12426,12428],{"className":122,"code":12427,"language":124,"meta":42,"style":42},"\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",[126,12429,12430,12435,12458,12469,12479,12488,12492,12496,12501,12523,12535,12547,12557,12561,12565,12570,12592,12602,12610,12618,12622,12626,12634,12638,12650,12662,12666,12677,12703,12707,12727,12751,12755,12765,12789,12793,12803,12807,12815],{"__ignoreMap":42},[129,12431,12432],{"class":131,"line":132},[129,12433,12434],{"class":198},"\u002F\u002F1. 值传递\n",[129,12436,12437,12439,12442,12444,12446,12448,12451,12453,12455],{"class":131,"line":51},[129,12438,5379],{"class":135},[129,12440,12441],{"class":1977}," mySwap01",[129,12443,140],{"class":139},[129,12445,143],{"class":135},[129,12447,1413],{"class":5231},[129,12449,12450],{"class":139},", ",[129,12452,143],{"class":135},[129,12454,2847],{"class":5231},[129,12456,12457],{"class":139},") {\n",[129,12459,12460,12462,12465,12467],{"class":131,"line":1194},[129,12461,1999],{"class":135},[129,12463,12464],{"class":139}," temp ",[129,12466,185],{"class":135},[129,12468,1447],{"class":139},[129,12470,12471,12474,12476],{"class":131,"line":1209},[129,12472,12473],{"class":139},"    a ",[129,12475,185],{"class":135},[129,12477,12478],{"class":139}," b;\n",[129,12480,12481,12483,12485],{"class":131,"line":1215},[129,12482,12154],{"class":139},[129,12484,185],{"class":135},[129,12486,12487],{"class":139}," temp;\n",[129,12489,12490],{"class":131,"line":1229},[129,12491,1579],{"class":139},[129,12493,12494],{"class":131,"line":1235},[129,12495,2414],{"emptyLinePlaceholder":56},[129,12497,12498],{"class":131,"line":1326},[129,12499,12500],{"class":198},"\u002F\u002F2. 地址传递\n",[129,12502,12503,12505,12508,12510,12513,12515,12517,12519,12521],{"class":131,"line":1332},[129,12504,5379],{"class":135},[129,12506,12507],{"class":1977}," mySwap02",[129,12509,140],{"class":139},[129,12511,12512],{"class":135},"int*",[129,12514,1413],{"class":5231},[129,12516,12450],{"class":139},[129,12518,12512],{"class":135},[129,12520,2847],{"class":5231},[129,12522,12457],{"class":139},[129,12524,12525,12527,12529,12531,12533],{"class":131,"line":1344},[129,12526,1999],{"class":135},[129,12528,12464],{"class":139},[129,12530,185],{"class":135},[129,12532,6533],{"class":135},[129,12534,6212],{"class":139},[129,12536,12537,12539,12541,12543,12545],{"class":131,"line":1626},[129,12538,6418],{"class":135},[129,12540,10934],{"class":139},[129,12542,185],{"class":135},[129,12544,6533],{"class":135},[129,12546,6084],{"class":139},[129,12548,12549,12551,12553,12555],{"class":131,"line":1631},[129,12550,6418],{"class":135},[129,12552,10960],{"class":139},[129,12554,185],{"class":135},[129,12556,12487],{"class":139},[129,12558,12559],{"class":131,"line":1637},[129,12560,1579],{"class":139},[129,12562,12563],{"class":131,"line":1642},[129,12564,2414],{"emptyLinePlaceholder":56},[129,12566,12567],{"class":131,"line":1656},[129,12568,12569],{"class":198},"\u002F\u002F3. 引用传递\n",[129,12571,12572,12574,12577,12579,12582,12584,12586,12588,12590],{"class":131,"line":1661},[129,12573,5379],{"class":135},[129,12575,12576],{"class":1977}," mySwap03",[129,12578,140],{"class":139},[129,12580,12581],{"class":135},"int&",[129,12583,1413],{"class":5231},[129,12585,12450],{"class":139},[129,12587,12581],{"class":135},[129,12589,2847],{"class":5231},[129,12591,12457],{"class":139},[129,12593,12594,12596,12598,12600],{"class":131,"line":1667},[129,12595,1999],{"class":135},[129,12597,12464],{"class":139},[129,12599,185],{"class":135},[129,12601,1447],{"class":139},[129,12603,12604,12606,12608],{"class":131,"line":1688},[129,12605,12473],{"class":139},[129,12607,185],{"class":135},[129,12609,12478],{"class":139},[129,12611,12612,12614,12616],{"class":131,"line":1693},[129,12613,12154],{"class":139},[129,12615,185],{"class":135},[129,12617,12487],{"class":139},[129,12619,12620],{"class":131,"line":1707},[129,12621,1579],{"class":139},[129,12623,12624],{"class":131,"line":1712},[129,12625,2414],{"emptyLinePlaceholder":56},[129,12627,12628,12630,12632],{"class":131,"line":1741},[129,12629,143],{"class":135},[129,12631,1987],{"class":1977},[129,12633,10868],{"class":139},[129,12635,12636],{"class":131,"line":1746},[129,12637,2414],{"emptyLinePlaceholder":56},[129,12639,12640,12642,12644,12646,12648],{"class":131,"line":1763},[129,12641,1999],{"class":135},[129,12643,10884],{"class":139},[129,12645,185],{"class":135},[129,12647,2052],{"class":188},[129,12649,1305],{"class":139},[129,12651,12652,12654,12656,12658,12660],{"class":131,"line":1768},[129,12653,1999],{"class":135},[129,12655,10897],{"class":139},[129,12657,185],{"class":135},[129,12659,8965],{"class":188},[129,12661,1305],{"class":139},[129,12663,12664],{"class":131,"line":1773},[129,12665,2414],{"emptyLinePlaceholder":56},[129,12667,12668,12671,12674],{"class":131,"line":1778},[129,12669,12670],{"class":1977},"    mySwap01",[129,12672,12673],{"class":139},"(a, b);",[129,12675,12676],{"class":198},"\u002F\u002F值传递，形参不会修饰实参\n",[129,12678,12679,12681,12683,12686,12688,12690,12692,12695,12697,12699,12701],{"class":131,"line":1792},[129,12680,6544],{"class":139},[129,12682,1183],{"class":135},[129,12684,12685],{"class":244}," \"a:\"",[129,12687,1459],{"class":135},[129,12689,10884],{"class":139},[129,12691,1183],{"class":135},[129,12693,12694],{"class":244}," \" b:\"",[129,12696,1459],{"class":135},[129,12698,10897],{"class":139},[129,12700,1183],{"class":135},[129,12702,8855],{"class":139},[129,12704,12705],{"class":131,"line":1797},[129,12706,2414],{"emptyLinePlaceholder":56},[129,12708,12709,12712,12714,12716,12719,12721,12724],{"class":131,"line":2591},[129,12710,12711],{"class":1977},"    mySwap02",[129,12713,140],{"class":139},[129,12715,492],{"class":135},[129,12717,12718],{"class":139},"a, ",[129,12720,492],{"class":135},[129,12722,12723],{"class":139},"b);",[129,12725,12726],{"class":198},"\u002F\u002F地址传递，形参会修饰实参\n",[129,12728,12729,12731,12733,12735,12737,12739,12741,12743,12745,12747,12749],{"class":131,"line":2605},[129,12730,6544],{"class":139},[129,12732,1183],{"class":135},[129,12734,12685],{"class":244},[129,12736,1459],{"class":135},[129,12738,10884],{"class":139},[129,12740,1183],{"class":135},[129,12742,12694],{"class":244},[129,12744,1459],{"class":135},[129,12746,10897],{"class":139},[129,12748,1183],{"class":135},[129,12750,8855],{"class":139},[129,12752,12753],{"class":131,"line":2613},[129,12754,2414],{"emptyLinePlaceholder":56},[129,12756,12757,12760,12762],{"class":131,"line":2618},[129,12758,12759],{"class":1977},"    mySwap03",[129,12761,12673],{"class":139},[129,12763,12764],{"class":198},"\u002F\u002F引用传递，形参会修饰实参\n",[129,12766,12767,12769,12771,12773,12775,12777,12779,12781,12783,12785,12787],{"class":131,"line":2624},[129,12768,6544],{"class":139},[129,12770,1183],{"class":135},[129,12772,12685],{"class":244},[129,12774,1459],{"class":135},[129,12776,10884],{"class":139},[129,12778,1183],{"class":135},[129,12780,12694],{"class":244},[129,12782,1459],{"class":135},[129,12784,10897],{"class":139},[129,12786,1183],{"class":135},[129,12788,8855],{"class":139},[129,12790,12791],{"class":131,"line":2630},[129,12792,2414],{"emptyLinePlaceholder":56},[129,12794,12795,12797,12799,12801],{"class":131,"line":2635},[129,12796,2317],{"class":1977},[129,12798,140],{"class":139},[129,12800,2322],{"class":244},[129,12802,2733],{"class":139},[129,12804,12805],{"class":131,"line":7963},[129,12806,2414],{"emptyLinePlaceholder":56},[129,12808,12809,12811,12813],{"class":131,"line":7987},[129,12810,4104],{"class":135},[129,12812,4107],{"class":188},[129,12814,1305],{"class":139},[129,12816,12817],{"class":131,"line":7992},[129,12818,1579],{"class":139},[71,12820,12822],{"id":12821},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12824,12825],{},"作用：引用是可以作为函数的返回值存在的",[14,12827,9040,12828],{},[289,12829,12830],{},"不要返回局部变量引用",[14,12832,12833],{},"用法：函数调用作为左值",[120,12835,12837],{"className":9956,"code":12836,"language":9958,"meta":42,"style":42},"\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",[126,12838,12839,12844,12852,12867,12873,12877,12881,12886,12894,12911,12917,12921,12925,12933,12937,12942,12956,12976,12995,12999,13004,13017,13037,13055,13059,13075,13079,13098,13116,13120,13130,13134,13142],{"__ignoreMap":42},[129,12840,12841],{"class":131,"line":132},[129,12842,12843],{"class":198},"\u002F\u002F返回局部变量引用\n",[129,12845,12846,12848,12850],{"class":131,"line":51},[129,12847,12581],{"class":135},[129,12849,5603],{"class":1977},[129,12851,10868],{"class":139},[129,12853,12854,12856,12858,12860,12862,12864],{"class":131,"line":1194},[129,12855,1999],{"class":135},[129,12857,10884],{"class":139},[129,12859,185],{"class":135},[129,12861,2052],{"class":188},[129,12863,195],{"class":139},[129,12865,12866],{"class":198}," \u002F\u002F局部变量\n",[129,12868,12869,12871],{"class":131,"line":1209},[129,12870,4104],{"class":135},[129,12872,1447],{"class":139},[129,12874,12875],{"class":131,"line":1215},[129,12876,1579],{"class":139},[129,12878,12879],{"class":131,"line":1229},[129,12880,2414],{"emptyLinePlaceholder":56},[129,12882,12883],{"class":131,"line":1235},[129,12884,12885],{"class":198},"\u002F\u002F返回静态变量引用\n",[129,12887,12888,12890,12892],{"class":131,"line":1326},[129,12889,12581],{"class":135},[129,12891,5672],{"class":1977},[129,12893,10868],{"class":139},[129,12895,12896,12898,12900,12902,12904,12906,12908],{"class":131,"line":1332},[129,12897,11035],{"class":135},[129,12899,2396],{"class":135},[129,12901,10884],{"class":139},[129,12903,185],{"class":135},[129,12905,8965],{"class":188},[129,12907,195],{"class":139},[129,12909,12910],{"class":198},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[129,12912,12913,12915],{"class":131,"line":1344},[129,12914,4104],{"class":135},[129,12916,1447],{"class":139},[129,12918,12919],{"class":131,"line":1626},[129,12920,1579],{"class":139},[129,12922,12923],{"class":131,"line":1631},[129,12924,2414],{"emptyLinePlaceholder":56},[129,12926,12927,12929,12931],{"class":131,"line":1637},[129,12928,143],{"class":135},[129,12930,1987],{"class":1977},[129,12932,10868],{"class":139},[129,12934,12935],{"class":131,"line":1642},[129,12936,2414],{"emptyLinePlaceholder":56},[129,12938,12939],{"class":131,"line":1656},[129,12940,12941],{"class":198},"    \u002F\u002F不能返回局部变量的引用\n",[129,12943,12944,12947,12950,12952,12954],{"class":131,"line":1661},[129,12945,12946],{"class":135},"    int&",[129,12948,12949],{"class":139}," ref ",[129,12951,185],{"class":135},[129,12953,5603],{"class":1977},[129,12955,5651],{"class":139},[129,12957,12958,12960,12962,12965,12967,12969,12971,12973],{"class":131,"line":1667},[129,12959,6544],{"class":139},[129,12961,1183],{"class":135},[129,12963,12964],{"class":244}," \"ref = \"",[129,12966,1459],{"class":135},[129,12968,12949],{"class":139},[129,12970,1183],{"class":135},[129,12972,11484],{"class":139},[129,12974,12975],{"class":198},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[129,12977,12978,12980,12982,12984,12986,12988,12990,12992],{"class":131,"line":1688},[129,12979,6544],{"class":139},[129,12981,1183],{"class":135},[129,12983,12964],{"class":244},[129,12985,1459],{"class":135},[129,12987,12949],{"class":139},[129,12989,1183],{"class":135},[129,12991,11484],{"class":139},[129,12993,12994],{"class":198},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[129,12996,12997],{"class":131,"line":1693},[129,12998,2414],{"emptyLinePlaceholder":56},[129,13000,13001],{"class":131,"line":1707},[129,13002,13003],{"class":198},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[129,13005,13006,13008,13011,13013,13015],{"class":131,"line":1712},[129,13007,12946],{"class":135},[129,13009,13010],{"class":139}," ref2 ",[129,13012,185],{"class":135},[129,13014,5672],{"class":1977},[129,13016,5651],{"class":139},[129,13018,13019,13021,13023,13026,13028,13030,13032,13034],{"class":131,"line":1741},[129,13020,6544],{"class":139},[129,13022,1183],{"class":135},[129,13024,13025],{"class":244}," \"ref2 = \"",[129,13027,1459],{"class":135},[129,13029,13010],{"class":139},[129,13031,1183],{"class":135},[129,13033,11484],{"class":139},[129,13035,13036],{"class":198}," \u002F\u002F20\n",[129,13038,13039,13041,13043,13045,13047,13049,13051,13053],{"class":131,"line":1746},[129,13040,6544],{"class":139},[129,13042,1183],{"class":135},[129,13044,13025],{"class":244},[129,13046,1459],{"class":135},[129,13048,13010],{"class":139},[129,13050,1183],{"class":135},[129,13052,11484],{"class":139},[129,13054,13036],{"class":198},[129,13056,13057],{"class":131,"line":1763},[129,13058,2414],{"emptyLinePlaceholder":56},[129,13060,13061,13063,13066,13068,13070,13072],{"class":131,"line":1768},[129,13062,5717],{"class":1977},[129,13064,13065],{"class":139},"() ",[129,13067,185],{"class":135},[129,13069,3013],{"class":188},[129,13071,195],{"class":139},[129,13073,13074],{"class":198},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[129,13076,13077],{"class":131,"line":1773},[129,13078,2414],{"emptyLinePlaceholder":56},[129,13080,13081,13083,13085,13087,13089,13091,13093,13095],{"class":131,"line":1778},[129,13082,6544],{"class":139},[129,13084,1183],{"class":135},[129,13086,13025],{"class":244},[129,13088,1459],{"class":135},[129,13090,13010],{"class":139},[129,13092,1183],{"class":135},[129,13094,11484],{"class":139},[129,13096,13097],{"class":198}," \u002F\u002F1000\n",[129,13099,13100,13102,13104,13106,13108,13110,13112,13114],{"class":131,"line":1792},[129,13101,6544],{"class":139},[129,13103,1183],{"class":135},[129,13105,13025],{"class":244},[129,13107,1459],{"class":135},[129,13109,13010],{"class":139},[129,13111,1183],{"class":135},[129,13113,11484],{"class":139},[129,13115,13097],{"class":198},[129,13117,13118],{"class":131,"line":1797},[129,13119,2414],{"emptyLinePlaceholder":56},[129,13121,13122,13124,13126,13128],{"class":131,"line":2591},[129,13123,2317],{"class":1977},[129,13125,140],{"class":139},[129,13127,2322],{"class":244},[129,13129,2733],{"class":139},[129,13131,13132],{"class":131,"line":2605},[129,13133,2414],{"emptyLinePlaceholder":56},[129,13135,13136,13138,13140],{"class":131,"line":2613},[129,13137,4104],{"class":135},[129,13139,4107],{"class":188},[129,13141,1305],{"class":139},[129,13143,13144],{"class":131,"line":2618},[129,13145,1579],{"class":139},[71,13147,13149],{"id":13148},"_65引用的本质","6.5引用的本质",[14,13151,13152,13153],{},"本质：",[289,13154,13155],{},"引用的本质在c++内部实现是一个指针常量.",[120,13157,13159],{"className":122,"code":13158,"language":124,"meta":42,"style":42},"\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",[126,13160,13161,13166,13182,13196,13200,13209,13221,13226,13231,13242,13255,13259,13275,13292,13296,13304,13312],{"__ignoreMap":42},[129,13162,13163],{"class":131,"line":132},[129,13164,13165],{"class":198},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[129,13167,13168,13170,13172,13174,13176,13179],{"class":131,"line":51},[129,13169,5379],{"class":135},[129,13171,11400],{"class":1977},[129,13173,140],{"class":139},[129,13175,12581],{"class":135},[129,13177,13178],{"class":5231}," ref",[129,13180,13181],{"class":139},"){\n",[129,13183,13184,13187,13189,13191,13193],{"class":131,"line":1194},[129,13185,13186],{"class":139},"    ref ",[129,13188,185],{"class":135},[129,13190,5769],{"class":188},[129,13192,195],{"class":139},[129,13194,13195],{"class":198}," \u002F\u002F ref是引用，转换为*ref = 100\n",[129,13197,13198],{"class":131,"line":1209},[129,13199,1579],{"class":139},[129,13201,13202,13204,13206],{"class":131,"line":1215},[129,13203,143],{"class":135},[129,13205,1987],{"class":1977},[129,13207,13208],{"class":139},"(){\n",[129,13210,13211,13213,13215,13217,13219],{"class":131,"line":1229},[129,13212,1999],{"class":135},[129,13214,10884],{"class":139},[129,13216,185],{"class":135},[129,13218,2052],{"class":188},[129,13220,1305],{"class":139},[129,13222,13223],{"class":131,"line":1235},[129,13224,13225],{"class":139},"    \n",[129,13227,13228],{"class":131,"line":1326},[129,13229,13230],{"class":198},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[129,13232,13233,13235,13237,13239],{"class":131,"line":1332},[129,13234,12946],{"class":135},[129,13236,12949],{"class":139},[129,13238,185],{"class":135},[129,13240,13241],{"class":139}," a; \n",[129,13243,13244,13246,13248,13250,13252],{"class":131,"line":1344},[129,13245,13186],{"class":139},[129,13247,185],{"class":135},[129,13249,8965],{"class":188},[129,13251,195],{"class":139},[129,13253,13254],{"class":198}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[129,13256,13257],{"class":131,"line":1626},[129,13258,13225],{"class":139},[129,13260,13261,13263,13265,13267,13269,13271,13273],{"class":131,"line":1631},[129,13262,6544],{"class":139},[129,13264,1183],{"class":135},[129,13266,12685],{"class":244},[129,13268,1459],{"class":135},[129,13270,10884],{"class":139},[129,13272,1183],{"class":135},[129,13274,8855],{"class":139},[129,13276,13277,13279,13281,13284,13286,13288,13290],{"class":131,"line":1637},[129,13278,6544],{"class":139},[129,13280,1183],{"class":135},[129,13282,13283],{"class":244}," \"ref:\"",[129,13285,1459],{"class":135},[129,13287,12949],{"class":139},[129,13289,1183],{"class":135},[129,13291,8855],{"class":139},[129,13293,13294],{"class":131,"line":1642},[129,13295,13225],{"class":139},[129,13297,13298,13301],{"class":131,"line":1656},[129,13299,13300],{"class":1977},"    func",[129,13302,13303],{"class":139},"(a);\n",[129,13305,13306,13308,13310],{"class":131,"line":1661},[129,13307,4104],{"class":135},[129,13309,4107],{"class":188},[129,13311,1305],{"class":139},[129,13313,13314],{"class":131,"line":1667},[129,13315,1579],{"class":139},[14,13317,11347],{},[83,13319,13320,13323],{},[86,13321,13322],{},"引用的本质，就是一个指针常量",[86,13324,13325],{},"引用一旦初始化，就不可以发生改变",[71,13327,13329],{"id":13328},"_66常量引用","6.6常量引用",[14,13331,13332],{},"作用：常量引用主要用来修饰形参",[14,13334,13335,13336,13339],{},"在函数形参列表中，可以加",[289,13337,13338],{},"const修饰形参","，防止形参改变实参",[120,13341,13343],{"className":122,"code":13342,"language":124,"meta":42,"style":42},"\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",[126,13344,13345,13350,13355,13374,13379,13392,13396,13400,13408,13412,13417,13422,13436,13440,13448,13460,13464,13469,13481,13488,13492,13502,13506,13514],{"__ignoreMap":42},[129,13346,13347],{"class":131,"line":132},[129,13348,13349],{"class":198},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[129,13351,13352],{"class":131,"line":51},[129,13353,13354],{"class":198},"\u002F\u002F加上const就不能修改实参的\n",[129,13356,13357,13359,13362,13364,13366,13369,13372],{"class":131,"line":1194},[129,13358,5379],{"class":135},[129,13360,13361],{"class":1977}," showValue",[129,13363,140],{"class":139},[129,13365,6807],{"class":135},[129,13367,13368],{"class":135}," int&",[129,13370,13371],{"class":5231}," v",[129,13373,12457],{"class":139},[129,13375,13376],{"class":131,"line":1209},[129,13377,13378],{"class":198},"    \u002F\u002Fv += 100;\n",[129,13380,13381,13383,13385,13388,13390],{"class":131,"line":1215},[129,13382,6544],{"class":139},[129,13384,1183],{"class":135},[129,13386,13387],{"class":139}," v ",[129,13389,1183],{"class":135},[129,13391,8855],{"class":139},[129,13393,13394],{"class":131,"line":1229},[129,13395,1579],{"class":139},[129,13397,13398],{"class":131,"line":1235},[129,13399,2414],{"emptyLinePlaceholder":56},[129,13401,13402,13404,13406],{"class":131,"line":1326},[129,13403,143],{"class":135},[129,13405,1987],{"class":1977},[129,13407,10868],{"class":139},[129,13409,13410],{"class":131,"line":1332},[129,13411,2414],{"emptyLinePlaceholder":56},[129,13413,13414],{"class":131,"line":1344},[129,13415,13416],{"class":198},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[129,13418,13419],{"class":131,"line":1626},[129,13420,13421],{"class":198},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[129,13423,13424,13426,13428,13430,13432,13434],{"class":131,"line":1631},[129,13425,11236],{"class":135},[129,13427,13368],{"class":135},[129,13429,12949],{"class":139},[129,13431,185],{"class":135},[129,13433,2052],{"class":188},[129,13435,1305],{"class":139},[129,13437,13438],{"class":131,"line":1637},[129,13439,2414],{"emptyLinePlaceholder":56},[129,13441,13442,13445],{"class":131,"line":1642},[129,13443,13444],{"class":198},"    \u002F\u002Fref = 100;",[129,13446,13447],{"class":198},"  \u002F\u002F加入const后不可以修改变量\n",[129,13449,13450,13452,13454,13456,13458],{"class":131,"line":1656},[129,13451,6544],{"class":139},[129,13453,1183],{"class":135},[129,13455,12949],{"class":139},[129,13457,1183],{"class":135},[129,13459,8855],{"class":139},[129,13461,13462],{"class":131,"line":1661},[129,13463,2414],{"emptyLinePlaceholder":56},[129,13465,13466],{"class":131,"line":1667},[129,13467,13468],{"class":198},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[129,13470,13471,13473,13475,13477,13479],{"class":131,"line":1688},[129,13472,1999],{"class":135},[129,13474,10884],{"class":139},[129,13476,185],{"class":135},[129,13478,2052],{"class":188},[129,13480,1305],{"class":139},[129,13482,13483,13486],{"class":131,"line":1693},[129,13484,13485],{"class":1977},"    showValue",[129,13487,13303],{"class":139},[129,13489,13490],{"class":131,"line":1707},[129,13491,2414],{"emptyLinePlaceholder":56},[129,13493,13494,13496,13498,13500],{"class":131,"line":1712},[129,13495,2317],{"class":1977},[129,13497,140],{"class":139},[129,13499,2322],{"class":244},[129,13501,2733],{"class":139},[129,13503,13504],{"class":131,"line":1741},[129,13505,2414],{"emptyLinePlaceholder":56},[129,13507,13508,13510,13512],{"class":131,"line":1746},[129,13509,4104],{"class":135},[129,13511,4107],{"class":188},[129,13513,1305],{"class":139},[129,13515,13516],{"class":131,"line":1763},[129,13517,1579],{"class":139},[5141,13519,13520],{},"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":42,"searchDepth":51,"depth":51,"links":13522},[13523,13524,13525,13526,13527,13528],{"id":12055,"depth":51,"text":12056},{"id":12234,"depth":51,"text":12235},{"id":12417,"depth":51,"text":12418},{"id":12821,"depth":51,"text":12822},{"id":13148,"depth":51,"text":13149},{"id":13328,"depth":51,"text":13329},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12047,"description":42},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13535,"title":13536,"body":13537,"description":42,"extension":54,"meta":14618,"navigation":56,"path":14619,"seo":14620,"stem":14621,"__hash__":14622},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13538,"toc":14610},[13539,13542,13546,13549,13554,13786,13788,13799,13803,13806,13814,13918,13921,13925,13928,13932,13935,13940,13962,13968,14295,14298,14302,14310,14607],[10,13540,13536],{"id":13541},"_7函数高级部分",[71,13543,13545],{"id":13544},"_71函数默认参数","7.1函数默认参数",[14,13547,13548],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13550,5196,13551],{},[126,13552,13553],{}," 返回值类型  函数名 （参数= 默认值）{}",[120,13555,13557],{"className":122,"code":13556,"language":124,"meta":42,"style":42},"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",[126,13558,13559,13594,13609,13613,13617,13622,13627,13656,13676,13686,13690,13694,13702,13706,13734,13756,13760,13770,13774,13782],{"__ignoreMap":42},[129,13560,13561,13563,13565,13567,13569,13571,13573,13575,13577,13580,13582,13584,13586,13588,13590,13592],{"class":131,"line":132},[129,13562,143],{"class":135},[129,13564,11400],{"class":1977},[129,13566,140],{"class":139},[129,13568,143],{"class":135},[129,13570,1413],{"class":5231},[129,13572,12450],{"class":139},[129,13574,143],{"class":135},[129,13576,2847],{"class":5231},[129,13578,13579],{"class":135}," =",[129,13581,2052],{"class":188},[129,13583,12450],{"class":139},[129,13585,143],{"class":135},[129,13587,2863],{"class":5231},[129,13589,13579],{"class":135},[129,13591,2052],{"class":188},[129,13593,12457],{"class":139},[129,13595,13596,13598,13600,13602,13604,13606],{"class":131,"line":51},[129,13597,4104],{"class":135},[129,13599,10884],{"class":139},[129,13601,620],{"class":135},[129,13603,10897],{"class":139},[129,13605,620],{"class":135},[129,13607,13608],{"class":139}," c;\n",[129,13610,13611],{"class":131,"line":1194},[129,13612,1579],{"class":139},[129,13614,13615],{"class":131,"line":1209},[129,13616,2414],{"emptyLinePlaceholder":56},[129,13618,13619],{"class":131,"line":1215},[129,13620,13621],{"class":198},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[129,13623,13624],{"class":131,"line":1229},[129,13625,13626],{"class":198},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[129,13628,13629,13631,13634,13636,13638,13640,13642,13644,13646,13648,13650,13652,13654],{"class":131,"line":1235},[129,13630,143],{"class":135},[129,13632,13633],{"class":1977}," func2",[129,13635,140],{"class":139},[129,13637,143],{"class":135},[129,13639,1413],{"class":5231},[129,13641,13579],{"class":135},[129,13643,2052],{"class":188},[129,13645,12450],{"class":139},[129,13647,143],{"class":135},[129,13649,2847],{"class":5231},[129,13651,13579],{"class":135},[129,13653,2052],{"class":188},[129,13655,2733],{"class":139},[129,13657,13658,13660,13662,13664,13666,13668,13670,13672,13674],{"class":131,"line":1326},[129,13659,143],{"class":135},[129,13661,13633],{"class":1977},[129,13663,140],{"class":139},[129,13665,143],{"class":135},[129,13667,1413],{"class":5231},[129,13669,12450],{"class":139},[129,13671,143],{"class":135},[129,13673,2847],{"class":5231},[129,13675,12457],{"class":139},[129,13677,13678,13680,13682,13684],{"class":131,"line":1332},[129,13679,4104],{"class":135},[129,13681,10884],{"class":139},[129,13683,620],{"class":135},[129,13685,12478],{"class":139},[129,13687,13688],{"class":131,"line":1344},[129,13689,1579],{"class":139},[129,13691,13692],{"class":131,"line":1626},[129,13693,2414],{"emptyLinePlaceholder":56},[129,13695,13696,13698,13700],{"class":131,"line":1631},[129,13697,143],{"class":135},[129,13699,1987],{"class":1977},[129,13701,10868],{"class":139},[129,13703,13704],{"class":131,"line":1637},[129,13705,2414],{"emptyLinePlaceholder":56},[129,13707,13708,13710,13712,13715,13717,13719,13721,13723,13725,13727,13730,13732],{"class":131,"line":1642},[129,13709,6544],{"class":139},[129,13711,1183],{"class":135},[129,13713,13714],{"class":244}," \"ret = \"",[129,13716,1459],{"class":135},[129,13718,11400],{"class":1977},[129,13720,140],{"class":139},[129,13722,839],{"class":188},[129,13724,12450],{"class":139},[129,13726,839],{"class":188},[129,13728,13729],{"class":139},") ",[129,13731,1183],{"class":135},[129,13733,8855],{"class":139},[129,13735,13736,13738,13740,13742,13744,13746,13748,13750,13752,13754],{"class":131,"line":1656},[129,13737,6544],{"class":139},[129,13739,1183],{"class":135},[129,13741,13714],{"class":244},[129,13743,1459],{"class":135},[129,13745,11400],{"class":1977},[129,13747,140],{"class":139},[129,13749,450],{"class":188},[129,13751,13729],{"class":139},[129,13753,1183],{"class":135},[129,13755,8855],{"class":139},[129,13757,13758],{"class":131,"line":1661},[129,13759,2414],{"emptyLinePlaceholder":56},[129,13761,13762,13764,13766,13768],{"class":131,"line":1667},[129,13763,2317],{"class":1977},[129,13765,140],{"class":139},[129,13767,2322],{"class":244},[129,13769,2733],{"class":139},[129,13771,13772],{"class":131,"line":1688},[129,13773,2414],{"emptyLinePlaceholder":56},[129,13775,13776,13778,13780],{"class":131,"line":1693},[129,13777,4104],{"class":135},[129,13779,4107],{"class":188},[129,13781,1305],{"class":139},[129,13783,13784],{"class":131,"line":1707},[129,13785,1579],{"class":139},[14,13787,11347],{},[83,13789,13790,13793,13796],{},[86,13791,13792],{},"我传就用我；没传就用你",[86,13794,13795],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[86,13797,13798],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[71,13800,13802],{"id":13801},"_72函数的占位参数","7.2函数的占位参数",[14,13804,13805],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13807,13808,13810,13811],{},[289,13809,5196],{}," ",[126,13812,13813],{},"返回值类型 函数名 (数据类型){}",[120,13815,13817],{"className":122,"code":13816,"language":124,"meta":42,"style":42},"\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",[126,13818,13819,13824,13842,13855,13859,13867,13871,13888,13892,13902,13906,13914],{"__ignoreMap":42},[129,13820,13821],{"class":131,"line":132},[129,13822,13823],{"class":198},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[129,13825,13826,13828,13830,13832,13834,13836,13838,13840],{"class":131,"line":51},[129,13827,5379],{"class":135},[129,13829,11400],{"class":1977},[129,13831,140],{"class":139},[129,13833,143],{"class":135},[129,13835,1413],{"class":5231},[129,13837,12450],{"class":139},[129,13839,143],{"class":135},[129,13841,12457],{"class":139},[129,13843,13844,13846,13848,13851,13853],{"class":131,"line":1194},[129,13845,6544],{"class":139},[129,13847,1183],{"class":135},[129,13849,13850],{"class":244}," \"this is func\"",[129,13852,1459],{"class":135},[129,13854,8855],{"class":139},[129,13856,13857],{"class":131,"line":1209},[129,13858,1579],{"class":139},[129,13860,13861,13863,13865],{"class":131,"line":1215},[129,13862,143],{"class":135},[129,13864,1987],{"class":1977},[129,13866,10868],{"class":139},[129,13868,13869],{"class":131,"line":1229},[129,13870,2414],{"emptyLinePlaceholder":56},[129,13872,13873,13875,13877,13879,13881,13883,13885],{"class":131,"line":1235},[129,13874,13300],{"class":1977},[129,13876,140],{"class":139},[129,13878,585],{"class":188},[129,13880,517],{"class":139},[129,13882,585],{"class":188},[129,13884,5981],{"class":139},[129,13886,13887],{"class":198}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[129,13889,13890],{"class":131,"line":1326},[129,13891,2414],{"emptyLinePlaceholder":56},[129,13893,13894,13896,13898,13900],{"class":131,"line":1332},[129,13895,2317],{"class":1977},[129,13897,140],{"class":139},[129,13899,2322],{"class":244},[129,13901,2733],{"class":139},[129,13903,13904],{"class":131,"line":1344},[129,13905,2414],{"emptyLinePlaceholder":56},[129,13907,13908,13910,13912],{"class":131,"line":1626},[129,13909,4104],{"class":135},[129,13911,4107],{"class":188},[129,13913,1305],{"class":139},[129,13915,13916],{"class":131,"line":1631},[129,13917,1579],{"class":139},[14,13919,13920],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[71,13922,13924],{"id":13923},"_73函数重载","7.3函数重载",[14,13926,13927],{},"意思是函数名是可以相同的",[100,13929,13931],{"id":13930},"_731基本语法","7.3.1基本语法",[14,13933,13934],{},"作用：函数名可以相同，提高复用性",[14,13936,13937],{},[289,13938,13939],{},"函数重载满足条件：",[1146,13941,13942,13945,13948],{},[86,13943,13944],{},"同一个作用域下",[86,13946,13947],{},"函数名称相同",[86,13949,13950,13951,13954,13955,13958,13959],{},"函数参数",[289,13952,13953],{},"类型不同","  或者 ",[289,13956,13957],{},"个数不同"," 或者 ",[289,13960,13961],{},"顺序不同",[14,13963,13964,13967],{},[289,13965,13966],{},"注意:","  函数的返回值不可以作为函数重载的条件",[120,13969,13971],{"className":9956,"code":13970,"language":9958,"meta":42,"style":42},"\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",[126,13972,13973,13978,13986,13990,14003,14007,14021,14025,14038,14042,14057,14061,14074,14078,14099,14103,14116,14120,14140,14144,14157,14161,14165,14170,14175,14180,14185,14190,14194,14198,14206,14210,14216,14226,14236,14250,14265,14269,14279,14283,14291],{"__ignoreMap":42},[129,13974,13975],{"class":131,"line":132},[129,13976,13977],{"class":198},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[129,13979,13980,13982,13984],{"class":131,"line":51},[129,13981,5379],{"class":135},[129,13983,11400],{"class":1977},[129,13985,1990],{"class":139},[129,13987,13988],{"class":131,"line":1194},[129,13989,1560],{"class":139},[129,13991,13992,13994,13996,13999,14001],{"class":131,"line":1209},[129,13993,6544],{"class":139},[129,13995,1183],{"class":135},[129,13997,13998],{"class":244}," \"func 的调用！\"",[129,14000,1459],{"class":135},[129,14002,8855],{"class":139},[129,14004,14005],{"class":131,"line":1215},[129,14006,1579],{"class":139},[129,14008,14009,14011,14013,14015,14017,14019],{"class":131,"line":1229},[129,14010,5379],{"class":135},[129,14012,11400],{"class":1977},[129,14014,140],{"class":139},[129,14016,143],{"class":135},[129,14018,1413],{"class":5231},[129,14020,146],{"class":139},[129,14022,14023],{"class":131,"line":1235},[129,14024,1560],{"class":139},[129,14026,14027,14029,14031,14034,14036],{"class":131,"line":1326},[129,14028,6544],{"class":139},[129,14030,1183],{"class":135},[129,14032,14033],{"class":244}," \"func (int a) 的调用！\"",[129,14035,1459],{"class":135},[129,14037,8855],{"class":139},[129,14039,14040],{"class":131,"line":1332},[129,14041,1579],{"class":139},[129,14043,14044,14046,14048,14050,14053,14055],{"class":131,"line":1344},[129,14045,5379],{"class":135},[129,14047,11400],{"class":1977},[129,14049,140],{"class":139},[129,14051,14052],{"class":135},"double",[129,14054,1413],{"class":5231},[129,14056,146],{"class":139},[129,14058,14059],{"class":131,"line":1626},[129,14060,1560],{"class":139},[129,14062,14063,14065,14067,14070,14072],{"class":131,"line":1631},[129,14064,6544],{"class":139},[129,14066,1183],{"class":135},[129,14068,14069],{"class":244}," \"func (double a)的调用！\"",[129,14071,1459],{"class":135},[129,14073,8855],{"class":139},[129,14075,14076],{"class":131,"line":1637},[129,14077,1579],{"class":139},[129,14079,14080,14082,14084,14086,14088,14090,14093,14095,14097],{"class":131,"line":1642},[129,14081,5379],{"class":135},[129,14083,11400],{"class":1977},[129,14085,140],{"class":139},[129,14087,143],{"class":135},[129,14089,1413],{"class":5231},[129,14091,14092],{"class":139}," ,",[129,14094,14052],{"class":135},[129,14096,2847],{"class":5231},[129,14098,146],{"class":139},[129,14100,14101],{"class":131,"line":1656},[129,14102,1560],{"class":139},[129,14104,14105,14107,14109,14112,14114],{"class":131,"line":1661},[129,14106,6544],{"class":139},[129,14108,1183],{"class":135},[129,14110,14111],{"class":244}," \"func (int a ,double b) 的调用！\"",[129,14113,1459],{"class":135},[129,14115,8855],{"class":139},[129,14117,14118],{"class":131,"line":1667},[129,14119,1579],{"class":139},[129,14121,14122,14124,14126,14128,14130,14132,14134,14136,14138],{"class":131,"line":1688},[129,14123,5379],{"class":135},[129,14125,11400],{"class":1977},[129,14127,140],{"class":139},[129,14129,14052],{"class":135},[129,14131,1413],{"class":5231},[129,14133,14092],{"class":139},[129,14135,143],{"class":135},[129,14137,2847],{"class":5231},[129,14139,146],{"class":139},[129,14141,14142],{"class":131,"line":1693},[129,14143,1560],{"class":139},[129,14145,14146,14148,14150,14153,14155],{"class":131,"line":1707},[129,14147,6544],{"class":139},[129,14149,1183],{"class":135},[129,14151,14152],{"class":244}," \"func (double a ,int b)的调用！\"",[129,14154,1459],{"class":135},[129,14156,8855],{"class":139},[129,14158,14159],{"class":131,"line":1712},[129,14160,1579],{"class":139},[129,14162,14163],{"class":131,"line":1741},[129,14164,2414],{"emptyLinePlaceholder":56},[129,14166,14167],{"class":131,"line":1746},[129,14168,14169],{"class":198},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[129,14171,14172],{"class":131,"line":1763},[129,14173,14174],{"class":198},"\u002F\u002Fint func(double a, int b)\n",[129,14176,14177],{"class":131,"line":1768},[129,14178,14179],{"class":198},"\u002F\u002F{\n",[129,14181,14182],{"class":131,"line":1773},[129,14183,14184],{"class":198},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[129,14186,14187],{"class":131,"line":1778},[129,14188,14189],{"class":198},"\u002F\u002F}\n",[129,14191,14192],{"class":131,"line":1792},[129,14193,2414],{"emptyLinePlaceholder":56},[129,14195,14196],{"class":131,"line":1797},[129,14197,2414],{"emptyLinePlaceholder":56},[129,14199,14200,14202,14204],{"class":131,"line":2591},[129,14201,143],{"class":135},[129,14203,1987],{"class":1977},[129,14205,10868],{"class":139},[129,14207,14208],{"class":131,"line":2605},[129,14209,2414],{"emptyLinePlaceholder":56},[129,14211,14212,14214],{"class":131,"line":2613},[129,14213,13300],{"class":1977},[129,14215,5651],{"class":139},[129,14217,14218,14220,14222,14224],{"class":131,"line":2618},[129,14219,13300],{"class":1977},[129,14221,140],{"class":139},[129,14223,585],{"class":188},[129,14225,2733],{"class":139},[129,14227,14228,14230,14232,14234],{"class":131,"line":2624},[129,14229,13300],{"class":1977},[129,14231,140],{"class":139},[129,14233,189],{"class":188},[129,14235,2733],{"class":139},[129,14237,14238,14240,14242,14244,14246,14248],{"class":131,"line":2630},[129,14239,13300],{"class":1977},[129,14241,140],{"class":139},[129,14243,585],{"class":188},[129,14245,517],{"class":139},[129,14247,189],{"class":188},[129,14249,2733],{"class":139},[129,14251,14252,14254,14256,14258,14261,14263],{"class":131,"line":2635},[129,14253,13300],{"class":1977},[129,14255,140],{"class":139},[129,14257,189],{"class":188},[129,14259,14260],{"class":139}," , ",[129,14262,585],{"class":188},[129,14264,2733],{"class":139},[129,14266,14267],{"class":131,"line":7963},[129,14268,13225],{"class":139},[129,14270,14271,14273,14275,14277],{"class":131,"line":7987},[129,14272,2317],{"class":1977},[129,14274,140],{"class":139},[129,14276,2322],{"class":244},[129,14278,2733],{"class":139},[129,14280,14281],{"class":131,"line":7992},[129,14282,2414],{"emptyLinePlaceholder":56},[129,14284,14285,14287,14289],{"class":131,"line":7998},[129,14286,4104],{"class":135},[129,14288,4107],{"class":188},[129,14290,1305],{"class":139},[129,14292,14293],{"class":131,"line":8025},[129,14294,1579],{"class":139},[14,14296,14297],{},"重点：函数返回值不可以作为函数重载条件！",[100,14299,14301],{"id":14300},"_732注意事项","7.3.2注意事项",[1146,14303,14304,14307],{},[86,14305,14306],{},"引用作为重载条件!!!",[86,14308,14309],{},"函数重载碰到函数默认参数",[120,14311,14313],{"className":122,"code":14312,"language":124,"meta":42,"style":42},"\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",[126,14314,14315,14320,14325,14329,14345,14349,14362,14366,14370,14388,14392,14405,14409,14413,14417,14422,14426,14450,14454,14467,14471,14475,14489,14493,14506,14510,14514,14522,14526,14538,14548,14561,14565,14569,14577,14581,14591,14595,14603],{"__ignoreMap":42},[129,14316,14317],{"class":131,"line":132},[129,14318,14319],{"class":198},"\u002F\u002F函数重载注意事项\n",[129,14321,14322],{"class":131,"line":51},[129,14323,14324],{"class":198},"\u002F\u002F1、引用作为重载条件\n",[129,14326,14327],{"class":131,"line":1194},[129,14328,2414],{"emptyLinePlaceholder":56},[129,14330,14331,14333,14335,14337,14339,14341,14343],{"class":131,"line":1209},[129,14332,5379],{"class":135},[129,14334,11400],{"class":1977},[129,14336,140],{"class":139},[129,14338,143],{"class":135},[129,14340,10599],{"class":135},[129,14342,20],{"class":5231},[129,14344,146],{"class":139},[129,14346,14347],{"class":131,"line":1215},[129,14348,1560],{"class":139},[129,14350,14351,14353,14355,14358,14360],{"class":131,"line":1229},[129,14352,6544],{"class":139},[129,14354,1183],{"class":135},[129,14356,14357],{"class":244}," \"func (int &a) 调用 \"",[129,14359,1459],{"class":135},[129,14361,8855],{"class":139},[129,14363,14364],{"class":131,"line":1235},[129,14365,1579],{"class":139},[129,14367,14368],{"class":131,"line":1326},[129,14369,2414],{"emptyLinePlaceholder":56},[129,14371,14372,14374,14376,14378,14380,14382,14384,14386],{"class":131,"line":1332},[129,14373,5379],{"class":135},[129,14375,11400],{"class":1977},[129,14377,140],{"class":139},[129,14379,6807],{"class":135},[129,14381,2396],{"class":135},[129,14383,10599],{"class":135},[129,14385,20],{"class":5231},[129,14387,146],{"class":139},[129,14389,14390],{"class":131,"line":1344},[129,14391,1560],{"class":139},[129,14393,14394,14396,14398,14401,14403],{"class":131,"line":1626},[129,14395,6544],{"class":139},[129,14397,1183],{"class":135},[129,14399,14400],{"class":244}," \"func (const int &a) 调用 \"",[129,14402,1459],{"class":135},[129,14404,8855],{"class":139},[129,14406,14407],{"class":131,"line":1631},[129,14408,1579],{"class":139},[129,14410,14411],{"class":131,"line":1637},[129,14412,2414],{"emptyLinePlaceholder":56},[129,14414,14415],{"class":131,"line":1642},[129,14416,2414],{"emptyLinePlaceholder":56},[129,14418,14419],{"class":131,"line":1656},[129,14420,14421],{"class":198},"\u002F\u002F2、函数重载碰到函数默认参数\n",[129,14423,14424],{"class":131,"line":1661},[129,14425,2414],{"emptyLinePlaceholder":56},[129,14427,14428,14430,14432,14434,14436,14438,14440,14442,14444,14446,14448],{"class":131,"line":1667},[129,14429,5379],{"class":135},[129,14431,13633],{"class":1977},[129,14433,140],{"class":139},[129,14435,143],{"class":135},[129,14437,1413],{"class":5231},[129,14439,12450],{"class":139},[129,14441,143],{"class":135},[129,14443,2847],{"class":5231},[129,14445,13579],{"class":135},[129,14447,2052],{"class":188},[129,14449,146],{"class":139},[129,14451,14452],{"class":131,"line":1688},[129,14453,1560],{"class":139},[129,14455,14456,14458,14460,14463,14465],{"class":131,"line":1693},[129,14457,6544],{"class":139},[129,14459,1183],{"class":135},[129,14461,14462],{"class":244}," \"func2(int a, int b = 10) 调用\"",[129,14464,1459],{"class":135},[129,14466,8855],{"class":139},[129,14468,14469],{"class":131,"line":1707},[129,14470,1579],{"class":139},[129,14472,14473],{"class":131,"line":1712},[129,14474,2414],{"emptyLinePlaceholder":56},[129,14476,14477,14479,14481,14483,14485,14487],{"class":131,"line":1741},[129,14478,5379],{"class":135},[129,14480,13633],{"class":1977},[129,14482,140],{"class":139},[129,14484,143],{"class":135},[129,14486,1413],{"class":5231},[129,14488,146],{"class":139},[129,14490,14491],{"class":131,"line":1746},[129,14492,1560],{"class":139},[129,14494,14495,14497,14499,14502,14504],{"class":131,"line":1763},[129,14496,6544],{"class":139},[129,14498,1183],{"class":135},[129,14500,14501],{"class":244}," \"func2(int a) 调用\"",[129,14503,1459],{"class":135},[129,14505,8855],{"class":139},[129,14507,14508],{"class":131,"line":1768},[129,14509,1579],{"class":139},[129,14511,14512],{"class":131,"line":1773},[129,14513,2414],{"emptyLinePlaceholder":56},[129,14515,14516,14518,14520],{"class":131,"line":1778},[129,14517,143],{"class":135},[129,14519,1987],{"class":1977},[129,14521,10868],{"class":139},[129,14523,14524],{"class":131,"line":1792},[129,14525,13225],{"class":139},[129,14527,14528,14530,14532,14534,14536],{"class":131,"line":1797},[129,14529,1999],{"class":135},[129,14531,10884],{"class":139},[129,14533,185],{"class":135},[129,14535,2052],{"class":188},[129,14537,1305],{"class":139},[129,14539,14540,14542,14545],{"class":131,"line":2591},[129,14541,13300],{"class":1977},[129,14543,14544],{"class":139},"(a);",[129,14546,14547],{"class":198}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[129,14549,14550,14552,14554,14556,14558],{"class":131,"line":2605},[129,14551,13300],{"class":1977},[129,14553,140],{"class":139},[129,14555,585],{"class":188},[129,14557,5981],{"class":139},[129,14559,14560],{"class":198},"\u002F\u002F调用有const   10是个常量\n",[129,14562,14563],{"class":131,"line":2613},[129,14564,2414],{"emptyLinePlaceholder":56},[129,14566,14567],{"class":131,"line":2618},[129,14568,2414],{"emptyLinePlaceholder":56},[129,14570,14571,14574],{"class":131,"line":2624},[129,14572,14573],{"class":198},"    \u002F\u002Ffunc2(10);",[129,14575,14576],{"class":198}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[129,14578,14579],{"class":131,"line":2630},[129,14580,2414],{"emptyLinePlaceholder":56},[129,14582,14583,14585,14587,14589],{"class":131,"line":2635},[129,14584,2317],{"class":1977},[129,14586,140],{"class":139},[129,14588,2322],{"class":244},[129,14590,2733],{"class":139},[129,14592,14593],{"class":131,"line":7963},[129,14594,2414],{"emptyLinePlaceholder":56},[129,14596,14597,14599,14601],{"class":131,"line":7987},[129,14598,4104],{"class":135},[129,14600,4107],{"class":188},[129,14602,1305],{"class":139},[129,14604,14605],{"class":131,"line":7992},[129,14606,1579],{"class":139},[5141,14608,14609],{},"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":42,"searchDepth":51,"depth":51,"links":14611},[14612,14613,14614],{"id":13544,"depth":51,"text":13545},{"id":13801,"depth":51,"text":13802},{"id":13923,"depth":51,"text":13924,"children":14615},[14616,14617],{"id":13930,"depth":1194,"text":13931},{"id":14300,"depth":1194,"text":14301},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13536,"description":42},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14624,"title":14625,"body":14626,"description":23380,"extension":54,"meta":23381,"navigation":56,"path":23382,"seo":23383,"stem":23384,"__hash__":23385},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14627,"toc":23361},[14628,14631,14637,14644,14649,14652,14655,14658,14662,14666,14669,14672,14680,14685,14688,14695,14700,14859,14862,15115,15118,15121,15124,15129,15132,15135,15146,15151,15387,15391,15401,15404,15412,15559,15563,15566,15569,15573,16018,16022,16030,16038,16950,16957,16962,17590,17593,17596,17599,17718,17721,17808,17811,17937,17940,18034,18037,18390,18394,18402,18406,18413,18416,18419,18430,18436,18441,18453,18461,18481,18489,18506,18692,18695,18699,18702,18705,18708,18711,18714,18717,18720,19180,19186,19190,19193,19204,19791,19794,20283,20287,20290,20293,20296,20299,20302,20310,20706,20710,20713,20716,21163,21166,21169,21174,21177,21182,21185,21189,21192,21194,21200,21203,21509,21519,21560,21564,21567,21569,21602,21605,21912,21914,21929,21932,21955,21964,21970,21973,21977,21980,21983,21988,21999,22004,22012,22017,22147,22150,22153,22328,22333,22545,22549,22552,22666,22671,22910,22914,22918,22921,22924,22929,23034,23037,23040,23043,23047,23158,23161,23164,23169,23221,23224,23227,23232,23278,23281,23286,23354,23356,23359],[10,14629,14625],{"id":14630},"_8类和对象",[14,14632,14633,14634],{},"C++面向对象的三大特性为",[289,14635,14636],{},"封装、继承、多态",[14,14638,14639,14640,14643],{},"C++认为",[289,14641,14642],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14645,14646],{},[289,14647,14648],{},"例如：",[14,14650,14651],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14653,14654],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14656,14657],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[71,14659,14661],{"id":14660},"_81封装","8.1封装",[100,14663,14665],{"id":14664},"_811封装的意义","8.1.1封装的意义",[14,14667,14668],{},"封装是C++面向对象三大特性之一",[14,14670,14671],{},"封装的意义：",[1146,14673,14674,14677],{},[86,14675,14676],{},"将属性和行为作为一个整体，表现生活中的事物",[86,14678,14679],{},"将属性和行为加以权限控制",[14,14681,14682],{},[289,14683,14684],{},"封装意义一：",[14,14686,14687],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14689,14690,13810,14692],{},[289,14691,5196],{},[126,14693,14694],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[83,14696,14697],{},[86,14698,14699],{},"**示例1：**设计一个圆类，求圆的周长",[120,14701,14703],{"className":122,"code":14702,"language":124,"meta":42,"style":42},"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",[126,14704,14705,14713,14717,14722,14727,14732,14737,14744,14749,14759,14763,14781,14785,14789,14797,14801,14806,14811,14816,14821,14832,14855],{"__ignoreMap":42},[129,14706,14707,14710],{"class":131,"line":132},[129,14708,14709],{"class":135},"class",[129,14711,14712],{"class":1977}," Circle\n",[129,14714,14715],{"class":131,"line":51},[129,14716,1560],{"class":139},[129,14718,14719],{"class":131,"line":1194},[129,14720,14721],{"class":198},"    \u002F\u002F访问权限\n",[129,14723,14724],{"class":131,"line":1209},[129,14725,14726],{"class":198},"    \u002F\u002F公共权限\n",[129,14728,14729],{"class":131,"line":1215},[129,14730,14731],{"class":135},"public:\n",[129,14733,14734],{"class":131,"line":1229},[129,14735,14736],{"class":198},"    \u002F\u002F属性\n",[129,14738,14739,14741],{"class":131,"line":1235},[129,14740,1999],{"class":135},[129,14742,14743],{"class":139}," m_r;\n",[129,14745,14746],{"class":131,"line":1326},[129,14747,14748],{"class":198},"    \u002F\u002F行为\n",[129,14750,14751,14754,14757],{"class":131,"line":1332},[129,14752,14753],{"class":135},"    double",[129,14755,14756],{"class":1977}," calculateZC",[129,14758,1990],{"class":139},[129,14760,14761],{"class":131,"line":1344},[129,14762,2044],{"class":139},[129,14764,14765,14768,14771,14773,14776,14778],{"class":131,"line":1626},[129,14766,14767],{"class":135},"        return",[129,14769,14770],{"class":188}," 2",[129,14772,594],{"class":135},[129,14774,14775],{"class":139},"PI",[129,14777,594],{"class":135},[129,14779,14780],{"class":139},"m_r;\n",[129,14782,14783],{"class":131,"line":1631},[129,14784,2201],{"class":139},[129,14786,14787],{"class":131,"line":1637},[129,14788,4009],{"class":139},[129,14790,14791,14793,14795],{"class":131,"line":1642},[129,14792,143],{"class":135},[129,14794,1987],{"class":1977},[129,14796,1990],{"class":139},[129,14798,14799],{"class":131,"line":1656},[129,14800,1560],{"class":139},[129,14802,14803],{"class":131,"line":1661},[129,14804,14805],{"class":198},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[129,14807,14808],{"class":131,"line":1667},[129,14809,14810],{"class":198},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[129,14812,14813],{"class":131,"line":1688},[129,14814,14815],{"class":139},"    Circle c1;\n",[129,14817,14818],{"class":131,"line":1693},[129,14819,14820],{"class":198},"    \u002F\u002F给圆对象 的属性进行赋值\n",[129,14822,14823,14826,14828,14830],{"class":131,"line":1707},[129,14824,14825],{"class":139},"    c1.m_r",[129,14827,185],{"class":135},[129,14829,585],{"class":188},[129,14831,1305],{"class":139},[129,14833,14834,14836,14838,14841,14843,14846,14849,14851,14853],{"class":131,"line":1712},[129,14835,1565],{"class":139},[129,14837,1183],{"class":135},[129,14839,14840],{"class":244},"\"圆的周长\"",[129,14842,1183],{"class":135},[129,14844,14845],{"class":139},"c1.",[129,14847,14848],{"class":1977},"calculateZC",[129,14850,2441],{"class":139},[129,14852,1183],{"class":135},[129,14854,1206],{"class":139},[129,14856,14857],{"class":131,"line":1741},[129,14858,1579],{"class":139},[14,14860,14861],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[120,14863,14865],{"className":122,"code":14864,"language":124,"meta":42,"style":42},"#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",[126,14866,14867,14873,14883,14889,14895,14899,14903,14908,14915,14920,14938,14942,14952,14956,14961,14977,14981,14991,14995,15000,15008,15012,15044,15048,15052,15060,15064,15069,15074,15088,15102,15111],{"__ignoreMap":42},[129,14868,14869,14871],{"class":131,"line":132},[129,14870,1963],{"class":135},[129,14872,1966],{"class":244},[129,14874,14875,14877,14879,14881],{"class":131,"line":51},[129,14876,1971],{"class":135},[129,14878,1974],{"class":135},[129,14880,1978],{"class":1977},[129,14882,1305],{"class":139},[129,14884,14885,14887],{"class":131,"line":1194},[129,14886,1963],{"class":135},[129,14888,7764],{"class":244},[129,14890,14891,14893],{"class":131,"line":1209},[129,14892,14709],{"class":135},[129,14894,7777],{"class":1977},[129,14896,14897],{"class":131,"line":1215},[129,14898,1560],{"class":139},[129,14900,14901],{"class":131,"line":1229},[129,14902,14731],{"class":135},[129,14904,14905],{"class":131,"line":1235},[129,14906,14907],{"class":139},"    string m_name;\n",[129,14909,14910,14912],{"class":131,"line":1326},[129,14911,1999],{"class":135},[129,14913,14914],{"class":139}," m_id;\n",[129,14916,14917],{"class":131,"line":1332},[129,14918,14919],{"class":198},"    \u002F\u002F赋值姓名\n",[129,14921,14922,14925,14928,14930,14933,14936],{"class":131,"line":1344},[129,14923,14924],{"class":135},"    void",[129,14926,14927],{"class":1977}," setName",[129,14929,140],{"class":139},[129,14931,14932],{"class":1977},"string",[129,14934,14935],{"class":5231}," name",[129,14937,146],{"class":139},[129,14939,14940],{"class":131,"line":1626},[129,14941,2044],{"class":139},[129,14943,14944,14947,14949],{"class":131,"line":1631},[129,14945,14946],{"class":139},"        m_name",[129,14948,185],{"class":135},[129,14950,14951],{"class":139},"name;\n",[129,14953,14954],{"class":131,"line":1637},[129,14955,2201],{"class":139},[129,14957,14958],{"class":131,"line":1642},[129,14959,14960],{"class":198},"    \u002F\u002F赋值学号\n",[129,14962,14963,14965,14968,14970,14972,14975],{"class":131,"line":1656},[129,14964,14924],{"class":135},[129,14966,14967],{"class":1977}," setId",[129,14969,140],{"class":139},[129,14971,143],{"class":135},[129,14973,14974],{"class":5231}," id",[129,14976,146],{"class":139},[129,14978,14979],{"class":131,"line":1661},[129,14980,2044],{"class":139},[129,14982,14983,14986,14988],{"class":131,"line":1667},[129,14984,14985],{"class":139},"        m_id",[129,14987,185],{"class":135},[129,14989,14990],{"class":139},"id;\n",[129,14992,14993],{"class":131,"line":1688},[129,14994,2201],{"class":139},[129,14996,14997],{"class":131,"line":1693},[129,14998,14999],{"class":198},"    \u002F\u002F打印学生信息\n",[129,15001,15002,15004,15006],{"class":131,"line":1707},[129,15003,14924],{"class":135},[129,15005,9630],{"class":1977},[129,15007,1990],{"class":139},[129,15009,15010],{"class":131,"line":1712},[129,15011,2044],{"class":139},[129,15013,15014,15016,15018,15021,15023,15026,15028,15030,15032,15035,15037,15040,15042],{"class":131,"line":1741},[129,15015,3465],{"class":139},[129,15017,1183],{"class":135},[129,15019,15020],{"class":244},"\"姓名：\"",[129,15022,1183],{"class":135},[129,15024,15025],{"class":139},"m_name",[129,15027,1183],{"class":135},[129,15029,4373],{"class":244},[129,15031,1183],{"class":135},[129,15033,15034],{"class":244},"\"学号：\"",[129,15036,1183],{"class":135},[129,15038,15039],{"class":139},"m_id",[129,15041,1183],{"class":135},[129,15043,1206],{"class":139},[129,15045,15046],{"class":131,"line":1746},[129,15047,2201],{"class":139},[129,15049,15050],{"class":131,"line":1763},[129,15051,4009],{"class":139},[129,15053,15054,15056,15058],{"class":131,"line":1768},[129,15055,143],{"class":135},[129,15057,1987],{"class":1977},[129,15059,1990],{"class":139},[129,15061,15062],{"class":131,"line":1773},[129,15063,1560],{"class":139},[129,15065,15066],{"class":131,"line":1778},[129,15067,15068],{"class":198},"    \u002F\u002F实例化\n",[129,15070,15071],{"class":131,"line":1792},[129,15072,15073],{"class":139},"    Student s1;\n",[129,15075,15076,15079,15082,15084,15086],{"class":131,"line":1797},[129,15077,15078],{"class":139},"    s1.",[129,15080,15081],{"class":1977},"setName",[129,15083,140],{"class":139},[129,15085,7931],{"class":244},[129,15087,2733],{"class":139},[129,15089,15090,15092,15095,15097,15100],{"class":131,"line":2591},[129,15091,15078],{"class":139},[129,15093,15094],{"class":1977},"setId",[129,15096,140],{"class":139},[129,15098,15099],{"class":188},"123456",[129,15101,2733],{"class":139},[129,15103,15104,15106,15109],{"class":131,"line":2605},[129,15105,15078],{"class":139},[129,15107,15108],{"class":1977},"printInfo",[129,15110,5651],{"class":139},[129,15112,15113],{"class":131,"line":2613},[129,15114,1579],{"class":139},[14,15116,15117],{},"类中的属性和行为统称为成员",[14,15119,15120],{},"属性：成员属性(成员变量)",[14,15122,15123],{},"方法：成员函数(成员方法)",[14,15125,15126],{},[289,15127,15128],{},"封装意义二：",[14,15130,15131],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15133,15134],{},"访问权限有三种：",[83,15136,15137,15140,15143],{},[86,15138,15139],{},"public        公共权限",[86,15141,15142],{},"protected 保护权限",[86,15144,15145],{},"private      私有权限",[14,15147,15148],{},[289,15149,15150],{},"示例：",[120,15152,15154],{"className":9956,"code":15153,"language":9958,"meta":42,"style":42},"\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",[126,15155,15156,15161,15166,15171,15176,15180,15187,15191,15196,15200,15205,15209,15214,15219,15224,15228,15233,15238,15245,15249,15253,15261,15265,15276,15288,15300,15304,15308,15312,15320,15324,15329,15341,15349,15357,15361,15371,15375,15383],{"__ignoreMap":42},[129,15157,15158],{"class":131,"line":132},[129,15159,15160],{"class":198},"\u002F\u002F三种权限\n",[129,15162,15163],{"class":131,"line":51},[129,15164,15165],{"class":198},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[129,15167,15168],{"class":131,"line":1194},[129,15169,15170],{"class":198},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[129,15172,15173],{"class":131,"line":1209},[129,15174,15175],{"class":198},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[129,15177,15178],{"class":131,"line":1215},[129,15179,2414],{"emptyLinePlaceholder":56},[129,15181,15182,15184],{"class":131,"line":1229},[129,15183,14709],{"class":135},[129,15185,15186],{"class":1977}," Person\n",[129,15188,15189],{"class":131,"line":1235},[129,15190,1560],{"class":139},[129,15192,15193],{"class":131,"line":1326},[129,15194,15195],{"class":198},"    \u002F\u002F姓名  公共权限\n",[129,15197,15198],{"class":131,"line":1332},[129,15199,14731],{"class":135},[129,15201,15202],{"class":131,"line":1344},[129,15203,15204],{"class":139},"    string m_Name;\n",[129,15206,15207],{"class":131,"line":1626},[129,15208,2414],{"emptyLinePlaceholder":56},[129,15210,15211],{"class":131,"line":1631},[129,15212,15213],{"class":198},"    \u002F\u002F汽车  保护权限\n",[129,15215,15216],{"class":131,"line":1637},[129,15217,15218],{"class":135},"protected:\n",[129,15220,15221],{"class":131,"line":1642},[129,15222,15223],{"class":139},"    string m_Car;\n",[129,15225,15226],{"class":131,"line":1656},[129,15227,2414],{"emptyLinePlaceholder":56},[129,15229,15230],{"class":131,"line":1661},[129,15231,15232],{"class":198},"    \u002F\u002F银行卡密码  私有权限\n",[129,15234,15235],{"class":131,"line":1667},[129,15236,15237],{"class":135},"private:\n",[129,15239,15240,15242],{"class":131,"line":1688},[129,15241,1999],{"class":135},[129,15243,15244],{"class":139}," m_Password;\n",[129,15246,15247],{"class":131,"line":1693},[129,15248,2414],{"emptyLinePlaceholder":56},[129,15250,15251],{"class":131,"line":1707},[129,15252,14731],{"class":135},[129,15254,15255,15257,15259],{"class":131,"line":1712},[129,15256,14924],{"class":135},[129,15258,11400],{"class":1977},[129,15260,1990],{"class":139},[129,15262,15263],{"class":131,"line":1741},[129,15264,2044],{"class":139},[129,15266,15267,15270,15272,15274],{"class":131,"line":1746},[129,15268,15269],{"class":139},"        m_Name ",[129,15271,185],{"class":135},[129,15273,8953],{"class":244},[129,15275,1305],{"class":139},[129,15277,15278,15281,15283,15286],{"class":131,"line":1763},[129,15279,15280],{"class":139},"        m_Car ",[129,15282,185],{"class":135},[129,15284,15285],{"class":244}," \"拖拉机\"",[129,15287,1305],{"class":139},[129,15289,15290,15293,15295,15298],{"class":131,"line":1768},[129,15291,15292],{"class":139},"        m_Password ",[129,15294,185],{"class":135},[129,15296,15297],{"class":188}," 123456",[129,15299,1305],{"class":139},[129,15301,15302],{"class":131,"line":1773},[129,15303,2201],{"class":139},[129,15305,15306],{"class":131,"line":1778},[129,15307,4009],{"class":139},[129,15309,15310],{"class":131,"line":1792},[129,15311,2414],{"emptyLinePlaceholder":56},[129,15313,15314,15316,15318],{"class":131,"line":1797},[129,15315,143],{"class":135},[129,15317,1987],{"class":1977},[129,15319,10868],{"class":139},[129,15321,15322],{"class":131,"line":2591},[129,15323,2414],{"emptyLinePlaceholder":56},[129,15325,15326],{"class":131,"line":2605},[129,15327,15328],{"class":139},"    Person p;\n",[129,15330,15331,15334,15336,15339],{"class":131,"line":2613},[129,15332,15333],{"class":139},"    p.m_Name ",[129,15335,185],{"class":135},[129,15337,15338],{"class":244}," \"李四\"",[129,15340,1305],{"class":139},[129,15342,15343,15346],{"class":131,"line":2618},[129,15344,15345],{"class":198},"    \u002F\u002Fp.m_Car = \"奔驰\";",[129,15347,15348],{"class":198},"  \u002F\u002F保护权限类外访问不到\n",[129,15350,15351,15354],{"class":131,"line":2624},[129,15352,15353],{"class":198},"    \u002F\u002Fp.m_Password = 123;",[129,15355,15356],{"class":198}," \u002F\u002F私有权限类外访问不到\n",[129,15358,15359],{"class":131,"line":2630},[129,15360,2414],{"emptyLinePlaceholder":56},[129,15362,15363,15365,15367,15369],{"class":131,"line":2635},[129,15364,2317],{"class":1977},[129,15366,140],{"class":139},[129,15368,2322],{"class":244},[129,15370,2733],{"class":139},[129,15372,15373],{"class":131,"line":7963},[129,15374,2414],{"emptyLinePlaceholder":56},[129,15376,15377,15379,15381],{"class":131,"line":7987},[129,15378,4104],{"class":135},[129,15380,4107],{"class":188},[129,15382,1305],{"class":139},[129,15384,15385],{"class":131,"line":7992},[129,15386,1579],{"class":139},[100,15388,15390],{"id":15389},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15392,15393,15394,15397,15398],{},"在C++中 struct和class唯一的",[289,15395,15396],{},"区别","就在于 ",[289,15399,15400],{},"默认的访问权限不同",[14,15402,15403],{},"区别：",[1146,15405,15406,15409],{},[86,15407,15408],{},"struct 默认权限为公共",[86,15410,15411],{},"class   默认权限为私有",[120,15413,15415],{"className":9956,"code":15414,"language":9958,"meta":42,"style":42},"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",[126,15416,15417,15424,15428,15438,15442,15446,15453,15457,15467,15471,15475,15483,15487,15492,15506,15510,15515,15529,15533,15543,15547,15555],{"__ignoreMap":42},[129,15418,15419,15421],{"class":131,"line":132},[129,15420,14709],{"class":135},[129,15422,15423],{"class":1977}," C1\n",[129,15425,15426],{"class":131,"line":51},[129,15427,1560],{"class":139},[129,15429,15430,15432,15435],{"class":131,"line":1194},[129,15431,1999],{"class":135},[129,15433,15434],{"class":139},"  m_A;",[129,15436,15437],{"class":198}," \u002F\u002F默认是私有权限\n",[129,15439,15440],{"class":131,"line":1209},[129,15441,4009],{"class":139},[129,15443,15444],{"class":131,"line":1215},[129,15445,2414],{"emptyLinePlaceholder":56},[129,15447,15448,15450],{"class":131,"line":1229},[129,15449,7774],{"class":135},[129,15451,15452],{"class":1977}," C2\n",[129,15454,15455],{"class":131,"line":1235},[129,15456,1560],{"class":139},[129,15458,15459,15461,15464],{"class":131,"line":1326},[129,15460,1999],{"class":135},[129,15462,15463],{"class":139}," m_A;",[129,15465,15466],{"class":198},"  \u002F\u002F默认是公共权限\n",[129,15468,15469],{"class":131,"line":1332},[129,15470,4009],{"class":139},[129,15472,15473],{"class":131,"line":1344},[129,15474,2414],{"emptyLinePlaceholder":56},[129,15476,15477,15479,15481],{"class":131,"line":1626},[129,15478,143],{"class":135},[129,15480,1987],{"class":1977},[129,15482,10868],{"class":139},[129,15484,15485],{"class":131,"line":1631},[129,15486,2414],{"emptyLinePlaceholder":56},[129,15488,15489],{"class":131,"line":1637},[129,15490,15491],{"class":139},"    C1 c1;\n",[129,15493,15494,15497,15499,15501,15503],{"class":131,"line":1642},[129,15495,15496],{"class":139},"    c1.m_A ",[129,15498,185],{"class":135},[129,15500,2052],{"class":188},[129,15502,195],{"class":139},[129,15504,15505],{"class":198}," \u002F\u002F错误，访问权限是私有\n",[129,15507,15508],{"class":131,"line":1656},[129,15509,2414],{"emptyLinePlaceholder":56},[129,15511,15512],{"class":131,"line":1661},[129,15513,15514],{"class":139},"    C2 c2;\n",[129,15516,15517,15520,15522,15524,15526],{"class":131,"line":1667},[129,15518,15519],{"class":139},"    c2.m_A ",[129,15521,185],{"class":135},[129,15523,2052],{"class":188},[129,15525,195],{"class":139},[129,15527,15528],{"class":198}," \u002F\u002F正确，访问权限是公共\n",[129,15530,15531],{"class":131,"line":1688},[129,15532,2414],{"emptyLinePlaceholder":56},[129,15534,15535,15537,15539,15541],{"class":131,"line":1693},[129,15536,2317],{"class":1977},[129,15538,140],{"class":139},[129,15540,2322],{"class":244},[129,15542,2733],{"class":139},[129,15544,15545],{"class":131,"line":1707},[129,15546,2414],{"emptyLinePlaceholder":56},[129,15548,15549,15551,15553],{"class":131,"line":1712},[129,15550,4104],{"class":135},[129,15552,4107],{"class":188},[129,15554,1305],{"class":139},[129,15556,15557],{"class":131,"line":1741},[129,15558,1579],{"class":139},[100,15560,15562],{"id":15561},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15564,15565],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15567,15568],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15570,15571],{},[289,15572,15150],{},[120,15574,15576],{"className":9956,"code":15575,"language":9958,"meta":42,"style":42},"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",[126,15577,15578,15588,15592,15596,15601,15615,15624,15628,15638,15642,15649,15653,15657,15661,15666,15675,15682,15686,15691,15707,15730,15743,15750,15754,15763,15767,15771,15776,15792,15802,15806,15810,15814,15822,15826,15836,15840,15848,15852,15856,15864,15868,15872,15877,15890,15913,15917,15922,15935,15957,15961,15966,15980,15988,15992,16002,16006,16014],{"__ignoreMap":42},[129,15579,15580,15582,15585],{"class":131,"line":132},[129,15581,14709],{"class":135},[129,15583,15584],{"class":1977}," Person",[129,15586,15587],{"class":139}," {\n",[129,15589,15590],{"class":131,"line":51},[129,15591,14731],{"class":135},[129,15593,15594],{"class":131,"line":1194},[129,15595,2414],{"emptyLinePlaceholder":56},[129,15597,15598],{"class":131,"line":1209},[129,15599,15600],{"class":198},"    \u002F\u002F姓名设置可读可写\n",[129,15602,15603,15605,15607,15609,15611,15613],{"class":131,"line":1215},[129,15604,14924],{"class":135},[129,15606,14927],{"class":1977},[129,15608,140],{"class":139},[129,15610,14932],{"class":1977},[129,15612,14935],{"class":5231},[129,15614,12457],{"class":139},[129,15616,15617,15619,15621],{"class":131,"line":1229},[129,15618,15269],{"class":139},[129,15620,185],{"class":135},[129,15622,15623],{"class":139}," name;\n",[129,15625,15626],{"class":131,"line":1235},[129,15627,2201],{"class":139},[129,15629,15630,15633,15636],{"class":131,"line":1326},[129,15631,15632],{"class":1977},"    string",[129,15634,15635],{"class":1977}," getName",[129,15637,1990],{"class":139},[129,15639,15640],{"class":131,"line":1332},[129,15641,2044],{"class":139},[129,15643,15644,15646],{"class":131,"line":1344},[129,15645,14767],{"class":135},[129,15647,15648],{"class":139}," m_Name;\n",[129,15650,15651],{"class":131,"line":1626},[129,15652,2201],{"class":139},[129,15654,15655],{"class":131,"line":1631},[129,15656,2414],{"emptyLinePlaceholder":56},[129,15658,15659],{"class":131,"line":1637},[129,15660,2414],{"emptyLinePlaceholder":56},[129,15662,15663],{"class":131,"line":1642},[129,15664,15665],{"class":198},"    \u002F\u002F获取年龄 \n",[129,15667,15668,15670,15673],{"class":131,"line":1656},[129,15669,1999],{"class":135},[129,15671,15672],{"class":1977}," getAge",[129,15674,10868],{"class":139},[129,15676,15677,15679],{"class":131,"line":1661},[129,15678,14767],{"class":135},[129,15680,15681],{"class":139}," m_Age;\n",[129,15683,15684],{"class":131,"line":1667},[129,15685,2201],{"class":139},[129,15687,15688],{"class":131,"line":1688},[129,15689,15690],{"class":198},"    \u002F\u002F设置年龄\n",[129,15692,15693,15695,15698,15700,15702,15705],{"class":131,"line":1693},[129,15694,14924],{"class":135},[129,15696,15697],{"class":1977}," setAge",[129,15699,140],{"class":139},[129,15701,143],{"class":135},[129,15703,15704],{"class":5231}," age",[129,15706,12457],{"class":139},[129,15708,15709,15711,15714,15716,15718,15720,15723,15725,15728],{"class":131,"line":1707},[129,15710,2511],{"class":135},[129,15712,15713],{"class":139}," (age ",[129,15715,1049],{"class":135},[129,15717,4107],{"class":188},[129,15719,3269],{"class":135},[129,15721,15722],{"class":139}," age ",[129,15724,1099],{"class":135},[129,15726,15727],{"class":188}," 150",[129,15729,12457],{"class":139},[129,15731,15732,15734,15736,15739,15741],{"class":131,"line":1712},[129,15733,9734],{"class":139},[129,15735,1183],{"class":135},[129,15737,15738],{"class":244}," \"你个老妖精!\"",[129,15740,1459],{"class":135},[129,15742,8855],{"class":139},[129,15744,15745,15748],{"class":131,"line":1741},[129,15746,15747],{"class":135},"            return",[129,15749,1305],{"class":139},[129,15751,15752],{"class":131,"line":1746},[129,15753,2543],{"class":139},[129,15755,15756,15759,15761],{"class":131,"line":1763},[129,15757,15758],{"class":139},"        m_Age ",[129,15760,185],{"class":135},[129,15762,7812],{"class":139},[129,15764,15765],{"class":131,"line":1768},[129,15766,2201],{"class":139},[129,15768,15769],{"class":131,"line":1773},[129,15770,2414],{"emptyLinePlaceholder":56},[129,15772,15773],{"class":131,"line":1778},[129,15774,15775],{"class":198},"    \u002F\u002F情人设置为只写\n",[129,15777,15778,15780,15783,15785,15787,15790],{"class":131,"line":1792},[129,15779,14924],{"class":135},[129,15781,15782],{"class":1977}," setLover",[129,15784,140],{"class":139},[129,15786,14932],{"class":1977},[129,15788,15789],{"class":5231}," lover",[129,15791,12457],{"class":139},[129,15793,15794,15797,15799],{"class":131,"line":1797},[129,15795,15796],{"class":139},"        m_Lover ",[129,15798,185],{"class":135},[129,15800,15801],{"class":139}," lover;\n",[129,15803,15804],{"class":131,"line":2591},[129,15805,2201],{"class":139},[129,15807,15808],{"class":131,"line":2605},[129,15809,2414],{"emptyLinePlaceholder":56},[129,15811,15812],{"class":131,"line":2613},[129,15813,15237],{"class":135},[129,15815,15816,15819],{"class":131,"line":2618},[129,15817,15818],{"class":139},"    string m_Name;",[129,15820,15821],{"class":198}," \u002F\u002F可读可写  姓名\n",[129,15823,15824],{"class":131,"line":2624},[129,15825,13225],{"class":139},[129,15827,15828,15830,15833],{"class":131,"line":2630},[129,15829,1999],{"class":135},[129,15831,15832],{"class":139}," m_Age;",[129,15834,15835],{"class":198}," \u002F\u002F只读  年龄\n",[129,15837,15838],{"class":131,"line":2635},[129,15839,2414],{"emptyLinePlaceholder":56},[129,15841,15842,15845],{"class":131,"line":7963},[129,15843,15844],{"class":139},"    string m_Lover;",[129,15846,15847],{"class":198}," \u002F\u002F只写  情人\n",[129,15849,15850],{"class":131,"line":7987},[129,15851,4009],{"class":139},[129,15853,15854],{"class":131,"line":7992},[129,15855,2414],{"emptyLinePlaceholder":56},[129,15857,15858,15860,15862],{"class":131,"line":7998},[129,15859,143],{"class":135},[129,15861,1987],{"class":1977},[129,15863,10868],{"class":139},[129,15865,15866],{"class":131,"line":8025},[129,15867,2414],{"emptyLinePlaceholder":56},[129,15869,15870],{"class":131,"line":8030},[129,15871,15328],{"class":139},[129,15873,15874],{"class":131,"line":8036},[129,15875,15876],{"class":198},"    \u002F\u002F姓名设置\n",[129,15878,15879,15882,15884,15886,15888],{"class":131,"line":8048},[129,15880,15881],{"class":139},"    p.",[129,15883,15081],{"class":1977},[129,15885,140],{"class":139},[129,15887,7931],{"class":244},[129,15889,2733],{"class":139},[129,15891,15892,15894,15896,15899,15901,15904,15907,15909,15911],{"class":131,"line":8060},[129,15893,6544],{"class":139},[129,15895,1183],{"class":135},[129,15897,15898],{"class":244}," \"姓名： \"",[129,15900,1459],{"class":135},[129,15902,15903],{"class":139}," p.",[129,15905,15906],{"class":1977},"getName",[129,15908,13065],{"class":139},[129,15910,1183],{"class":135},[129,15912,8855],{"class":139},[129,15914,15915],{"class":131,"line":8072},[129,15916,2414],{"emptyLinePlaceholder":56},[129,15918,15919],{"class":131,"line":9731},[129,15920,15921],{"class":198},"    \u002F\u002F年龄设置\n",[129,15923,15924,15926,15929,15931,15933],{"class":131,"line":9756},[129,15925,15881],{"class":139},[129,15927,15928],{"class":1977},"setAge",[129,15930,140],{"class":139},[129,15932,795],{"class":188},[129,15934,2733],{"class":139},[129,15936,15937,15939,15941,15944,15946,15948,15951,15953,15955],{"class":131,"line":9779},[129,15938,6544],{"class":139},[129,15940,1183],{"class":135},[129,15942,15943],{"class":244}," \"年龄： \"",[129,15945,1459],{"class":135},[129,15947,15903],{"class":139},[129,15949,15950],{"class":1977},"getAge",[129,15952,13065],{"class":139},[129,15954,1183],{"class":135},[129,15956,8855],{"class":139},[129,15958,15959],{"class":131,"line":9803},[129,15960,2414],{"emptyLinePlaceholder":56},[129,15962,15963],{"class":131,"line":9808},[129,15964,15965],{"class":198},"    \u002F\u002F情人设置\n",[129,15967,15968,15970,15973,15975,15978],{"class":131,"line":9813},[129,15969,15881],{"class":139},[129,15971,15972],{"class":1977},"setLover",[129,15974,140],{"class":139},[129,15976,15977],{"class":244},"\"苍井\"",[129,15979,2733],{"class":139},[129,15981,15982,15985],{"class":131,"line":9818},[129,15983,15984],{"class":198},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[129,15986,15987],{"class":198},"  \u002F\u002F只写属性，不可以读取\n",[129,15989,15990],{"class":131,"line":9827},[129,15991,2414],{"emptyLinePlaceholder":56},[129,15993,15994,15996,15998,16000],{"class":131,"line":9832},[129,15995,2317],{"class":1977},[129,15997,140],{"class":139},[129,15999,2322],{"class":244},[129,16001,2733],{"class":139},[129,16003,16004],{"class":131,"line":9838},[129,16005,2414],{"emptyLinePlaceholder":56},[129,16007,16008,16010,16012],{"class":131,"line":9859},[129,16009,4104],{"class":135},[129,16011,4107],{"class":188},[129,16013,1305],{"class":139},[129,16015,16016],{"class":131,"line":9865},[129,16017,1579],{"class":139},[100,16019,16021],{"id":16020},"_814封装案例","8.1.4封装案例",[83,16023,16024],{},[86,16025,16026,16029],{},[289,16027,16028],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1146,16031,16032,16035],{},[86,16033,16034],{},"求出立方体的面积和体积",[86,16036,16037],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[120,16039,16041],{"className":122,"code":16040,"language":124,"meta":42,"style":42},"#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",[126,16042,16043,16049,16059,16066,16070,16074,16079,16109,16113,16123,16133,16143,16147,16156,16160,16196,16200,16209,16213,16229,16233,16238,16247,16251,16258,16262,16271,16275,16282,16286,16295,16299,16306,16310,16315,16332,16336,16382,16386,16395,16399,16403,16407,16416,16420,16424,16429,16433,16439,16445,16451,16455,16459,16464,16486,16490,16544,16548,16556,16560,16565,16570,16583,16590,16606,16617,16623,16646,16652,16675,16689,16709,16715,16726,16749,16771,16776,16782,16796,16809,16814,16828,16833,16839,16844,16858,16863,16868,16882,16894,16899,16912,16917,16922,16927,16940,16945],{"__ignoreMap":42},[129,16044,16045,16047],{"class":131,"line":132},[129,16046,1963],{"class":135},[129,16048,1966],{"class":244},[129,16050,16051,16053,16055,16057],{"class":131,"line":51},[129,16052,1971],{"class":135},[129,16054,1974],{"class":135},[129,16056,1978],{"class":1977},[129,16058,1305],{"class":139},[129,16060,16061,16063],{"class":131,"line":1194},[129,16062,14709],{"class":135},[129,16064,16065],{"class":1977}," Cube\n",[129,16067,16068],{"class":131,"line":1209},[129,16069,1560],{"class":139},[129,16071,16072],{"class":131,"line":1215},[129,16073,14731],{"class":135},[129,16075,16076],{"class":131,"line":1229},[129,16077,16078],{"class":198},"    \u002F\u002F输入长宽高\n",[129,16080,16081,16083,16086,16088,16090,16093,16095,16097,16100,16102,16104,16107],{"class":131,"line":1235},[129,16082,14924],{"class":135},[129,16084,16085],{"class":1977}," setLwh",[129,16087,140],{"class":139},[129,16089,143],{"class":135},[129,16091,16092],{"class":5231}," l",[129,16094,517],{"class":139},[129,16096,143],{"class":135},[129,16098,16099],{"class":5231}," w",[129,16101,517],{"class":139},[129,16103,143],{"class":135},[129,16105,16106],{"class":5231}," h",[129,16108,146],{"class":139},[129,16110,16111],{"class":131,"line":1326},[129,16112,2044],{"class":139},[129,16114,16115,16118,16120],{"class":131,"line":1332},[129,16116,16117],{"class":139},"        m_L",[129,16119,185],{"class":135},[129,16121,16122],{"class":139},"l;\n",[129,16124,16125,16128,16130],{"class":131,"line":1344},[129,16126,16127],{"class":139},"        m_W",[129,16129,185],{"class":135},[129,16131,16132],{"class":139},"w;\n",[129,16134,16135,16138,16140],{"class":131,"line":1626},[129,16136,16137],{"class":139},"        m_H",[129,16139,185],{"class":135},[129,16141,16142],{"class":139},"h;\n",[129,16144,16145],{"class":131,"line":1631},[129,16146,2201],{"class":139},[129,16148,16149,16151,16154],{"class":131,"line":1637},[129,16150,1999],{"class":135},[129,16152,16153],{"class":1977}," mianji",[129,16155,1990],{"class":139},[129,16157,16158],{"class":131,"line":1642},[129,16159,2044],{"class":139},[129,16161,16162,16164,16166,16168,16171,16173,16176,16178,16181,16183,16186,16188,16191,16193],{"class":131,"line":1656},[129,16163,14767],{"class":135},[129,16165,14770],{"class":188},[129,16167,594],{"class":135},[129,16169,16170],{"class":139},"(m_L",[129,16172,594],{"class":135},[129,16174,16175],{"class":139},"m_W ",[129,16177,620],{"class":135},[129,16179,16180],{"class":139}," m_L",[129,16182,594],{"class":135},[129,16184,16185],{"class":139},"m_H ",[129,16187,620],{"class":135},[129,16189,16190],{"class":139}," m_W",[129,16192,594],{"class":135},[129,16194,16195],{"class":139},"m_H);\n",[129,16197,16198],{"class":131,"line":1661},[129,16199,2201],{"class":139},[129,16201,16202,16204,16207],{"class":131,"line":1667},[129,16203,1999],{"class":135},[129,16205,16206],{"class":1977}," tiji",[129,16208,1990],{"class":139},[129,16210,16211],{"class":131,"line":1688},[129,16212,2044],{"class":139},[129,16214,16215,16217,16219,16221,16224,16226],{"class":131,"line":1693},[129,16216,14767],{"class":135},[129,16218,16180],{"class":139},[129,16220,594],{"class":135},[129,16222,16223],{"class":139},"m_W",[129,16225,594],{"class":135},[129,16227,16228],{"class":139},"m_H;\n",[129,16230,16231],{"class":131,"line":1707},[129,16232,2201],{"class":139},[129,16234,16235],{"class":131,"line":1712},[129,16236,16237],{"class":198},"    \u002F\u002F获取长宽高\n",[129,16239,16240,16242,16245],{"class":131,"line":1741},[129,16241,1999],{"class":135},[129,16243,16244],{"class":1977}," getLength",[129,16246,1990],{"class":139},[129,16248,16249],{"class":131,"line":1746},[129,16250,2044],{"class":139},[129,16252,16253,16255],{"class":131,"line":1763},[129,16254,14767],{"class":135},[129,16256,16257],{"class":139}," m_L;\n",[129,16259,16260],{"class":131,"line":1768},[129,16261,2201],{"class":139},[129,16263,16264,16266,16269],{"class":131,"line":1773},[129,16265,1999],{"class":135},[129,16267,16268],{"class":1977}," getWidth",[129,16270,1990],{"class":139},[129,16272,16273],{"class":131,"line":1778},[129,16274,2044],{"class":139},[129,16276,16277,16279],{"class":131,"line":1792},[129,16278,14767],{"class":135},[129,16280,16281],{"class":139}," m_W;\n",[129,16283,16284],{"class":131,"line":1797},[129,16285,2201],{"class":139},[129,16287,16288,16290,16293],{"class":131,"line":2591},[129,16289,1999],{"class":135},[129,16291,16292],{"class":1977}," getHeight",[129,16294,1990],{"class":139},[129,16296,16297],{"class":131,"line":2605},[129,16298,2044],{"class":139},[129,16300,16301,16303],{"class":131,"line":2613},[129,16302,14767],{"class":135},[129,16304,16305],{"class":139}," m_H;\n",[129,16307,16308],{"class":131,"line":2618},[129,16309,2201],{"class":139},[129,16311,16312],{"class":131,"line":2624},[129,16313,16314],{"class":198},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[129,16316,16317,16320,16323,16325,16328,16330],{"class":131,"line":2630},[129,16318,16319],{"class":135},"    bool",[129,16321,16322],{"class":1977}," isEqual",[129,16324,140],{"class":139},[129,16326,16327],{"class":1977},"Cube",[129,16329,2863],{"class":5231},[129,16331,146],{"class":139},[129,16333,16334],{"class":131,"line":2635},[129,16335,2044],{"class":139},[129,16337,16338,16340,16343,16346,16348,16350,16353,16355,16358,16361,16363,16365,16368,16370,16372,16375,16377,16379],{"class":131,"line":7963},[129,16339,2511],{"class":135},[129,16341,16342],{"class":139}," (c.",[129,16344,16345],{"class":1977},"getLength",[129,16347,13065],{"class":139},[129,16349,2963],{"class":135},[129,16351,16352],{"class":139}," m_L ",[129,16354,1729],{"class":135},[129,16356,16357],{"class":139}," c.",[129,16359,16360],{"class":1977},"getWidth",[129,16362,13065],{"class":139},[129,16364,2963],{"class":135},[129,16366,16367],{"class":139}," m_W ",[129,16369,1729],{"class":135},[129,16371,16357],{"class":139},[129,16373,16374],{"class":1977},"getHeight",[129,16376,13065],{"class":139},[129,16378,2963],{"class":135},[129,16380,16381],{"class":139}," m_H)\n",[129,16383,16384],{"class":131,"line":7987},[129,16385,2524],{"class":139},[129,16387,16388,16390,16393],{"class":131,"line":7992},[129,16389,15747],{"class":135},[129,16391,16392],{"class":188}," true",[129,16394,1305],{"class":139},[129,16396,16397],{"class":131,"line":7998},[129,16398,2543],{"class":139},[129,16400,16401],{"class":131,"line":8025},[129,16402,2584],{"class":135},[129,16404,16405],{"class":131,"line":8030},[129,16406,2524],{"class":139},[129,16408,16409,16411,16414],{"class":131,"line":8036},[129,16410,15747],{"class":135},[129,16412,16413],{"class":188}," false",[129,16415,1305],{"class":139},[129,16417,16418],{"class":131,"line":8048},[129,16419,2543],{"class":139},[129,16421,16422],{"class":131,"line":8060},[129,16423,2201],{"class":139},[129,16425,16426],{"class":131,"line":8072},[129,16427,16428],{"class":198},"    \u002F\u002F私有属性\n",[129,16430,16431],{"class":131,"line":9731},[129,16432,15237],{"class":135},[129,16434,16435,16437],{"class":131,"line":9756},[129,16436,1999],{"class":135},[129,16438,16257],{"class":139},[129,16440,16441,16443],{"class":131,"line":9779},[129,16442,1999],{"class":135},[129,16444,16281],{"class":139},[129,16446,16447,16449],{"class":131,"line":9803},[129,16448,1999],{"class":135},[129,16450,16305],{"class":139},[129,16452,16453],{"class":131,"line":9808},[129,16454,2414],{"emptyLinePlaceholder":56},[129,16456,16457],{"class":131,"line":9813},[129,16458,4009],{"class":139},[129,16460,16461],{"class":131,"line":9818},[129,16462,16463],{"class":198},"\u002F\u002F全局函数判断两个立方体是否相等\n",[129,16465,16466,16468,16470,16472,16474,16477,16479,16481,16484],{"class":131,"line":9827},[129,16467,1369],{"class":135},[129,16469,16322],{"class":1977},[129,16471,140],{"class":139},[129,16473,16327],{"class":1977},[129,16475,16476],{"class":5231}," c1",[129,16478,517],{"class":139},[129,16480,16327],{"class":1977},[129,16482,16483],{"class":5231}," c2",[129,16485,146],{"class":139},[129,16487,16488],{"class":131,"line":9832},[129,16489,1560],{"class":139},[129,16491,16492,16494,16497,16499,16501,16503,16506,16508,16511,16513,16515,16517,16519,16521,16523,16525,16527,16529,16531,16533,16535,16537,16539,16541],{"class":131,"line":9838},[129,16493,4104],{"class":135},[129,16495,16496],{"class":139}," (c1.",[129,16498,16345],{"class":1977},[129,16500,13065],{"class":139},[129,16502,2963],{"class":135},[129,16504,16505],{"class":139}," c2.",[129,16507,16345],{"class":1977},[129,16509,16510],{"class":139},"()) ",[129,16512,1729],{"class":135},[129,16514,16496],{"class":139},[129,16516,16360],{"class":1977},[129,16518,13065],{"class":139},[129,16520,2963],{"class":135},[129,16522,16505],{"class":139},[129,16524,16360],{"class":1977},[129,16526,16510],{"class":139},[129,16528,1729],{"class":135},[129,16530,16496],{"class":139},[129,16532,16374],{"class":1977},[129,16534,13065],{"class":139},[129,16536,2963],{"class":135},[129,16538,16505],{"class":139},[129,16540,16374],{"class":1977},[129,16542,16543],{"class":139},"());\n",[129,16545,16546],{"class":131,"line":9859},[129,16547,1579],{"class":139},[129,16549,16550,16552,16554],{"class":131,"line":9865},[129,16551,143],{"class":135},[129,16553,1987],{"class":1977},[129,16555,1990],{"class":139},[129,16557,16558],{"class":131,"line":9879},[129,16559,1560],{"class":139},[129,16561,16562],{"class":131,"line":9885},[129,16563,16564],{"class":139},"    Cube c1;\n",[129,16566,16567],{"class":131,"line":9912},[129,16568,16569],{"class":198},"    \u002F\u002F输入立方体的长宽高\n",[129,16571,16572,16574,16576,16579,16581],{"class":131,"line":9921},[129,16573,1565],{"class":139},[129,16575,1183],{"class":135},[129,16577,16578],{"class":244},"\"请输入第一个立方体的长、宽、高：\"",[129,16580,1183],{"class":135},[129,16582,1206],{"class":139},[129,16584,16585,16587],{"class":131,"line":9927},[129,16586,1999],{"class":135},[129,16588,16589],{"class":139}," l,w,h,l1,w1,h1;\n",[129,16591,16592,16594,16596,16598,16600,16602,16604],{"class":131,"line":9935},[129,16593,2026],{"class":139},[129,16595,1444],{"class":135},[129,16597,657],{"class":139},[129,16599,1444],{"class":135},[129,16601,934],{"class":139},[129,16603,1444],{"class":135},[129,16605,16142],{"class":139},[129,16607,16608,16611,16614],{"class":131,"line":9940},[129,16609,16610],{"class":139},"    c1.",[129,16612,16613],{"class":1977},"setLwh",[129,16615,16616],{"class":139},"(l,w,h);\n",[129,16618,16620],{"class":131,"line":16619},66,[129,16621,16622],{"class":198},"    \u002F\u002F面积\n",[129,16624,16626,16628,16630,16633,16635,16637,16640,16642,16644],{"class":131,"line":16625},67,[129,16627,1565],{"class":139},[129,16629,1183],{"class":135},[129,16631,16632],{"class":244},"\"立方体的表面积为：\"",[129,16634,1183],{"class":135},[129,16636,14845],{"class":139},[129,16638,16639],{"class":1977},"mianji",[129,16641,2441],{"class":139},[129,16643,1183],{"class":135},[129,16645,1206],{"class":139},[129,16647,16649],{"class":131,"line":16648},68,[129,16650,16651],{"class":198},"    \u002F\u002F体积\n",[129,16653,16655,16657,16659,16662,16664,16666,16669,16671,16673],{"class":131,"line":16654},69,[129,16656,1565],{"class":139},[129,16658,1183],{"class":135},[129,16660,16661],{"class":244},"\"立方体的体积为：\"",[129,16663,1183],{"class":135},[129,16665,14845],{"class":139},[129,16667,16668],{"class":1977},"tiji",[129,16670,2441],{"class":139},[129,16672,1183],{"class":135},[129,16674,1206],{"class":139},[129,16676,16678,16680,16682,16685,16687],{"class":131,"line":16677},70,[129,16679,1565],{"class":139},[129,16681,1183],{"class":135},[129,16683,16684],{"class":244},"\"请输入第二个立方体的长、宽、高：\"",[129,16686,1183],{"class":135},[129,16688,1206],{"class":139},[129,16690,16692,16694,16696,16699,16701,16704,16706],{"class":131,"line":16691},71,[129,16693,2026],{"class":139},[129,16695,1444],{"class":135},[129,16697,16698],{"class":139},"l1",[129,16700,1444],{"class":135},[129,16702,16703],{"class":139},"w1",[129,16705,1444],{"class":135},[129,16707,16708],{"class":139},"h1;\n",[129,16710,16712],{"class":131,"line":16711},72,[129,16713,16714],{"class":139},"    Cube c2;\n",[129,16716,16718,16721,16723],{"class":131,"line":16717},73,[129,16719,16720],{"class":139},"    c2.",[129,16722,16613],{"class":1977},[129,16724,16725],{"class":139},"(l1,w1,h1);\n",[129,16727,16729,16731,16733,16736,16738,16741,16743,16745,16747],{"class":131,"line":16728},74,[129,16730,1565],{"class":139},[129,16732,1183],{"class":135},[129,16734,16735],{"class":244},"\"第二个立方体的表面积为：\"",[129,16737,1183],{"class":135},[129,16739,16740],{"class":139},"c2.",[129,16742,16639],{"class":1977},[129,16744,2441],{"class":139},[129,16746,1183],{"class":135},[129,16748,1206],{"class":139},[129,16750,16752,16754,16756,16759,16761,16763,16765,16767,16769],{"class":131,"line":16751},75,[129,16753,1565],{"class":139},[129,16755,1183],{"class":135},[129,16757,16758],{"class":244},"\"第二个立方体的体积为：\"",[129,16760,1183],{"class":135},[129,16762,16740],{"class":139},[129,16764,16668],{"class":1977},[129,16766,2441],{"class":139},[129,16768,1183],{"class":135},[129,16770,1206],{"class":139},[129,16772,16774],{"class":131,"line":16773},76,[129,16775,2414],{"emptyLinePlaceholder":56},[129,16777,16779],{"class":131,"line":16778},77,[129,16780,16781],{"class":198},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[129,16783,16785,16787,16789,16792,16794],{"class":131,"line":16784},78,[129,16786,1565],{"class":139},[129,16788,1183],{"class":135},[129,16790,16791],{"class":244},"\"内部函数判断结果：\"",[129,16793,1183],{"class":135},[129,16795,1206],{"class":139},[129,16797,16799,16801,16803,16806],{"class":131,"line":16798},79,[129,16800,3115],{"class":135},[129,16802,16496],{"class":139},[129,16804,16805],{"class":1977},"isEqual",[129,16807,16808],{"class":139},"(c2))\n",[129,16810,16812],{"class":131,"line":16811},80,[129,16813,2044],{"class":139},[129,16815,16817,16819,16821,16824,16826],{"class":131,"line":16816},81,[129,16818,3465],{"class":139},[129,16820,1183],{"class":135},[129,16822,16823],{"class":244},"\"两个立方体相等\"",[129,16825,1183],{"class":135},[129,16827,1206],{"class":139},[129,16829,16831],{"class":131,"line":16830},82,[129,16832,2201],{"class":139},[129,16834,16836],{"class":131,"line":16835},83,[129,16837,16838],{"class":135},"    else\n",[129,16840,16842],{"class":131,"line":16841},84,[129,16843,2044],{"class":139},[129,16845,16847,16849,16851,16854,16856],{"class":131,"line":16846},85,[129,16848,3465],{"class":139},[129,16850,1183],{"class":135},[129,16852,16853],{"class":244},"\"两个立方体不相等\"",[129,16855,1183],{"class":135},[129,16857,1206],{"class":139},[129,16859,16861],{"class":131,"line":16860},86,[129,16862,2201],{"class":139},[129,16864,16866],{"class":131,"line":16865},87,[129,16867,2414],{"emptyLinePlaceholder":56},[129,16869,16871,16873,16875,16878,16880],{"class":131,"line":16870},88,[129,16872,1565],{"class":139},[129,16874,1183],{"class":135},[129,16876,16877],{"class":244},"\"全局函数判断结果：\"",[129,16879,1183],{"class":135},[129,16881,1206],{"class":139},[129,16883,16885,16887,16889,16891],{"class":131,"line":16884},89,[129,16886,3115],{"class":135},[129,16888,1672],{"class":139},[129,16890,16805],{"class":1977},[129,16892,16893],{"class":139},"(c1, c2))\n",[129,16895,16897],{"class":131,"line":16896},90,[129,16898,2044],{"class":139},[129,16900,16902,16904,16906,16908,16910],{"class":131,"line":16901},91,[129,16903,3465],{"class":139},[129,16905,1183],{"class":135},[129,16907,16823],{"class":244},[129,16909,1183],{"class":135},[129,16911,1206],{"class":139},[129,16913,16915],{"class":131,"line":16914},92,[129,16916,2201],{"class":139},[129,16918,16920],{"class":131,"line":16919},93,[129,16921,16838],{"class":135},[129,16923,16925],{"class":131,"line":16924},94,[129,16926,2044],{"class":139},[129,16928,16930,16932,16934,16936,16938],{"class":131,"line":16929},95,[129,16931,3465],{"class":139},[129,16933,1183],{"class":135},[129,16935,16853],{"class":244},[129,16937,1183],{"class":135},[129,16939,1206],{"class":139},[129,16941,16943],{"class":131,"line":16942},96,[129,16944,2201],{"class":139},[129,16946,16948],{"class":131,"line":16947},97,[129,16949,1579],{"class":139},[83,16951,16952],{"start":51},[86,16953,16954],{},[289,16955,16956],{},"练习案例2：点和圆的关系",[1146,16958,16959],{},[86,16960,16961],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[120,16963,16965],{"className":122,"code":16964,"language":124,"meta":42,"style":42},"#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",[126,16966,16967,16973,16983,16990,16997,17001,17005,17010,17044,17049,17065,17079,17083,17087,17094,17101,17105,17111,17115,17119,17123,17145,17168,17173,17187,17202,17206,17210,17216,17221,17226,17230,17256,17260,17290,17318,17346,17363,17367,17380,17384,17388,17392,17405,17409,17413,17421,17425,17429,17433,17438,17442,17453,17460,17469,17479,17490,17497,17510,17521,17531,17542,17549,17563,17568,17578,17586],{"__ignoreMap":42},[129,16968,16969,16971],{"class":131,"line":132},[129,16970,1963],{"class":135},[129,16972,1966],{"class":244},[129,16974,16975,16977,16979,16981],{"class":131,"line":51},[129,16976,1971],{"class":135},[129,16978,1974],{"class":135},[129,16980,1978],{"class":1977},[129,16982,1305],{"class":139},[129,16984,16985,16987],{"class":131,"line":1194},[129,16986,1963],{"class":135},[129,16988,16989],{"class":244},"\u003Ccmath>\n",[129,16991,16992,16994],{"class":131,"line":1209},[129,16993,14709],{"class":135},[129,16995,16996],{"class":1977}," Point\n",[129,16998,16999],{"class":131,"line":1215},[129,17000,1560],{"class":139},[129,17002,17003],{"class":131,"line":1229},[129,17004,14731],{"class":135},[129,17006,17007],{"class":131,"line":1235},[129,17008,17009],{"class":198},"    \u002F\u002F赋值\n",[129,17011,17012,17014,17017,17019,17021,17024,17026,17028,17031,17034,17036,17039,17041],{"class":131,"line":1326},[129,17013,14924],{"class":135},[129,17015,17016],{"class":1977}," setPoint",[129,17018,140],{"class":139},[129,17020,14052],{"class":135},[129,17022,17023],{"class":5231}," x",[129,17025,12450],{"class":139},[129,17027,14052],{"class":135},[129,17029,17030],{"class":5231}," y",[129,17032,17033],{"class":139},") { m_x ",[129,17035,185],{"class":135},[129,17037,17038],{"class":139}," x; m_y ",[129,17040,185],{"class":135},[129,17042,17043],{"class":139}," y; }\n",[129,17045,17046],{"class":131,"line":1332},[129,17047,17048],{"class":198},"    \u002F\u002F获取坐标\n",[129,17050,17051,17053,17056,17059,17062],{"class":131,"line":1344},[129,17052,14753],{"class":135},[129,17054,17055],{"class":1977}," getX",[129,17057,17058],{"class":139},"() { ",[129,17060,17061],{"class":135},"return",[129,17063,17064],{"class":139}," m_x; }\n",[129,17066,17067,17069,17072,17074,17076],{"class":131,"line":1626},[129,17068,14753],{"class":135},[129,17070,17071],{"class":1977}," getY",[129,17073,17058],{"class":139},[129,17075,17061],{"class":135},[129,17077,17078],{"class":139}," m_y; }\n",[129,17080,17081],{"class":131,"line":1631},[129,17082,2414],{"emptyLinePlaceholder":56},[129,17084,17085],{"class":131,"line":1637},[129,17086,15237],{"class":135},[129,17088,17089,17091],{"class":131,"line":1642},[129,17090,14753],{"class":135},[129,17092,17093],{"class":139}," m_x;\n",[129,17095,17096,17098],{"class":131,"line":1656},[129,17097,14753],{"class":135},[129,17099,17100],{"class":139}," m_y;\n",[129,17102,17103],{"class":131,"line":1661},[129,17104,4009],{"class":139},[129,17106,17107,17109],{"class":131,"line":1667},[129,17108,14709],{"class":135},[129,17110,14712],{"class":1977},[129,17112,17113],{"class":131,"line":1688},[129,17114,1560],{"class":139},[129,17116,17117],{"class":131,"line":1693},[129,17118,14731],{"class":135},[129,17120,17121],{"class":131,"line":1707},[129,17122,17009],{"class":198},[129,17124,17125,17127,17130,17132,17134,17137,17140,17142],{"class":131,"line":1712},[129,17126,14924],{"class":135},[129,17128,17129],{"class":1977}," setRadius",[129,17131,140],{"class":139},[129,17133,14052],{"class":135},[129,17135,17136],{"class":5231}," r",[129,17138,17139],{"class":139},") { m_r ",[129,17141,185],{"class":135},[129,17143,17144],{"class":139}," r; }\n",[129,17146,17147,17149,17152,17154,17157,17160,17163,17165],{"class":131,"line":1741},[129,17148,14924],{"class":135},[129,17150,17151],{"class":1977}," setCenter",[129,17153,140],{"class":139},[129,17155,17156],{"class":1977},"Point",[129,17158,17159],{"class":5231}," center",[129,17161,17162],{"class":139},") { m_center ",[129,17164,185],{"class":135},[129,17166,17167],{"class":139}," center; }\n",[129,17169,17170],{"class":131,"line":1746},[129,17171,17172],{"class":198},"    \u002F\u002F获取属性\n",[129,17174,17175,17177,17180,17182,17184],{"class":131,"line":1763},[129,17176,14753],{"class":135},[129,17178,17179],{"class":1977}," getRadius",[129,17181,17058],{"class":139},[129,17183,17061],{"class":135},[129,17185,17186],{"class":139}," m_r; }\n",[129,17188,17189,17192,17195,17197,17199],{"class":131,"line":1768},[129,17190,17191],{"class":1977},"    Point",[129,17193,17194],{"class":1977}," getCenter",[129,17196,17058],{"class":139},[129,17198,17061],{"class":135},[129,17200,17201],{"class":139}," m_center; }\n",[129,17203,17204],{"class":131,"line":1773},[129,17205,2414],{"emptyLinePlaceholder":56},[129,17207,17208],{"class":131,"line":1778},[129,17209,15237],{"class":135},[129,17211,17212,17214],{"class":131,"line":1792},[129,17213,14753],{"class":135},[129,17215,14743],{"class":139},[129,17217,17218],{"class":131,"line":1797},[129,17219,17220],{"class":198},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[129,17222,17223],{"class":131,"line":2591},[129,17224,17225],{"class":139},"    Point m_center;\n",[129,17227,17228],{"class":131,"line":2605},[129,17229,4009],{"class":139},[129,17231,17232,17234,17237,17239,17242,17244,17246,17248,17250,17252,17254],{"class":131,"line":2613},[129,17233,5379],{"class":135},[129,17235,17236],{"class":1977}," isInCircle",[129,17238,140],{"class":139},[129,17240,17241],{"class":1977},"Circle",[129,17243,10599],{"class":135},[129,17245,427],{"class":5231},[129,17247,517],{"class":139},[129,17249,17156],{"class":1977},[129,17251,10599],{"class":135},[129,17253,14],{"class":5231},[129,17255,146],{"class":139},[129,17257,17258],{"class":131,"line":2618},[129,17259,1560],{"class":139},[129,17261,17262,17264,17267,17269,17271,17274,17277,17280,17282,17284,17286,17288],{"class":131,"line":2624},[129,17263,14753],{"class":135},[129,17265,17266],{"class":139}," dx ",[129,17268,185],{"class":135},[129,17270,16357],{"class":139},[129,17272,17273],{"class":1977},"getCenter",[129,17275,17276],{"class":139},"().",[129,17278,17279],{"class":1977},"getX",[129,17281,13065],{"class":139},[129,17283,671],{"class":135},[129,17285,15903],{"class":139},[129,17287,17279],{"class":1977},[129,17289,5651],{"class":139},[129,17291,17292,17294,17297,17299,17301,17303,17305,17308,17310,17312,17314,17316],{"class":131,"line":2630},[129,17293,14753],{"class":135},[129,17295,17296],{"class":139}," dy ",[129,17298,185],{"class":135},[129,17300,16357],{"class":139},[129,17302,17273],{"class":1977},[129,17304,17276],{"class":139},[129,17306,17307],{"class":1977},"getY",[129,17309,13065],{"class":139},[129,17311,671],{"class":135},[129,17313,15903],{"class":139},[129,17315,17307],{"class":1977},[129,17317,5651],{"class":139},[129,17319,17320,17322,17325,17327,17330,17333,17335,17337,17339,17341,17343],{"class":131,"line":2635},[129,17321,14753],{"class":135},[129,17323,17324],{"class":139}," distance ",[129,17326,185],{"class":135},[129,17328,17329],{"class":1977}," sqrt",[129,17331,17332],{"class":139},"(dx ",[129,17334,594],{"class":135},[129,17336,17266],{"class":139},[129,17338,620],{"class":135},[129,17340,17296],{"class":139},[129,17342,594],{"class":135},[129,17344,17345],{"class":139}," dy);\n",[129,17347,17348,17350,17353,17355,17357,17360],{"class":131,"line":7963},[129,17349,3115],{"class":135},[129,17351,17352],{"class":139}," (distance ",[129,17354,1049],{"class":135},[129,17356,16357],{"class":139},[129,17358,17359],{"class":1977},"getRadius",[129,17361,17362],{"class":139},"())\n",[129,17364,17365],{"class":131,"line":7987},[129,17366,2044],{"class":139},[129,17368,17369,17371,17373,17376,17378],{"class":131,"line":7992},[129,17370,9684],{"class":139},[129,17372,1183],{"class":135},[129,17374,17375],{"class":244}," \"点在圆内\"",[129,17377,1459],{"class":135},[129,17379,8855],{"class":139},[129,17381,17382],{"class":131,"line":7998},[129,17383,2201],{"class":139},[129,17385,17386],{"class":131,"line":8025},[129,17387,16838],{"class":135},[129,17389,17390],{"class":131,"line":8030},[129,17391,2044],{"class":139},[129,17393,17394,17396,17398,17401,17403],{"class":131,"line":8036},[129,17395,9684],{"class":139},[129,17397,1183],{"class":135},[129,17399,17400],{"class":244}," \"点在圆外\"",[129,17402,1459],{"class":135},[129,17404,8855],{"class":139},[129,17406,17407],{"class":131,"line":8048},[129,17408,2201],{"class":139},[129,17410,17411],{"class":131,"line":8060},[129,17412,1579],{"class":139},[129,17414,17415,17417,17419],{"class":131,"line":8072},[129,17416,143],{"class":135},[129,17418,1987],{"class":1977},[129,17420,1990],{"class":139},[129,17422,17423],{"class":131,"line":9731},[129,17424,1560],{"class":139},[129,17426,17427],{"class":131,"line":9756},[129,17428,15068],{"class":198},[129,17430,17431],{"class":131,"line":9779},[129,17432,14815],{"class":139},[129,17434,17435],{"class":131,"line":9803},[129,17436,17437],{"class":139},"    Point p1;\n",[129,17439,17440],{"class":131,"line":9808},[129,17441,17009],{"class":198},[129,17443,17444,17446,17448,17451],{"class":131,"line":9813},[129,17445,1565],{"class":139},[129,17447,1183],{"class":135},[129,17449,17450],{"class":244},"\"请输入圆的半径：\"",[129,17452,1305],{"class":139},[129,17454,17455,17457],{"class":131,"line":9818},[129,17456,14753],{"class":135},[129,17458,17459],{"class":139}," r;\n",[129,17461,17462,17464,17466],{"class":131,"line":9827},[129,17463,2026],{"class":139},[129,17465,1444],{"class":135},[129,17467,17468],{"class":139},"r;\n",[129,17470,17471,17473,17476],{"class":131,"line":9832},[129,17472,16610],{"class":139},[129,17474,17475],{"class":1977},"setRadius",[129,17477,17478],{"class":139},"(r);\n",[129,17480,17481,17483,17485,17488],{"class":131,"line":9838},[129,17482,1565],{"class":139},[129,17484,1183],{"class":135},[129,17486,17487],{"class":244},"\"请输入圆心坐标：\"",[129,17489,1305],{"class":139},[129,17491,17492,17494],{"class":131,"line":9859},[129,17493,14753],{"class":135},[129,17495,17496],{"class":139}," x, y;\n",[129,17498,17499,17501,17503,17505,17507],{"class":131,"line":9865},[129,17500,2026],{"class":139},[129,17502,1444],{"class":135},[129,17504,959],{"class":139},[129,17506,1444],{"class":135},[129,17508,17509],{"class":139},"y;\n",[129,17511,17512,17515,17518],{"class":131,"line":9879},[129,17513,17514],{"class":139},"    p1.",[129,17516,17517],{"class":1977},"setPoint",[129,17519,17520],{"class":139},"(x, y);\n",[129,17522,17523,17525,17528],{"class":131,"line":9885},[129,17524,16610],{"class":139},[129,17526,17527],{"class":1977},"setCenter",[129,17529,17530],{"class":139},"(p1);\n",[129,17532,17533,17535,17537,17540],{"class":131,"line":9912},[129,17534,1565],{"class":139},[129,17536,1183],{"class":135},[129,17538,17539],{"class":244},"\"请输入测试点坐标：\"",[129,17541,1305],{"class":139},[129,17543,17544,17546],{"class":131,"line":9921},[129,17545,14753],{"class":135},[129,17547,17548],{"class":139}," x1, y1;\n",[129,17550,17551,17553,17555,17558,17560],{"class":131,"line":9927},[129,17552,2026],{"class":139},[129,17554,1444],{"class":135},[129,17556,17557],{"class":139},"x1",[129,17559,1444],{"class":135},[129,17561,17562],{"class":139},"y1;\n",[129,17564,17565],{"class":131,"line":9935},[129,17566,17567],{"class":139},"    Point p2;\n",[129,17569,17570,17573,17575],{"class":131,"line":9940},[129,17571,17572],{"class":139},"    p2.",[129,17574,17517],{"class":1977},[129,17576,17577],{"class":139},"(x1, y1);\n",[129,17579,17580,17583],{"class":131,"line":16619},[129,17581,17582],{"class":1977},"    isInCircle",[129,17584,17585],{"class":139},"(c1, p2);\n",[129,17587,17588],{"class":131,"line":16625},[129,17589,1579],{"class":139},[14,17591,17592],{},"在类中可以让另一个类作为本来的成员",[14,17594,17595],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17597,17598],{},"创建point.h",[120,17600,17602],{"className":122,"code":17601,"language":124,"meta":42,"style":42},"#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",[126,17603,17604,17615,17621,17631,17637,17641,17646,17650,17654,17674,17678,17686,17694,17698,17702,17708,17714],{"__ignoreMap":42},[129,17605,17606,17609,17612],{"class":131,"line":132},[129,17607,17608],{"class":135},"#pragma",[129,17610,17611],{"class":1977}," once",[129,17613,17614],{"class":198}," \u002F\u002F防止头文件重复包含\n",[129,17616,17617,17619],{"class":131,"line":51},[129,17618,1963],{"class":135},[129,17620,1966],{"class":244},[129,17622,17623,17625,17627,17629],{"class":131,"line":1194},[129,17624,1971],{"class":135},[129,17626,1974],{"class":135},[129,17628,1978],{"class":1977},[129,17630,1305],{"class":139},[129,17632,17633,17635],{"class":131,"line":1209},[129,17634,14709],{"class":135},[129,17636,16996],{"class":1977},[129,17638,17639],{"class":131,"line":1215},[129,17640,1560],{"class":139},[129,17642,17643],{"class":131,"line":1229},[129,17644,17645],{"class":198},"\u002F\u002F做好声明与变量定义就可以\n",[129,17647,17648],{"class":131,"line":1235},[129,17649,14731],{"class":135},[129,17651,17652],{"class":131,"line":1326},[129,17653,17009],{"class":198},[129,17655,17656,17658,17660,17662,17664,17666,17668,17670,17672],{"class":131,"line":1332},[129,17657,14924],{"class":135},[129,17659,17016],{"class":1977},[129,17661,140],{"class":139},[129,17663,14052],{"class":135},[129,17665,17023],{"class":5231},[129,17667,12450],{"class":139},[129,17669,14052],{"class":135},[129,17671,17030],{"class":5231},[129,17673,2733],{"class":139},[129,17675,17676],{"class":131,"line":1344},[129,17677,17048],{"class":198},[129,17679,17680,17682,17684],{"class":131,"line":1626},[129,17681,14753],{"class":135},[129,17683,17055],{"class":1977},[129,17685,5651],{"class":139},[129,17687,17688,17690,17692],{"class":131,"line":1631},[129,17689,14753],{"class":135},[129,17691,17071],{"class":1977},[129,17693,5651],{"class":139},[129,17695,17696],{"class":131,"line":1637},[129,17697,2414],{"emptyLinePlaceholder":56},[129,17699,17700],{"class":131,"line":1642},[129,17701,15237],{"class":135},[129,17703,17704,17706],{"class":131,"line":1656},[129,17705,14753],{"class":135},[129,17707,17093],{"class":139},[129,17709,17710,17712],{"class":131,"line":1661},[129,17711,14753],{"class":135},[129,17713,17100],{"class":139},[129,17715,17716],{"class":131,"line":1667},[129,17717,4009],{"class":139},[14,17719,17720],{},"创建point.cpp",[120,17722,17724],{"className":122,"code":17723,"language":124,"meta":42,"style":42},"#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",[126,17725,17726,17733,17738,17772,17776,17792],{"__ignoreMap":42},[129,17727,17728,17730],{"class":131,"line":132},[129,17729,1963],{"class":135},[129,17731,17732],{"class":244},"\u003Cpoint.h>\n",[129,17734,17735],{"class":131,"line":51},[129,17736,17737],{"class":198},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[129,17739,17740,17742,17745,17748,17750,17752,17754,17756,17758,17760,17762,17764,17766,17768,17770],{"class":131,"line":1194},[129,17741,14924],{"class":135},[129,17743,17744],{"class":1977}," Point",[129,17746,17747],{"class":139},"::",[129,17749,17517],{"class":1977},[129,17751,140],{"class":139},[129,17753,14052],{"class":135},[129,17755,17023],{"class":5231},[129,17757,12450],{"class":139},[129,17759,14052],{"class":135},[129,17761,17030],{"class":5231},[129,17763,17033],{"class":139},[129,17765,185],{"class":135},[129,17767,17038],{"class":139},[129,17769,185],{"class":135},[129,17771,17043],{"class":139},[129,17773,17774],{"class":131,"line":1209},[129,17775,17048],{"class":198},[129,17777,17778,17780,17782,17784,17786,17788,17790],{"class":131,"line":1215},[129,17779,14753],{"class":135},[129,17781,17744],{"class":1977},[129,17783,17747],{"class":139},[129,17785,17279],{"class":1977},[129,17787,17058],{"class":139},[129,17789,17061],{"class":135},[129,17791,17064],{"class":139},[129,17793,17794,17796,17798,17800,17802,17804,17806],{"class":131,"line":1229},[129,17795,14753],{"class":135},[129,17797,17744],{"class":1977},[129,17799,17747],{"class":139},[129,17801,17307],{"class":1977},[129,17803,17058],{"class":139},[129,17805,17061],{"class":135},[129,17807,17078],{"class":139},[14,17809,17810],{},"创建circle.h",[120,17812,17814],{"className":122,"code":17813,"language":124,"meta":42,"style":42},"#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",[126,17815,17816,17823,17829,17839,17845,17851,17855,17859,17863,17877,17891,17895,17903,17911,17915,17919,17925,17929,17933],{"__ignoreMap":42},[129,17817,17818,17820],{"class":131,"line":132},[129,17819,17608],{"class":135},[129,17821,17822],{"class":1977}," once\n",[129,17824,17825,17827],{"class":131,"line":51},[129,17826,1963],{"class":135},[129,17828,1966],{"class":244},[129,17830,17831,17833,17835,17837],{"class":131,"line":1194},[129,17832,1971],{"class":135},[129,17834,1974],{"class":135},[129,17836,1978],{"class":1977},[129,17838,1305],{"class":139},[129,17840,17841,17843],{"class":131,"line":1209},[129,17842,1963],{"class":135},[129,17844,17732],{"class":244},[129,17846,17847,17849],{"class":131,"line":1215},[129,17848,14709],{"class":135},[129,17850,14712],{"class":1977},[129,17852,17853],{"class":131,"line":1229},[129,17854,1560],{"class":139},[129,17856,17857],{"class":131,"line":1235},[129,17858,14731],{"class":135},[129,17860,17861],{"class":131,"line":1326},[129,17862,17009],{"class":198},[129,17864,17865,17867,17869,17871,17873,17875],{"class":131,"line":1332},[129,17866,14924],{"class":135},[129,17868,17129],{"class":1977},[129,17870,140],{"class":139},[129,17872,14052],{"class":135},[129,17874,17136],{"class":5231},[129,17876,2733],{"class":139},[129,17878,17879,17881,17883,17885,17887,17889],{"class":131,"line":1344},[129,17880,14924],{"class":135},[129,17882,17151],{"class":1977},[129,17884,140],{"class":139},[129,17886,17156],{"class":1977},[129,17888,17159],{"class":5231},[129,17890,2733],{"class":139},[129,17892,17893],{"class":131,"line":1626},[129,17894,17172],{"class":198},[129,17896,17897,17899,17901],{"class":131,"line":1631},[129,17898,14753],{"class":135},[129,17900,17179],{"class":1977},[129,17902,5651],{"class":139},[129,17904,17905,17907,17909],{"class":131,"line":1637},[129,17906,17191],{"class":1977},[129,17908,17194],{"class":1977},[129,17910,5651],{"class":139},[129,17912,17913],{"class":131,"line":1642},[129,17914,2414],{"emptyLinePlaceholder":56},[129,17916,17917],{"class":131,"line":1656},[129,17918,15237],{"class":135},[129,17920,17921,17923],{"class":131,"line":1661},[129,17922,14753],{"class":135},[129,17924,14743],{"class":139},[129,17926,17927],{"class":131,"line":1667},[129,17928,17220],{"class":198},[129,17930,17931],{"class":131,"line":1688},[129,17932,17225],{"class":139},[129,17934,17935],{"class":131,"line":1693},[129,17936,4009],{"class":139},[14,17938,17939],{},"创建circle.cpp",[120,17941,17943],{"className":122,"code":17942,"language":124,"meta":42,"style":42},"#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",[126,17944,17945,17952,17975,17997,18002,18018],{"__ignoreMap":42},[129,17946,17947,17949],{"class":131,"line":132},[129,17948,1963],{"class":135},[129,17950,17951],{"class":244},"\u003Ccircle.h>\n",[129,17953,17954,17956,17959,17961,17963,17965,17967,17969,17971,17973],{"class":131,"line":51},[129,17955,5379],{"class":135},[129,17957,17958],{"class":1977}," Circle",[129,17960,17747],{"class":139},[129,17962,17475],{"class":1977},[129,17964,140],{"class":139},[129,17966,14052],{"class":135},[129,17968,17136],{"class":5231},[129,17970,17139],{"class":139},[129,17972,185],{"class":135},[129,17974,17144],{"class":139},[129,17976,17977,17979,17981,17983,17985,17987,17989,17991,17993,17995],{"class":131,"line":1194},[129,17978,5379],{"class":135},[129,17980,17958],{"class":1977},[129,17982,17747],{"class":139},[129,17984,17527],{"class":1977},[129,17986,140],{"class":139},[129,17988,17156],{"class":1977},[129,17990,17159],{"class":5231},[129,17992,17162],{"class":139},[129,17994,185],{"class":135},[129,17996,17167],{"class":139},[129,17998,17999],{"class":131,"line":1209},[129,18000,18001],{"class":198},"\u002F\u002F获取属性\n",[129,18003,18004,18006,18008,18010,18012,18014,18016],{"class":131,"line":1215},[129,18005,14052],{"class":135},[129,18007,17958],{"class":1977},[129,18009,17747],{"class":139},[129,18011,17359],{"class":1977},[129,18013,17058],{"class":139},[129,18015,17061],{"class":135},[129,18017,17186],{"class":139},[129,18019,18020,18022,18024,18026,18028,18030,18032],{"class":131,"line":1229},[129,18021,17156],{"class":1977},[129,18023,17958],{"class":1977},[129,18025,17747],{"class":139},[129,18027,17273],{"class":1977},[129,18029,17058],{"class":139},[129,18031,17061],{"class":135},[129,18033,17201],{"class":139},[14,18035,18036],{},"使用封装的类",[120,18038,18040],{"className":122,"code":18039,"language":124,"meta":42,"style":42},"#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",[126,18041,18042,18048,18058,18064,18070,18094,18098,18124,18150,18174,18188,18192,18204,18208,18212,18216,18228,18232,18236,18244,18248,18252,18256,18260,18264,18274,18280,18288,18296,18306,18312,18324,18332,18340,18350,18356,18368,18372,18380,18386],{"__ignoreMap":42},[129,18043,18044,18046],{"class":131,"line":132},[129,18045,1963],{"class":135},[129,18047,1966],{"class":244},[129,18049,18050,18052,18054,18056],{"class":131,"line":51},[129,18051,1971],{"class":135},[129,18053,1974],{"class":135},[129,18055,1978],{"class":1977},[129,18057,1305],{"class":139},[129,18059,18060,18062],{"class":131,"line":1194},[129,18061,1963],{"class":135},[129,18063,17951],{"class":244},[129,18065,18066,18068],{"class":131,"line":1209},[129,18067,1963],{"class":135},[129,18069,17732],{"class":244},[129,18071,18072,18074,18076,18078,18080,18082,18084,18086,18088,18090,18092],{"class":131,"line":1215},[129,18073,5379],{"class":135},[129,18075,17236],{"class":1977},[129,18077,140],{"class":139},[129,18079,17241],{"class":1977},[129,18081,10599],{"class":135},[129,18083,427],{"class":5231},[129,18085,517],{"class":139},[129,18087,17156],{"class":1977},[129,18089,10599],{"class":135},[129,18091,14],{"class":5231},[129,18093,146],{"class":139},[129,18095,18096],{"class":131,"line":1229},[129,18097,1560],{"class":139},[129,18099,18100,18102,18104,18106,18108,18110,18112,18114,18116,18118,18120,18122],{"class":131,"line":1235},[129,18101,14753],{"class":135},[129,18103,17266],{"class":139},[129,18105,185],{"class":135},[129,18107,16357],{"class":139},[129,18109,17273],{"class":1977},[129,18111,17276],{"class":139},[129,18113,17279],{"class":1977},[129,18115,13065],{"class":139},[129,18117,671],{"class":135},[129,18119,15903],{"class":139},[129,18121,17279],{"class":1977},[129,18123,5651],{"class":139},[129,18125,18126,18128,18130,18132,18134,18136,18138,18140,18142,18144,18146,18148],{"class":131,"line":1326},[129,18127,14753],{"class":135},[129,18129,17296],{"class":139},[129,18131,185],{"class":135},[129,18133,16357],{"class":139},[129,18135,17273],{"class":1977},[129,18137,17276],{"class":139},[129,18139,17307],{"class":1977},[129,18141,13065],{"class":139},[129,18143,671],{"class":135},[129,18145,15903],{"class":139},[129,18147,17307],{"class":1977},[129,18149,5651],{"class":139},[129,18151,18152,18154,18156,18158,18160,18162,18164,18166,18168,18170,18172],{"class":131,"line":1332},[129,18153,14753],{"class":135},[129,18155,17324],{"class":139},[129,18157,185],{"class":135},[129,18159,17329],{"class":1977},[129,18161,17332],{"class":139},[129,18163,594],{"class":135},[129,18165,17266],{"class":139},[129,18167,620],{"class":135},[129,18169,17296],{"class":139},[129,18171,594],{"class":135},[129,18173,17345],{"class":139},[129,18175,18176,18178,18180,18182,18184,18186],{"class":131,"line":1344},[129,18177,3115],{"class":135},[129,18179,17352],{"class":139},[129,18181,1049],{"class":135},[129,18183,16357],{"class":139},[129,18185,17359],{"class":1977},[129,18187,17362],{"class":139},[129,18189,18190],{"class":131,"line":1626},[129,18191,2044],{"class":139},[129,18193,18194,18196,18198,18200,18202],{"class":131,"line":1631},[129,18195,9684],{"class":139},[129,18197,1183],{"class":135},[129,18199,17375],{"class":244},[129,18201,1459],{"class":135},[129,18203,8855],{"class":139},[129,18205,18206],{"class":131,"line":1637},[129,18207,2201],{"class":139},[129,18209,18210],{"class":131,"line":1642},[129,18211,16838],{"class":135},[129,18213,18214],{"class":131,"line":1656},[129,18215,2044],{"class":139},[129,18217,18218,18220,18222,18224,18226],{"class":131,"line":1661},[129,18219,9684],{"class":139},[129,18221,1183],{"class":135},[129,18223,17400],{"class":244},[129,18225,1459],{"class":135},[129,18227,8855],{"class":139},[129,18229,18230],{"class":131,"line":1667},[129,18231,2201],{"class":139},[129,18233,18234],{"class":131,"line":1688},[129,18235,1579],{"class":139},[129,18237,18238,18240,18242],{"class":131,"line":1693},[129,18239,143],{"class":135},[129,18241,1987],{"class":1977},[129,18243,1990],{"class":139},[129,18245,18246],{"class":131,"line":1707},[129,18247,1560],{"class":139},[129,18249,18250],{"class":131,"line":1712},[129,18251,15068],{"class":198},[129,18253,18254],{"class":131,"line":1741},[129,18255,14815],{"class":139},[129,18257,18258],{"class":131,"line":1746},[129,18259,17437],{"class":139},[129,18261,18262],{"class":131,"line":1763},[129,18263,17009],{"class":198},[129,18265,18266,18268,18270,18272],{"class":131,"line":1768},[129,18267,1565],{"class":139},[129,18269,1183],{"class":135},[129,18271,17450],{"class":244},[129,18273,1305],{"class":139},[129,18275,18276,18278],{"class":131,"line":1773},[129,18277,14753],{"class":135},[129,18279,17459],{"class":139},[129,18281,18282,18284,18286],{"class":131,"line":1778},[129,18283,2026],{"class":139},[129,18285,1444],{"class":135},[129,18287,17468],{"class":139},[129,18289,18290,18292,18294],{"class":131,"line":1792},[129,18291,16610],{"class":139},[129,18293,17475],{"class":1977},[129,18295,17478],{"class":139},[129,18297,18298,18300,18302,18304],{"class":131,"line":1797},[129,18299,1565],{"class":139},[129,18301,1183],{"class":135},[129,18303,17487],{"class":244},[129,18305,1305],{"class":139},[129,18307,18308,18310],{"class":131,"line":2591},[129,18309,14753],{"class":135},[129,18311,17496],{"class":139},[129,18313,18314,18316,18318,18320,18322],{"class":131,"line":2605},[129,18315,2026],{"class":139},[129,18317,1444],{"class":135},[129,18319,959],{"class":139},[129,18321,1444],{"class":135},[129,18323,17509],{"class":139},[129,18325,18326,18328,18330],{"class":131,"line":2613},[129,18327,17514],{"class":139},[129,18329,17517],{"class":1977},[129,18331,17520],{"class":139},[129,18333,18334,18336,18338],{"class":131,"line":2618},[129,18335,16610],{"class":139},[129,18337,17527],{"class":1977},[129,18339,17530],{"class":139},[129,18341,18342,18344,18346,18348],{"class":131,"line":2624},[129,18343,1565],{"class":139},[129,18345,1183],{"class":135},[129,18347,17539],{"class":244},[129,18349,1305],{"class":139},[129,18351,18352,18354],{"class":131,"line":2630},[129,18353,14753],{"class":135},[129,18355,17548],{"class":139},[129,18357,18358,18360,18362,18364,18366],{"class":131,"line":2635},[129,18359,2026],{"class":139},[129,18361,1444],{"class":135},[129,18363,17557],{"class":139},[129,18365,1444],{"class":135},[129,18367,17562],{"class":139},[129,18369,18370],{"class":131,"line":7963},[129,18371,17567],{"class":139},[129,18373,18374,18376,18378],{"class":131,"line":7987},[129,18375,17572],{"class":139},[129,18377,17517],{"class":1977},[129,18379,17577],{"class":139},[129,18381,18382,18384],{"class":131,"line":7992},[129,18383,17582],{"class":1977},[129,18385,17585],{"class":139},[129,18387,18388],{"class":131,"line":7998},[129,18389,1579],{"class":139},[71,18391,18393],{"id":18392},"_82对象的初始化清理","8.2对象的初始化清理",[1146,18395,18396,18399],{},[86,18397,18398],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[86,18400,18401],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[100,18403,18405],{"id":18404},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18407,18408,18409,18412],{},"对象的",[289,18410,18411],{},"初始化和清理","也是两个非常重要的安全问题",[14,18414,18415],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18417,18418],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18420,18421,18422,18425,18426,18429],{},"c++利用了",[289,18423,18424],{},"构造函数","和",[289,18427,18428],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18431,18432,18433],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[289,18434,18435],{},"我们不提供构造和析构，编译器会提供",[14,18437,18438],{},[289,18439,18440],{},"编译器提供的构造函数和析构函数是空实现。",[1146,18442,18443,18446],{},[86,18444,18445],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[86,18447,18448,18449,18452],{},"析构函数：主要作用在于对象",[289,18450,18451],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18454,18455,18458],{},[289,18456,18457],{},"构造函数语法：",[126,18459,18460],{},"类名(){}",[83,18462,18463,18466,18469,18472,18475],{},[86,18464,18465],{},"构造函数，没有返回值也不写void",[86,18467,18468],{},"函数名称与类名相同",[86,18470,18471],{},"构造函数可以有参数，因此可以发生重载",[86,18473,18474],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[86,18476,18477,18478,568],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[126,18479,18480],{},"Person(){}",[14,18482,18483,13810,18486],{},[289,18484,18485],{},"析构函数语法：",[126,18487,18488],{},"~类名(){}",[83,18490,18491,18494,18497,18503],{},[86,18492,18493],{},"析构函数，没有返回值也不写void",[86,18495,18496],{},"函数名称与类名相同,在名称前加上符号  ~",[86,18498,18499,18500],{},"析构函数不可以有参数，因此",[289,18501,18502],{},"不可以发生重载",[86,18504,18505],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[120,18507,18509],{"className":122,"code":18508,"language":124,"meta":42,"style":42},"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",[126,18510,18511,18517,18521,18525,18530,18537,18541,18554,18558,18563,18570,18574,18587,18591,18595,18599,18603,18611,18615,18623,18627,18631,18639,18643,18648,18652,18659,18663,18676,18680,18688],{"__ignoreMap":42},[129,18512,18513,18515],{"class":131,"line":132},[129,18514,14709],{"class":135},[129,18516,15186],{"class":1977},[129,18518,18519],{"class":131,"line":51},[129,18520,1560],{"class":139},[129,18522,18523],{"class":131,"line":1194},[129,18524,14731],{"class":135},[129,18526,18527],{"class":131,"line":1209},[129,18528,18529],{"class":198},"    \u002F\u002F构造函数\n",[129,18531,18532,18535],{"class":131,"line":1215},[129,18533,18534],{"class":1977},"    Person",[129,18536,1990],{"class":139},[129,18538,18539],{"class":131,"line":1229},[129,18540,2044],{"class":139},[129,18542,18543,18545,18547,18550,18552],{"class":131,"line":1235},[129,18544,9684],{"class":139},[129,18546,1183],{"class":135},[129,18548,18549],{"class":244}," \"Person的构造函数调用\"",[129,18551,1459],{"class":135},[129,18553,8855],{"class":139},[129,18555,18556],{"class":131,"line":1326},[129,18557,2201],{"class":139},[129,18559,18560],{"class":131,"line":1332},[129,18561,18562],{"class":198},"    \u002F\u002F析构函数\n",[129,18564,18565,18568],{"class":131,"line":1344},[129,18566,18567],{"class":1977},"    ~Person",[129,18569,1990],{"class":139},[129,18571,18572],{"class":131,"line":1626},[129,18573,2044],{"class":139},[129,18575,18576,18578,18580,18583,18585],{"class":131,"line":1631},[129,18577,9684],{"class":139},[129,18579,1183],{"class":135},[129,18581,18582],{"class":244}," \"Person的析构函数调用\"",[129,18584,1459],{"class":135},[129,18586,8855],{"class":139},[129,18588,18589],{"class":131,"line":1637},[129,18590,2201],{"class":139},[129,18592,18593],{"class":131,"line":1642},[129,18594,2414],{"emptyLinePlaceholder":56},[129,18596,18597],{"class":131,"line":1656},[129,18598,4009],{"class":139},[129,18600,18601],{"class":131,"line":1661},[129,18602,2414],{"emptyLinePlaceholder":56},[129,18604,18605,18607,18609],{"class":131,"line":1667},[129,18606,5379],{"class":135},[129,18608,5603],{"class":1977},[129,18610,1990],{"class":139},[129,18612,18613],{"class":131,"line":1688},[129,18614,1560],{"class":139},[129,18616,18617,18620],{"class":131,"line":1693},[129,18618,18619],{"class":139},"    Person p;",[129,18621,18622],{"class":198},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[129,18624,18625],{"class":131,"line":1707},[129,18626,1579],{"class":139},[129,18628,18629],{"class":131,"line":1712},[129,18630,2414],{"emptyLinePlaceholder":56},[129,18632,18633,18635,18637],{"class":131,"line":1741},[129,18634,143],{"class":135},[129,18636,1987],{"class":1977},[129,18638,10868],{"class":139},[129,18640,18641],{"class":131,"line":1746},[129,18642,13225],{"class":139},[129,18644,18645],{"class":131,"line":1763},[129,18646,18647],{"class":198},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[129,18649,18650],{"class":131,"line":1768},[129,18651,2414],{"emptyLinePlaceholder":56},[129,18653,18654,18656],{"class":131,"line":1773},[129,18655,18619],{"class":139},[129,18657,18658],{"class":198},"\u002F\u002F只有构造函数\n",[129,18660,18661],{"class":131,"line":1778},[129,18662,2414],{"emptyLinePlaceholder":56},[129,18664,18665,18667,18669,18671,18673],{"class":131,"line":1792},[129,18666,2317],{"class":1977},[129,18668,140],{"class":139},[129,18670,2322],{"class":244},[129,18672,5981],{"class":139},[129,18674,18675],{"class":198},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[129,18677,18678],{"class":131,"line":1797},[129,18679,2414],{"emptyLinePlaceholder":56},[129,18681,18682,18684,18686],{"class":131,"line":2591},[129,18683,4104],{"class":135},[129,18685,4107],{"class":188},[129,18687,1305],{"class":139},[129,18689,18690],{"class":131,"line":2605},[129,18691,1579],{"class":139},[14,18693,18694],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[100,18696,18698],{"id":18697},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18700,18701],{},"两种分类方式：",[14,18703,18704],{},"​\t按参数分为： 有参构造和无参构造",[14,18706,18707],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18709,18710],{},"三种调用方式：",[14,18712,18713],{},"​\t括号法",[14,18715,18716],{},"​\t显示法",[14,18718,18719],{},"​\t隐式转换法",[120,18721,18723],{"className":122,"code":18722,"language":124,"meta":42,"style":42},"#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",[126,18724,18725,18731,18741,18746,18751,18756,18761,18765,18773,18777,18781,18785,18791,18795,18808,18812,18824,18828,18837,18850,18854,18858,18864,18868,18881,18885,18890,18906,18910,18915,18924,18937,18941,18947,18951,18956,18964,18968,18973,18977,18985,18989,18994,18999,19004,19009,19014,19018,19023,19028,19033,19038,19042,19047,19052,19068,19080,19085,19089,19094,19099,19104,19108,19113,19127,19140,19144,19152,19156,19162,19168,19176],{"__ignoreMap":42},[129,18726,18727,18729],{"class":131,"line":132},[129,18728,1963],{"class":135},[129,18730,1966],{"class":244},[129,18732,18733,18735,18737,18739],{"class":131,"line":51},[129,18734,1971],{"class":135},[129,18736,1974],{"class":135},[129,18738,1978],{"class":1977},[129,18740,1305],{"class":139},[129,18742,18743],{"class":131,"line":1194},[129,18744,18745],{"class":198},"\u002F\u002F1.构造函数的分类及调用\n",[129,18747,18748],{"class":131,"line":1209},[129,18749,18750],{"class":198},"\u002F\u002F分类\n",[129,18752,18753],{"class":131,"line":1215},[129,18754,18755],{"class":198},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[129,18757,18758],{"class":131,"line":1229},[129,18759,18760],{"class":198},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[129,18762,18763],{"class":131,"line":1235},[129,18764,2414],{"emptyLinePlaceholder":56},[129,18766,18767,18769,18771],{"class":131,"line":1326},[129,18768,14709],{"class":135},[129,18770,15584],{"class":1977},[129,18772,2688],{"class":139},[129,18774,18775],{"class":131,"line":1332},[129,18776,1560],{"class":139},[129,18778,18779],{"class":131,"line":1344},[129,18780,14731],{"class":135},[129,18782,18783],{"class":131,"line":1626},[129,18784,18529],{"class":198},[129,18786,18787,18789],{"class":131,"line":1631},[129,18788,18534],{"class":1977},[129,18790,1990],{"class":139},[129,18792,18793],{"class":131,"line":1637},[129,18794,2044],{"class":139},[129,18796,18797,18799,18801,18804,18806],{"class":131,"line":1642},[129,18798,3465],{"class":139},[129,18800,1183],{"class":135},[129,18802,18803],{"class":244},"\"Person构造函数无参构造\"",[129,18805,1183],{"class":135},[129,18807,1206],{"class":139},[129,18809,18810],{"class":131,"line":1656},[129,18811,2201],{"class":139},[129,18813,18814,18816,18818,18820,18822],{"class":131,"line":1661},[129,18815,18534],{"class":1977},[129,18817,140],{"class":139},[129,18819,143],{"class":135},[129,18821,1413],{"class":5231},[129,18823,146],{"class":139},[129,18825,18826],{"class":131,"line":1667},[129,18827,2044],{"class":139},[129,18829,18830,18833,18835],{"class":131,"line":1688},[129,18831,18832],{"class":139},"        age",[129,18834,185],{"class":135},[129,18836,6212],{"class":139},[129,18838,18839,18841,18843,18846,18848],{"class":131,"line":1693},[129,18840,3465],{"class":139},[129,18842,1183],{"class":135},[129,18844,18845],{"class":244},"\"Person构造函数有参构造\"",[129,18847,1183],{"class":135},[129,18849,1206],{"class":139},[129,18851,18852],{"class":131,"line":1707},[129,18853,2201],{"class":139},[129,18855,18856],{"class":131,"line":1712},[129,18857,18562],{"class":198},[129,18859,18860,18862],{"class":131,"line":1741},[129,18861,18567],{"class":1977},[129,18863,1990],{"class":139},[129,18865,18866],{"class":131,"line":1746},[129,18867,2044],{"class":139},[129,18869,18870,18872,18874,18877,18879],{"class":131,"line":1763},[129,18871,3465],{"class":139},[129,18873,1183],{"class":135},[129,18875,18876],{"class":244},"\"Person析构函数被调用\"",[129,18878,1183],{"class":135},[129,18880,1206],{"class":139},[129,18882,18883],{"class":131,"line":1768},[129,18884,2201],{"class":139},[129,18886,18887],{"class":131,"line":1773},[129,18888,18889],{"class":198},"    \u002F\u002F拷贝构造函数\n",[129,18891,18892,18894,18896,18898,18900,18902,18904],{"class":131,"line":1778},[129,18893,18534],{"class":1977},[129,18895,140],{"class":139},[129,18897,6807],{"class":135},[129,18899,15584],{"class":1977},[129,18901,10599],{"class":135},[129,18903,14],{"class":5231},[129,18905,146],{"class":139},[129,18907,18908],{"class":131,"line":1792},[129,18909,2044],{"class":139},[129,18911,18912],{"class":131,"line":1797},[129,18913,18914],{"class":198},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[129,18916,18917,18919,18921],{"class":131,"line":2591},[129,18918,18832],{"class":139},[129,18920,185],{"class":135},[129,18922,18923],{"class":139},"p.age;\n",[129,18925,18926,18928,18930,18933,18935],{"class":131,"line":2605},[129,18927,3465],{"class":139},[129,18929,1183],{"class":135},[129,18931,18932],{"class":244},"\"Person拷贝构造函数被调用\"",[129,18934,1183],{"class":135},[129,18936,1206],{"class":139},[129,18938,18939],{"class":131,"line":2613},[129,18940,2201],{"class":139},[129,18942,18943,18945],{"class":131,"line":2618},[129,18944,1999],{"class":135},[129,18946,7812],{"class":139},[129,18948,18949],{"class":131,"line":2624},[129,18950,4009],{"class":139},[129,18952,18953],{"class":131,"line":2630},[129,18954,18955],{"class":198},"\u002F\u002F调用\n",[129,18957,18958,18960,18962],{"class":131,"line":2635},[129,18959,5379],{"class":135},[129,18961,5603],{"class":1977},[129,18963,1990],{"class":139},[129,18965,18966],{"class":131,"line":7963},[129,18967,1560],{"class":139},[129,18969,18970],{"class":131,"line":7987},[129,18971,18972],{"class":198},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[129,18974,18975],{"class":131,"line":7992},[129,18976,1579],{"class":139},[129,18978,18979,18981,18983],{"class":131,"line":7998},[129,18980,5379],{"class":135},[129,18982,5672],{"class":1977},[129,18984,1990],{"class":139},[129,18986,18987],{"class":131,"line":8025},[129,18988,1560],{"class":139},[129,18990,18991],{"class":131,"line":8030},[129,18992,18993],{"class":198},"    \u002F\u002F1.括号法\n",[129,18995,18996],{"class":131,"line":8036},[129,18997,18998],{"class":198},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[129,19000,19001],{"class":131,"line":8048},[129,19002,19003],{"class":198},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[129,19005,19006],{"class":131,"line":8060},[129,19007,19008],{"class":198},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[129,19010,19011],{"class":131,"line":8072},[129,19012,19013],{"class":198},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[129,19015,19016],{"class":131,"line":9731},[129,19017,2414],{"emptyLinePlaceholder":56},[129,19019,19020],{"class":131,"line":9756},[129,19021,19022],{"class":198},"    \u002F\u002F注意事项\n",[129,19024,19025],{"class":131,"line":9779},[129,19026,19027],{"class":198},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[129,19029,19030],{"class":131,"line":9803},[129,19031,19032],{"class":198},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[129,19034,19035],{"class":131,"line":9808},[129,19036,19037],{"class":198},"    \u002F\u002F Person p4();\n",[129,19039,19040],{"class":131,"line":9813},[129,19041,2414],{"emptyLinePlaceholder":56},[129,19043,19044],{"class":131,"line":9818},[129,19045,19046],{"class":198},"    \u002F\u002F2.显示法\n",[129,19048,19049],{"class":131,"line":9827},[129,19050,19051],{"class":139},"    Person p1;\n",[129,19053,19054,19057,19059,19062,19064,19066],{"class":131,"line":9832},[129,19055,19056],{"class":139},"    Person p2",[129,19058,185],{"class":135},[129,19060,19061],{"class":1977},"Person",[129,19063,140],{"class":139},[129,19065,585],{"class":188},[129,19067,2733],{"class":139},[129,19069,19070,19073,19075,19077],{"class":131,"line":9838},[129,19071,19072],{"class":139},"    Person p3",[129,19074,185],{"class":135},[129,19076,19061],{"class":1977},[129,19078,19079],{"class":139},"(p2);\n",[129,19081,19082],{"class":131,"line":9859},[129,19083,19084],{"class":198},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[129,19086,19087],{"class":131,"line":9865},[129,19088,2414],{"emptyLinePlaceholder":56},[129,19090,19091],{"class":131,"line":9879},[129,19092,19093],{"class":198},"    \u002F\u002F 注意事项2\n",[129,19095,19096],{"class":131,"line":9885},[129,19097,19098],{"class":198},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[129,19100,19101],{"class":131,"line":9912},[129,19102,19103],{"class":198},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[129,19105,19106],{"class":131,"line":9921},[129,19107,2414],{"emptyLinePlaceholder":56},[129,19109,19110],{"class":131,"line":9927},[129,19111,19112],{"class":198},"    \u002F\u002F3.隐士转换法\n",[129,19114,19115,19118,19120,19122,19124],{"class":131,"line":9935},[129,19116,19117],{"class":139},"    Person p4",[129,19119,185],{"class":135},[129,19121,585],{"class":188},[129,19123,195],{"class":139},[129,19125,19126],{"class":198},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[129,19128,19129,19132,19134,19137],{"class":131,"line":9940},[129,19130,19131],{"class":139},"    Person p5",[129,19133,185],{"class":135},[129,19135,19136],{"class":139},"p4;",[129,19138,19139],{"class":198}," \u002F\u002F 这里会调用拷贝构造函数\n",[129,19141,19142],{"class":131,"line":16619},[129,19143,1579],{"class":139},[129,19145,19146,19148,19150],{"class":131,"line":16625},[129,19147,143],{"class":135},[129,19149,1987],{"class":1977},[129,19151,1990],{"class":139},[129,19153,19154],{"class":131,"line":16648},[129,19155,1560],{"class":139},[129,19157,19158,19160],{"class":131,"line":16654},[129,19159,5648],{"class":1977},[129,19161,5651],{"class":139},[129,19163,19164,19166],{"class":131,"line":16677},[129,19165,5717],{"class":1977},[129,19167,5651],{"class":139},[129,19169,19170,19172,19174],{"class":131,"line":16691},[129,19171,4104],{"class":135},[129,19173,4107],{"class":188},[129,19175,1305],{"class":139},[129,19177,19178],{"class":131,"line":16711},[129,19179,1579],{"class":139},[14,19181,19182,19185],{},[289,19183,19184],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[100,19187,19189],{"id":19188},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19191,19192],{},"C++中拷贝构造函数调用时机通常有三种情况",[1146,19194,19195,19198,19201],{},[86,19196,19197],{},"使用一个已经创建完毕的对象来初始化一个新对象",[86,19199,19200],{},"值传递的方式给函数参数传值",[86,19202,19203],{},"以值方式返回局部对象",[120,19205,19207],{"className":122,"code":19206,"language":124,"meta":42,"style":42},"#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",[126,19208,19209,19215,19225,19229,19234,19238,19243,19248,19253,19259,19263,19267,19273,19277,19290,19294,19299,19311,19315,19323,19336,19340,19344,19360,19364,19373,19386,19390,19396,19400,19412,19416,19422,19426,19430,19438,19442,19455,19463,19481,19485,19490,19495,19510,19514,19527,19531,19539,19543,19547,19555,19559,19564,19573,19577,19581,19606,19616,19620,19628,19632,19643,19668,19672,19676,19680,19688,19692,19697,19702,19709,19714,19719,19724,19729,19733,19738,19742,19747,19751,19756,19761,19765,19769,19774,19779,19787],{"__ignoreMap":42},[129,19210,19211,19213],{"class":131,"line":132},[129,19212,1963],{"class":135},[129,19214,1966],{"class":244},[129,19216,19217,19219,19221,19223],{"class":131,"line":51},[129,19218,1971],{"class":135},[129,19220,1974],{"class":135},[129,19222,1978],{"class":1977},[129,19224,1305],{"class":139},[129,19226,19227],{"class":131,"line":1194},[129,19228,2414],{"emptyLinePlaceholder":56},[129,19230,19231],{"class":131,"line":1209},[129,19232,19233],{"class":198},"\u002F\u002F拷贝构造函数调用时机\n",[129,19235,19236],{"class":131,"line":1215},[129,19237,2414],{"emptyLinePlaceholder":56},[129,19239,19240],{"class":131,"line":1229},[129,19241,19242],{"class":198},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[129,19244,19245],{"class":131,"line":1235},[129,19246,19247],{"class":198},"\u002F\u002F2.值传递的方式给函数参数传值\n",[129,19249,19250],{"class":131,"line":1326},[129,19251,19252],{"class":198},"\u002F\u002F3.以值方式返回局部对象\n",[129,19254,19255,19257],{"class":131,"line":1332},[129,19256,14709],{"class":135},[129,19258,15186],{"class":1977},[129,19260,19261],{"class":131,"line":1344},[129,19262,1560],{"class":139},[129,19264,19265],{"class":131,"line":1626},[129,19266,14731],{"class":135},[129,19268,19269,19271],{"class":131,"line":1631},[129,19270,18534],{"class":1977},[129,19272,1990],{"class":139},[129,19274,19275],{"class":131,"line":1637},[129,19276,2044],{"class":139},[129,19278,19279,19281,19283,19286,19288],{"class":131,"line":1642},[129,19280,9684],{"class":139},[129,19282,1183],{"class":135},[129,19284,19285],{"class":244}," \"Person的默认构造函数调用\"",[129,19287,1459],{"class":135},[129,19289,8855],{"class":139},[129,19291,19292],{"class":131,"line":1656},[129,19293,2201],{"class":139},[129,19295,19296],{"class":131,"line":1661},[129,19297,19298],{"class":198},"    \u002F\u002F有参构造\n",[129,19300,19301,19303,19305,19307,19309],{"class":131,"line":1667},[129,19302,18534],{"class":1977},[129,19304,140],{"class":139},[129,19306,143],{"class":135},[129,19308,15704],{"class":5231},[129,19310,146],{"class":139},[129,19312,19313],{"class":131,"line":1688},[129,19314,2044],{"class":139},[129,19316,19317,19319,19321],{"class":131,"line":1693},[129,19318,15758],{"class":139},[129,19320,185],{"class":135},[129,19322,7812],{"class":139},[129,19324,19325,19327,19329,19332,19334],{"class":131,"line":1707},[129,19326,9684],{"class":139},[129,19328,1183],{"class":135},[129,19330,19331],{"class":244}," \"Person的有参构造函数调用\"",[129,19333,1459],{"class":135},[129,19335,8855],{"class":139},[129,19337,19338],{"class":131,"line":1712},[129,19339,2201],{"class":139},[129,19341,19342],{"class":131,"line":1741},[129,19343,18889],{"class":198},[129,19345,19346,19348,19350,19352,19354,19356,19358],{"class":131,"line":1746},[129,19347,18534],{"class":1977},[129,19349,140],{"class":139},[129,19351,6807],{"class":135},[129,19353,15584],{"class":1977},[129,19355,10599],{"class":135},[129,19357,14],{"class":5231},[129,19359,146],{"class":139},[129,19361,19362],{"class":131,"line":1763},[129,19363,2044],{"class":139},[129,19365,19366,19368,19370],{"class":131,"line":1768},[129,19367,15758],{"class":139},[129,19369,185],{"class":135},[129,19371,19372],{"class":139}," p.m_Age;\n",[129,19374,19375,19377,19379,19382,19384],{"class":131,"line":1773},[129,19376,9684],{"class":139},[129,19378,1183],{"class":135},[129,19380,19381],{"class":244}," \"Person的拷贝构造函数调用\"",[129,19383,1459],{"class":135},[129,19385,8855],{"class":139},[129,19387,19388],{"class":131,"line":1778},[129,19389,2201],{"class":139},[129,19391,19392,19394],{"class":131,"line":1792},[129,19393,18567],{"class":1977},[129,19395,1990],{"class":139},[129,19397,19398],{"class":131,"line":1797},[129,19399,2044],{"class":139},[129,19401,19402,19404,19406,19408,19410],{"class":131,"line":2591},[129,19403,9684],{"class":139},[129,19405,1183],{"class":135},[129,19407,18582],{"class":244},[129,19409,1459],{"class":135},[129,19411,8855],{"class":139},[129,19413,19414],{"class":131,"line":2605},[129,19415,2201],{"class":139},[129,19417,19418,19420],{"class":131,"line":2613},[129,19419,1999],{"class":135},[129,19421,15681],{"class":139},[129,19423,19424],{"class":131,"line":2618},[129,19425,4009],{"class":139},[129,19427,19428],{"class":131,"line":2624},[129,19429,19242],{"class":198},[129,19431,19432,19434,19436],{"class":131,"line":2630},[129,19433,5379],{"class":135},[129,19435,5603],{"class":1977},[129,19437,1990],{"class":139},[129,19439,19440],{"class":131,"line":2635},[129,19441,1560],{"class":139},[129,19443,19444,19447,19449,19451,19453],{"class":131,"line":7963},[129,19445,19446],{"class":139},"    Person ",[129,19448,7145],{"class":1977},[129,19450,140],{"class":139},[129,19452,839],{"class":188},[129,19454,2733],{"class":139},[129,19456,19457,19459,19461],{"class":131,"line":7987},[129,19458,19446],{"class":139},[129,19460,7048],{"class":1977},[129,19462,17530],{"class":139},[129,19464,19465,19467,19469,19472,19474,19477,19479],{"class":131,"line":7992},[129,19466,1565],{"class":139},[129,19468,1183],{"class":135},[129,19470,19471],{"class":244},"\"P2的年龄为：\"",[129,19473,1183],{"class":135},[129,19475,19476],{"class":139},"p2.m_Age",[129,19478,1183],{"class":135},[129,19480,1206],{"class":139},[129,19482,19483],{"class":131,"line":7998},[129,19484,1579],{"class":139},[129,19486,19487],{"class":131,"line":8025},[129,19488,19489],{"class":198},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[129,19491,19492],{"class":131,"line":8030},[129,19493,19494],{"class":198},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[129,19496,19497,19499,19502,19504,19506,19508],{"class":131,"line":8036},[129,19498,5379],{"class":135},[129,19500,19501],{"class":1977}," doWork",[129,19503,140],{"class":139},[129,19505,19061],{"class":1977},[129,19507,6840],{"class":5231},[129,19509,146],{"class":139},[129,19511,19512],{"class":131,"line":8048},[129,19513,1560],{"class":139},[129,19515,19516,19518,19520,19523,19525],{"class":131,"line":8060},[129,19517,6544],{"class":139},[129,19519,1183],{"class":135},[129,19521,19522],{"class":244}," \"doWork函数调用\"",[129,19524,1459],{"class":135},[129,19526,8855],{"class":139},[129,19528,19529],{"class":131,"line":8072},[129,19530,1579],{"class":139},[129,19532,19533,19535,19537],{"class":131,"line":9731},[129,19534,5379],{"class":135},[129,19536,5672],{"class":1977},[129,19538,1990],{"class":139},[129,19540,19541],{"class":131,"line":9756},[129,19542,1560],{"class":139},[129,19544,19545],{"class":131,"line":9779},[129,19546,15328],{"class":139},[129,19548,19549,19552],{"class":131,"line":9803},[129,19550,19551],{"class":1977},"    doWork",[129,19553,19554],{"class":139},"(p);\n",[129,19556,19557],{"class":131,"line":9808},[129,19558,1579],{"class":139},[129,19560,19561],{"class":131,"line":9813},[129,19562,19563],{"class":198},"\u002F\u002F 3.以值方式返回局部对象\n",[129,19565,19566,19568,19571],{"class":131,"line":9818},[129,19567,19061],{"class":1977},[129,19569,19570],{"class":1977}," doWork2",[129,19572,1990],{"class":139},[129,19574,19575],{"class":131,"line":9827},[129,19576,1560],{"class":139},[129,19578,19579],{"class":131,"line":9832},[129,19580,19051],{"class":139},[129,19582,19583,19585,19587,19589,19591,19593,19595,19597,19599,19601,19603],{"class":131,"line":9838},[129,19584,1565],{"class":139},[129,19586,1183],{"class":135},[129,19588,140],{"class":139},[129,19590,143],{"class":135},[129,19592,6533],{"class":135},[129,19594,568],{"class":139},[129,19596,492],{"class":135},[129,19598,7145],{"class":139},[129,19600,1183],{"class":135},[129,19602,1253],{"class":139},[129,19604,19605],{"class":198},"\u002F\u002F打印p1的地址\n",[129,19607,19608,19610,19613],{"class":131,"line":9859},[129,19609,4104],{"class":135},[129,19611,19612],{"class":139}," p1;",[129,19614,19615],{"class":198},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[129,19617,19618],{"class":131,"line":9865},[129,19619,1579],{"class":139},[129,19621,19622,19624,19626],{"class":131,"line":9879},[129,19623,5379],{"class":135},[129,19625,5744],{"class":1977},[129,19627,1990],{"class":139},[129,19629,19630],{"class":131,"line":9885},[129,19631,1560],{"class":139},[129,19633,19634,19637,19639,19641],{"class":131,"line":9912},[129,19635,19636],{"class":139},"    Person p ",[129,19638,185],{"class":135},[129,19640,19570],{"class":1977},[129,19642,5651],{"class":139},[129,19644,19645,19647,19649,19651,19653,19655,19657,19659,19661,19663,19665],{"class":131,"line":9921},[129,19646,1565],{"class":139},[129,19648,1183],{"class":135},[129,19650,140],{"class":139},[129,19652,143],{"class":135},[129,19654,6533],{"class":135},[129,19656,568],{"class":139},[129,19658,492],{"class":135},[129,19660,14],{"class":139},[129,19662,1183],{"class":135},[129,19664,1253],{"class":139},[129,19666,19667],{"class":198},"\u002F\u002F打印p的地址\n",[129,19669,19670],{"class":131,"line":9927},[129,19671,1579],{"class":139},[129,19673,19674],{"class":131,"line":9935},[129,19675,2414],{"emptyLinePlaceholder":56},[129,19677,19678],{"class":131,"line":9940},[129,19679,2414],{"emptyLinePlaceholder":56},[129,19681,19682,19684,19686],{"class":131,"line":16619},[129,19683,143],{"class":135},[129,19685,1987],{"class":1977},[129,19687,1990],{"class":139},[129,19689,19690],{"class":131,"line":16625},[129,19691,1560],{"class":139},[129,19693,19694],{"class":131,"line":16648},[129,19695,19696],{"class":198},"    \u002F\u002F test01();\n",[129,19698,19699],{"class":131,"line":16654},[129,19700,19701],{"class":198},"    \u002F\u002F test02();\n",[129,19703,19704,19707],{"class":131,"line":16677},[129,19705,19706],{"class":1977},"    test03",[129,19708,5651],{"class":139},[129,19710,19711],{"class":131,"line":16691},[129,19712,19713],{"class":198},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[129,19715,19716],{"class":131,"line":16711},[129,19717,19718],{"class":198},"\u002F\u002F 输出结果如下：\n",[129,19720,19721],{"class":131,"line":16717},[129,19722,19723],{"class":198},"\u002F\u002F Person的默认构造函数调用\n",[129,19725,19726],{"class":131,"line":16728},[129,19727,19728],{"class":198},"\u002F\u002F 0x7fffffffceec\n",[129,19730,19731],{"class":131,"line":16751},[129,19732,19728],{"class":198},[129,19734,19735],{"class":131,"line":16773},[129,19736,19737],{"class":198},"\u002F\u002F Person的析构函数调用\n",[129,19739,19740],{"class":131,"line":16778},[129,19741,2414],{"emptyLinePlaceholder":56},[129,19743,19744],{"class":131,"line":16784},[129,19745,19746],{"class":198},"\u002F\u002F 之前的输出结果如下：\n",[129,19748,19749],{"class":131,"line":16798},[129,19750,19723],{"class":198},[129,19752,19753],{"class":131,"line":16811},[129,19754,19755],{"class":198},"\u002F\u002F 地址\n",[129,19757,19758],{"class":131,"line":16816},[129,19759,19760],{"class":198},"\u002F\u002F Person的拷贝构造函数调用\n",[129,19762,19763],{"class":131,"line":16830},[129,19764,19737],{"class":198},[129,19766,19767],{"class":131,"line":16835},[129,19768,19755],{"class":198},[129,19770,19771],{"class":131,"line":16841},[129,19772,19773],{"class":198},"\u002F\u002F (这两次输出的地址也是不同的) \n",[129,19775,19776],{"class":131,"line":16846},[129,19777,19778],{"class":198},"\u002F\u002F Person的析构函数调用     \n",[129,19780,19781,19783,19785],{"class":131,"line":16860},[129,19782,4104],{"class":135},[129,19784,4107],{"class":188},[129,19786,1305],{"class":139},[129,19788,19789],{"class":131,"line":16865},[129,19790,1579],{"class":139},[14,19792,19793],{},"简化版理解",[120,19795,19797],{"className":122,"code":19796,"language":124,"meta":42,"style":42},"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",[126,19798,19799,19807,19811,19817,19830,19841,19845,19857,19870,19878,19882,19898,19911,19920,19924,19929,19935,19948,19952,19956,19963,19967,19971,19976,19984,19988,20004,20017,20030,20034,20039,20047,20051,20055,20060,20065,20081,20089,20096,20102,20106,20110,20115,20123,20127,20131,20154,20161,20165,20169,20177,20181,20191,20213,20217,20221,20225,20233,20237,20242,20247,20253,20257,20267,20271,20279],{"__ignoreMap":42},[129,19800,19801,19803,19805],{"class":131,"line":132},[129,19802,14709],{"class":135},[129,19804,15584],{"class":1977},[129,19806,15587],{"class":139},[129,19808,19809],{"class":131,"line":51},[129,19810,14731],{"class":135},[129,19812,19813,19815],{"class":131,"line":1194},[129,19814,18534],{"class":1977},[129,19816,10868],{"class":139},[129,19818,19819,19821,19823,19826,19828],{"class":131,"line":1209},[129,19820,9684],{"class":139},[129,19822,1183],{"class":135},[129,19824,19825],{"class":244}," \"无参构造函数!\"",[129,19827,1459],{"class":135},[129,19829,8855],{"class":139},[129,19831,19832,19835,19837,19839],{"class":131,"line":1215},[129,19833,19834],{"class":139},"        mAge ",[129,19836,185],{"class":135},[129,19838,4107],{"class":188},[129,19840,1305],{"class":139},[129,19842,19843],{"class":131,"line":1229},[129,19844,2201],{"class":139},[129,19846,19847,19849,19851,19853,19855],{"class":131,"line":1235},[129,19848,18534],{"class":1977},[129,19850,140],{"class":139},[129,19852,143],{"class":135},[129,19854,15704],{"class":5231},[129,19856,12457],{"class":139},[129,19858,19859,19861,19863,19866,19868],{"class":131,"line":1326},[129,19860,9684],{"class":139},[129,19862,1183],{"class":135},[129,19864,19865],{"class":244}," \"有参构造函数!\"",[129,19867,1459],{"class":135},[129,19869,8855],{"class":139},[129,19871,19872,19874,19876],{"class":131,"line":1332},[129,19873,19834],{"class":139},[129,19875,185],{"class":135},[129,19877,7812],{"class":139},[129,19879,19880],{"class":131,"line":1344},[129,19881,2201],{"class":139},[129,19883,19884,19886,19888,19890,19892,19894,19896],{"class":131,"line":1626},[129,19885,18534],{"class":1977},[129,19887,140],{"class":139},[129,19889,6807],{"class":135},[129,19891,15584],{"class":1977},[129,19893,492],{"class":135},[129,19895,6840],{"class":5231},[129,19897,12457],{"class":139},[129,19899,19900,19902,19904,19907,19909],{"class":131,"line":1631},[129,19901,9684],{"class":139},[129,19903,1183],{"class":135},[129,19905,19906],{"class":244}," \"拷贝构造函数!\"",[129,19908,1459],{"class":135},[129,19910,8855],{"class":139},[129,19912,19913,19915,19917],{"class":131,"line":1637},[129,19914,19834],{"class":139},[129,19916,185],{"class":135},[129,19918,19919],{"class":139}," p.mAge;\n",[129,19921,19922],{"class":131,"line":1642},[129,19923,2201],{"class":139},[129,19925,19926],{"class":131,"line":1656},[129,19927,19928],{"class":198},"    \u002F\u002F析构函数在释放内存之前调用\n",[129,19930,19931,19933],{"class":131,"line":1661},[129,19932,18567],{"class":1977},[129,19934,10868],{"class":139},[129,19936,19937,19939,19941,19944,19946],{"class":131,"line":1667},[129,19938,9684],{"class":139},[129,19940,1183],{"class":135},[129,19942,19943],{"class":244}," \"析构函数!\"",[129,19945,1459],{"class":135},[129,19947,8855],{"class":139},[129,19949,19950],{"class":131,"line":1688},[129,19951,2201],{"class":139},[129,19953,19954],{"class":131,"line":1693},[129,19955,14731],{"class":135},[129,19957,19958,19960],{"class":131,"line":1707},[129,19959,1999],{"class":135},[129,19961,19962],{"class":139}," mAge;\n",[129,19964,19965],{"class":131,"line":1712},[129,19966,4009],{"class":139},[129,19968,19969],{"class":131,"line":1741},[129,19970,2414],{"emptyLinePlaceholder":56},[129,19972,19973],{"class":131,"line":1746},[129,19974,19975],{"class":198},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[129,19977,19978,19980,19982],{"class":131,"line":1763},[129,19979,5379],{"class":135},[129,19981,5603],{"class":1977},[129,19983,10868],{"class":139},[129,19985,19986],{"class":131,"line":1768},[129,19987,2414],{"emptyLinePlaceholder":56},[129,19989,19990,19992,19995,19997,19999,20001],{"class":131,"line":1773},[129,19991,19446],{"class":139},[129,19993,19994],{"class":1977},"man",[129,19996,140],{"class":139},[129,19998,450],{"class":188},[129,20000,5981],{"class":139},[129,20002,20003],{"class":198}," \u002F\u002Fp对象已经创建完毕\n",[129,20005,20006,20008,20011,20014],{"class":131,"line":1778},[129,20007,19446],{"class":139},[129,20009,20010],{"class":1977},"newman",[129,20012,20013],{"class":139},"(man);",[129,20015,20016],{"class":198}," \u002F\u002F调用拷贝构造函数\n",[129,20018,20019,20022,20024,20027],{"class":131,"line":1792},[129,20020,20021],{"class":139},"    Person newman2 ",[129,20023,185],{"class":135},[129,20025,20026],{"class":139}," man;",[129,20028,20029],{"class":198}," \u002F\u002F拷贝构造\n",[129,20031,20032],{"class":131,"line":1797},[129,20033,2414],{"emptyLinePlaceholder":56},[129,20035,20036],{"class":131,"line":2591},[129,20037,20038],{"class":198},"    \u002F\u002FPerson newman3;\n",[129,20040,20041,20044],{"class":131,"line":2605},[129,20042,20043],{"class":198},"    \u002F\u002Fnewman3 = man;",[129,20045,20046],{"class":198}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[129,20048,20049],{"class":131,"line":2613},[129,20050,1579],{"class":139},[129,20052,20053],{"class":131,"line":2618},[129,20054,2414],{"emptyLinePlaceholder":56},[129,20056,20057],{"class":131,"line":2624},[129,20058,20059],{"class":198},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[129,20061,20062],{"class":131,"line":2630},[129,20063,20064],{"class":198},"\u002F\u002F相当于Person p1 = p;\n",[129,20066,20067,20069,20071,20073,20075,20078],{"class":131,"line":2635},[129,20068,5379],{"class":135},[129,20070,19501],{"class":1977},[129,20072,140],{"class":139},[129,20074,19061],{"class":1977},[129,20076,20077],{"class":5231}," p1",[129,20079,20080],{"class":139},") {}\n",[129,20082,20083,20085,20087],{"class":131,"line":7963},[129,20084,5379],{"class":135},[129,20086,5672],{"class":1977},[129,20088,10868],{"class":139},[129,20090,20091,20093],{"class":131,"line":7987},[129,20092,18619],{"class":139},[129,20094,20095],{"class":198}," \u002F\u002F无参构造函数\n",[129,20097,20098,20100],{"class":131,"line":7992},[129,20099,19551],{"class":1977},[129,20101,19554],{"class":139},[129,20103,20104],{"class":131,"line":7998},[129,20105,1579],{"class":139},[129,20107,20108],{"class":131,"line":8025},[129,20109,2414],{"emptyLinePlaceholder":56},[129,20111,20112],{"class":131,"line":8030},[129,20113,20114],{"class":198},"\u002F\u002F3. 以值方式返回局部对象\n",[129,20116,20117,20119,20121],{"class":131,"line":8036},[129,20118,19061],{"class":1977},[129,20120,19570],{"class":1977},[129,20122,1990],{"class":139},[129,20124,20125],{"class":131,"line":8048},[129,20126,1560],{"class":139},[129,20128,20129],{"class":131,"line":8060},[129,20130,19051],{"class":139},[129,20132,20133,20135,20137,20139,20141,20143,20145,20147,20150,20152],{"class":131,"line":8072},[129,20134,6544],{"class":139},[129,20136,1183],{"class":135},[129,20138,1672],{"class":139},[129,20140,143],{"class":135},[129,20142,6533],{"class":135},[129,20144,568],{"class":139},[129,20146,492],{"class":135},[129,20148,20149],{"class":139},"p1 ",[129,20151,1183],{"class":135},[129,20153,8855],{"class":139},[129,20155,20156,20158],{"class":131,"line":9731},[129,20157,4104],{"class":135},[129,20159,20160],{"class":139}," p1;\n",[129,20162,20163],{"class":131,"line":9756},[129,20164,1579],{"class":139},[129,20166,20167],{"class":131,"line":9779},[129,20168,2414],{"emptyLinePlaceholder":56},[129,20170,20171,20173,20175],{"class":131,"line":9803},[129,20172,5379],{"class":135},[129,20174,5744],{"class":1977},[129,20176,1990],{"class":139},[129,20178,20179],{"class":131,"line":9808},[129,20180,1560],{"class":139},[129,20182,20183,20185,20187,20189],{"class":131,"line":9813},[129,20184,19636],{"class":139},[129,20186,185],{"class":135},[129,20188,19570],{"class":1977},[129,20190,5651],{"class":139},[129,20192,20193,20195,20197,20199,20201,20203,20205,20207,20209,20211],{"class":131,"line":9818},[129,20194,6544],{"class":139},[129,20196,1183],{"class":135},[129,20198,1672],{"class":139},[129,20200,143],{"class":135},[129,20202,6533],{"class":135},[129,20204,568],{"class":139},[129,20206,492],{"class":135},[129,20208,11463],{"class":139},[129,20210,1183],{"class":135},[129,20212,8855],{"class":139},[129,20214,20215],{"class":131,"line":9827},[129,20216,1579],{"class":139},[129,20218,20219],{"class":131,"line":9832},[129,20220,2414],{"emptyLinePlaceholder":56},[129,20222,20223],{"class":131,"line":9838},[129,20224,2414],{"emptyLinePlaceholder":56},[129,20226,20227,20229,20231],{"class":131,"line":9859},[129,20228,143],{"class":135},[129,20230,1987],{"class":1977},[129,20232,10868],{"class":139},[129,20234,20235],{"class":131,"line":9865},[129,20236,2414],{"emptyLinePlaceholder":56},[129,20238,20239],{"class":131,"line":9879},[129,20240,20241],{"class":198},"    \u002F\u002Ftest01();\n",[129,20243,20244],{"class":131,"line":9885},[129,20245,20246],{"class":198},"    \u002F\u002Ftest02();\n",[129,20248,20249,20251],{"class":131,"line":9912},[129,20250,19706],{"class":1977},[129,20252,5651],{"class":139},[129,20254,20255],{"class":131,"line":9921},[129,20256,2414],{"emptyLinePlaceholder":56},[129,20258,20259,20261,20263,20265],{"class":131,"line":9927},[129,20260,2317],{"class":1977},[129,20262,140],{"class":139},[129,20264,2322],{"class":244},[129,20266,2733],{"class":139},[129,20268,20269],{"class":131,"line":9935},[129,20270,2414],{"emptyLinePlaceholder":56},[129,20272,20273,20275,20277],{"class":131,"line":9940},[129,20274,4104],{"class":135},[129,20276,4107],{"class":188},[129,20278,1305],{"class":139},[129,20280,20281],{"class":131,"line":16619},[129,20282,1579],{"class":139},[100,20284,20286],{"id":20285},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20288,20289],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20291,20292],{},"1．默认构造函数(无参，函数体为空)",[14,20294,20295],{},"2．默认析构函数(无参，函数体为空)",[14,20297,20298],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20300,20301],{},"构造函数调用规则如下：",[1146,20303,20304,20307],{},[86,20305,20306],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[86,20308,20309],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[120,20311,20313],{"className":122,"code":20312,"language":124,"meta":42,"style":42},"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",[126,20314,20315,20323,20327,20332,20338,20350,20354,20359,20371,20380,20392,20396,20400,20416,20425,20437,20441,20445,20451,20463,20467,20471,20477,20481,20485,20493,20497,20509,20514,20522,20526,20544,20548,20552,20560,20564,20569,20577,20592,20605,20609,20614,20621,20637,20650,20654,20658,20666,20670,20676,20680,20690,20694,20702],{"__ignoreMap":42},[129,20316,20317,20319,20321],{"class":131,"line":132},[129,20318,14709],{"class":135},[129,20320,15584],{"class":1977},[129,20322,15587],{"class":139},[129,20324,20325],{"class":131,"line":51},[129,20326,14731],{"class":135},[129,20328,20329],{"class":131,"line":1194},[129,20330,20331],{"class":198},"    \u002F\u002F无参（默认）构造函数\n",[129,20333,20334,20336],{"class":131,"line":1209},[129,20335,18534],{"class":1977},[129,20337,10868],{"class":139},[129,20339,20340,20342,20344,20346,20348],{"class":131,"line":1215},[129,20341,9684],{"class":139},[129,20343,1183],{"class":135},[129,20345,19825],{"class":244},[129,20347,1459],{"class":135},[129,20349,8855],{"class":139},[129,20351,20352],{"class":131,"line":1229},[129,20353,2201],{"class":139},[129,20355,20356],{"class":131,"line":1235},[129,20357,20358],{"class":198},"    \u002F\u002F有参构造函数\n",[129,20360,20361,20363,20365,20367,20369],{"class":131,"line":1326},[129,20362,18534],{"class":1977},[129,20364,140],{"class":139},[129,20366,143],{"class":135},[129,20368,1413],{"class":5231},[129,20370,12457],{"class":139},[129,20372,20373,20376,20378],{"class":131,"line":1332},[129,20374,20375],{"class":139},"        age ",[129,20377,185],{"class":135},[129,20379,1447],{"class":139},[129,20381,20382,20384,20386,20388,20390],{"class":131,"line":1344},[129,20383,9684],{"class":139},[129,20385,1183],{"class":135},[129,20387,19865],{"class":244},[129,20389,1459],{"class":135},[129,20391,8855],{"class":139},[129,20393,20394],{"class":131,"line":1626},[129,20395,2201],{"class":139},[129,20397,20398],{"class":131,"line":1631},[129,20399,18889],{"class":198},[129,20401,20402,20404,20406,20408,20410,20412,20414],{"class":131,"line":1637},[129,20403,18534],{"class":1977},[129,20405,140],{"class":139},[129,20407,6807],{"class":135},[129,20409,15584],{"class":1977},[129,20411,492],{"class":135},[129,20413,6840],{"class":5231},[129,20415,12457],{"class":139},[129,20417,20418,20420,20422],{"class":131,"line":1642},[129,20419,20375],{"class":139},[129,20421,185],{"class":135},[129,20423,20424],{"class":139}," p.age;\n",[129,20426,20427,20429,20431,20433,20435],{"class":131,"line":1656},[129,20428,9684],{"class":139},[129,20430,1183],{"class":135},[129,20432,19906],{"class":244},[129,20434,1459],{"class":135},[129,20436,8855],{"class":139},[129,20438,20439],{"class":131,"line":1661},[129,20440,2201],{"class":139},[129,20442,20443],{"class":131,"line":1667},[129,20444,18562],{"class":198},[129,20446,20447,20449],{"class":131,"line":1688},[129,20448,18567],{"class":1977},[129,20450,10868],{"class":139},[129,20452,20453,20455,20457,20459,20461],{"class":131,"line":1693},[129,20454,9684],{"class":139},[129,20456,1183],{"class":135},[129,20458,19943],{"class":244},[129,20460,1459],{"class":135},[129,20462,8855],{"class":139},[129,20464,20465],{"class":131,"line":1707},[129,20466,2201],{"class":139},[129,20468,20469],{"class":131,"line":1712},[129,20470,14731],{"class":135},[129,20472,20473,20475],{"class":131,"line":1741},[129,20474,1999],{"class":135},[129,20476,7812],{"class":139},[129,20478,20479],{"class":131,"line":1746},[129,20480,4009],{"class":139},[129,20482,20483],{"class":131,"line":1763},[129,20484,2414],{"emptyLinePlaceholder":56},[129,20486,20487,20489,20491],{"class":131,"line":1768},[129,20488,5379],{"class":135},[129,20490,5603],{"class":1977},[129,20492,1990],{"class":139},[129,20494,20495],{"class":131,"line":1773},[129,20496,1560],{"class":139},[129,20498,20499,20501,20503,20505,20507],{"class":131,"line":1778},[129,20500,19446],{"class":139},[129,20502,7145],{"class":1977},[129,20504,140],{"class":139},[129,20506,789],{"class":188},[129,20508,2733],{"class":139},[129,20510,20511],{"class":131,"line":1792},[129,20512,20513],{"class":198},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[129,20515,20516,20518,20520],{"class":131,"line":1797},[129,20517,19446],{"class":139},[129,20519,7048],{"class":1977},[129,20521,17530],{"class":139},[129,20523,20524],{"class":131,"line":2591},[129,20525,2414],{"emptyLinePlaceholder":56},[129,20527,20528,20530,20532,20535,20537,20540,20542],{"class":131,"line":2605},[129,20529,6544],{"class":139},[129,20531,1183],{"class":135},[129,20533,20534],{"class":244}," \"p2的年龄为： \"",[129,20536,1459],{"class":135},[129,20538,20539],{"class":139}," p2.age ",[129,20541,1183],{"class":135},[129,20543,8855],{"class":139},[129,20545,20546],{"class":131,"line":2613},[129,20547,1579],{"class":139},[129,20549,20550],{"class":131,"line":2618},[129,20551,2414],{"emptyLinePlaceholder":56},[129,20553,20554,20556,20558],{"class":131,"line":2624},[129,20555,5379],{"class":135},[129,20557,5672],{"class":1977},[129,20559,1990],{"class":139},[129,20561,20562],{"class":131,"line":2630},[129,20563,1560],{"class":139},[129,20565,20566],{"class":131,"line":2635},[129,20567,20568],{"class":198},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[129,20570,20571,20574],{"class":131,"line":7963},[129,20572,20573],{"class":139},"    Person p1;",[129,20575,20576],{"class":198}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[129,20578,20579,20581,20583,20585,20587,20589],{"class":131,"line":7987},[129,20580,19446],{"class":139},[129,20582,7048],{"class":1977},[129,20584,140],{"class":139},[129,20586,585],{"class":188},[129,20588,5981],{"class":139},[129,20590,20591],{"class":198}," \u002F\u002F用户提供的有参\n",[129,20593,20594,20596,20599,20602],{"class":131,"line":7992},[129,20595,19446],{"class":139},[129,20597,20598],{"class":1977},"p3",[129,20600,20601],{"class":139},"(p2);",[129,20603,20604],{"class":198}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[129,20606,20607],{"class":131,"line":7998},[129,20608,2414],{"emptyLinePlaceholder":56},[129,20610,20611],{"class":131,"line":8025},[129,20612,20613],{"class":198},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[129,20615,20616,20619],{"class":131,"line":8030},[129,20617,20618],{"class":139},"    Person p4;",[129,20620,20576],{"class":198},[129,20622,20623,20625,20628,20630,20632,20634],{"class":131,"line":8036},[129,20624,19446],{"class":139},[129,20626,20627],{"class":1977},"p5",[129,20629,140],{"class":139},[129,20631,585],{"class":188},[129,20633,5981],{"class":139},[129,20635,20636],{"class":198}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[129,20638,20639,20641,20644,20647],{"class":131,"line":8048},[129,20640,19446],{"class":139},[129,20642,20643],{"class":1977},"p6",[129,20645,20646],{"class":139},"(p5);",[129,20648,20649],{"class":198}," \u002F\u002F用户自己提供拷贝构造\n",[129,20651,20652],{"class":131,"line":8060},[129,20653,1579],{"class":139},[129,20655,20656],{"class":131,"line":8072},[129,20657,2414],{"emptyLinePlaceholder":56},[129,20659,20660,20662,20664],{"class":131,"line":9731},[129,20661,143],{"class":135},[129,20663,1987],{"class":1977},[129,20665,10868],{"class":139},[129,20667,20668],{"class":131,"line":9756},[129,20669,2414],{"emptyLinePlaceholder":56},[129,20671,20672,20674],{"class":131,"line":9779},[129,20673,5648],{"class":1977},[129,20675,5651],{"class":139},[129,20677,20678],{"class":131,"line":9803},[129,20679,2414],{"emptyLinePlaceholder":56},[129,20681,20682,20684,20686,20688],{"class":131,"line":9808},[129,20683,2317],{"class":1977},[129,20685,140],{"class":139},[129,20687,2322],{"class":244},[129,20689,2733],{"class":139},[129,20691,20692],{"class":131,"line":9813},[129,20693,2414],{"emptyLinePlaceholder":56},[129,20695,20696,20698,20700],{"class":131,"line":9818},[129,20697,4104],{"class":135},[129,20699,4107],{"class":188},[129,20701,1305],{"class":139},[129,20703,20704],{"class":131,"line":9827},[129,20705,1579],{"class":139},[100,20707,20709],{"id":20708},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20711,20712],{},"浅拷贝：简单的赋值拷贝操作",[14,20714,20715],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[120,20717,20719],{"className":122,"code":20718,"language":124,"meta":42,"style":42},"#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",[126,20720,20721,20727,20737,20743,20747,20751,20756,20762,20766,20779,20783,20787,20794,20798,20808,20823,20836,20840,20845,20850,20866,20870,20883,20888,20893,20898,20907,20912,20927,20931,20935,20939,20945,20949,20954,20969,20973,20984,20998,21002,21011,21015,21021,21033,21037,21045,21049,21066,21097,21105,21133,21137,21141,21149,21153,21159],{"__ignoreMap":42},[129,20722,20723,20725],{"class":131,"line":132},[129,20724,1963],{"class":135},[129,20726,1966],{"class":244},[129,20728,20729,20731,20733,20735],{"class":131,"line":51},[129,20730,1971],{"class":135},[129,20732,1974],{"class":135},[129,20734,1978],{"class":1977},[129,20736,1305],{"class":139},[129,20738,20739,20741],{"class":131,"line":1194},[129,20740,14709],{"class":135},[129,20742,15186],{"class":1977},[129,20744,20745],{"class":131,"line":1209},[129,20746,1560],{"class":139},[129,20748,20749],{"class":131,"line":1215},[129,20750,14731],{"class":135},[129,20752,20753],{"class":131,"line":1229},[129,20754,20755],{"class":198},"    \u002F\u002F默认构造函数\n",[129,20757,20758,20760],{"class":131,"line":1235},[129,20759,18534],{"class":1977},[129,20761,1990],{"class":139},[129,20763,20764],{"class":131,"line":1326},[129,20765,2044],{"class":139},[129,20767,20768,20770,20772,20775,20777],{"class":131,"line":1332},[129,20769,3465],{"class":139},[129,20771,1183],{"class":135},[129,20773,20774],{"class":244},"\"默认构造函数\"",[129,20776,1183],{"class":135},[129,20778,1206],{"class":139},[129,20780,20781],{"class":131,"line":1344},[129,20782,2201],{"class":139},[129,20784,20785],{"class":131,"line":1626},[129,20786,20358],{"class":198},[129,20788,20789,20791],{"class":131,"line":1631},[129,20790,18567],{"class":1977},[129,20792,20793],{"class":139},"(int age,int height)\n",[129,20795,20796],{"class":131,"line":1637},[129,20797,2044],{"class":139},[129,20799,20800,20803,20805],{"class":131,"line":1642},[129,20801,20802],{"class":139},"        m_Age",[129,20804,185],{"class":135},[129,20806,20807],{"class":139},"age;\n",[129,20809,20810,20813,20815,20817,20820],{"class":131,"line":1656},[129,20811,20812],{"class":139},"        m_Height",[129,20814,11732],{"class":135},[129,20816,2396],{"class":135},[129,20818,20819],{"class":139},"(height);",[129,20821,20822],{"class":198},"\u002F\u002F放到堆区\n",[129,20824,20825,20827,20829,20832,20834],{"class":131,"line":1661},[129,20826,3465],{"class":139},[129,20828,1183],{"class":135},[129,20830,20831],{"class":244},"\"有参构造函数\"",[129,20833,1183],{"class":135},[129,20835,1206],{"class":139},[129,20837,20838],{"class":131,"line":1667},[129,20839,2201],{"class":139},[129,20841,20842],{"class":131,"line":1688},[129,20843,20844],{"class":198},"    \u002F\u002F深拷贝解决上述问题\n",[129,20846,20847],{"class":131,"line":1693},[129,20848,20849],{"class":198},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[129,20851,20852,20854,20856,20858,20860,20862,20864],{"class":131,"line":1707},[129,20853,18534],{"class":1977},[129,20855,140],{"class":139},[129,20857,6807],{"class":135},[129,20859,15584],{"class":1977},[129,20861,10599],{"class":135},[129,20863,14],{"class":5231},[129,20865,146],{"class":139},[129,20867,20868],{"class":131,"line":1712},[129,20869,2044],{"class":139},[129,20871,20872,20874,20876,20879,20881],{"class":131,"line":1741},[129,20873,3465],{"class":139},[129,20875,1183],{"class":135},[129,20877,20878],{"class":244},"\"拷贝构造函数\"",[129,20880,1183],{"class":135},[129,20882,1206],{"class":139},[129,20884,20885],{"class":131,"line":1746},[129,20886,20887],{"class":198},"        \u002F\u002F编译器默认的写如下注释部分\n",[129,20889,20890],{"class":131,"line":1763},[129,20891,20892],{"class":198},"        \u002F\u002Fm_Age=p.m_Age;\n",[129,20894,20895],{"class":131,"line":1768},[129,20896,20897],{"class":198},"        \u002F\u002Fm_Height=p.m_Height;\n",[129,20899,20900,20902,20904],{"class":131,"line":1773},[129,20901,20802],{"class":139},[129,20903,185],{"class":135},[129,20905,20906],{"class":139},"p.m_Age;\n",[129,20908,20909],{"class":131,"line":1778},[129,20910,20911],{"class":198},"        \u002F\u002F深拷贝操作\n",[129,20913,20914,20916,20918,20920,20922,20924],{"class":131,"line":1792},[129,20915,20812],{"class":139},[129,20917,11732],{"class":135},[129,20919,2396],{"class":135},[129,20921,140],{"class":139},[129,20923,594],{"class":135},[129,20925,20926],{"class":139},"p.m_Height);\n",[129,20928,20929],{"class":131,"line":1797},[129,20930,2201],{"class":139},[129,20932,20933],{"class":131,"line":2591},[129,20934,2414],{"emptyLinePlaceholder":56},[129,20936,20937],{"class":131,"line":2605},[129,20938,18562],{"class":198},[129,20940,20941,20943],{"class":131,"line":2613},[129,20942,18567],{"class":1977},[129,20944,1990],{"class":139},[129,20946,20947],{"class":131,"line":2618},[129,20948,2044],{"class":139},[129,20950,20951],{"class":131,"line":2624},[129,20952,20953],{"class":198},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[129,20955,20956,20958,20961,20964,20967],{"class":131,"line":2630},[129,20957,2511],{"class":135},[129,20959,20960],{"class":139},"(m_Height ",[129,20962,20963],{"class":135},"!=",[129,20965,20966],{"class":188}," NULL",[129,20968,146],{"class":139},[129,20970,20971],{"class":131,"line":2635},[129,20972,2524],{"class":139},[129,20974,20975,20978,20981],{"class":131,"line":7963},[129,20976,20977],{"class":135},"            delete",[129,20979,20980],{"class":139}," m_Height;",[129,20982,20983],{"class":198}," \u002F\u002F释放堆区内存\n",[129,20985,20986,20989,20991,20993,20995],{"class":131,"line":7987},[129,20987,20988],{"class":139},"            m_Height",[129,20990,185],{"class":135},[129,20992,2406],{"class":188},[129,20994,195],{"class":139},[129,20996,20997],{"class":198}," \u002F\u002F防止野指针\n",[129,20999,21000],{"class":131,"line":7992},[129,21001,2543],{"class":139},[129,21003,21004,21006,21008],{"class":131,"line":7998},[129,21005,3465],{"class":139},[129,21007,1183],{"class":135},[129,21009,21010],{"class":244},"\"Person的析构函数调用\"\n",[129,21012,21013],{"class":131,"line":8025},[129,21014,2201],{"class":139},[129,21016,21017,21019],{"class":131,"line":8030},[129,21018,1999],{"class":135},[129,21020,15681],{"class":139},[129,21022,21023,21025,21027,21030],{"class":131,"line":8036},[129,21024,1999],{"class":135},[129,21026,6533],{"class":135},[129,21028,21029],{"class":139},"m_Height;",[129,21031,21032],{"class":198}," \u002F\u002F定义一个指针，指向身高\n",[129,21034,21035],{"class":131,"line":8048},[129,21036,4009],{"class":139},[129,21038,21039,21041,21043],{"class":131,"line":8060},[129,21040,5379],{"class":135},[129,21042,5603],{"class":1977},[129,21044,1990],{"class":139},[129,21046,21047],{"class":131,"line":8072},[129,21048,1560],{"class":139},[129,21050,21051,21053,21055,21057,21059,21061,21064],{"class":131,"line":9731},[129,21052,19446],{"class":139},[129,21054,7145],{"class":1977},[129,21056,140],{"class":139},[129,21058,789],{"class":188},[129,21060,517],{"class":139},[129,21062,21063],{"class":188},"160",[129,21065,2733],{"class":139},[129,21067,21068,21070,21072,21075,21077,21080,21082,21085,21087,21090,21092,21094],{"class":131,"line":9756},[129,21069,1565],{"class":139},[129,21071,1183],{"class":135},[129,21073,21074],{"class":244},"\"p1的年龄为:\"",[129,21076,1183],{"class":135},[129,21078,21079],{"class":139},"p1.m_Age",[129,21081,1183],{"class":135},[129,21083,21084],{"class":244},"\"身高为：\"",[129,21086,6434],{"class":135},[129,21088,21089],{"class":139},"p1.m_Height",[129,21091,1183],{"class":135},[129,21093,1253],{"class":139},[129,21095,21096],{"class":198},"  \u002F\u002F18\n",[129,21098,21099,21101,21103],{"class":131,"line":9779},[129,21100,19446],{"class":139},[129,21102,7048],{"class":1977},[129,21104,17530],{"class":139},[129,21106,21107,21109,21111,21114,21116,21118,21120,21122,21124,21127,21129,21131],{"class":131,"line":9803},[129,21108,1565],{"class":139},[129,21110,1183],{"class":135},[129,21112,21113],{"class":244},"\"p2的年龄为：\"",[129,21115,1183],{"class":135},[129,21117,19476],{"class":139},[129,21119,1183],{"class":135},[129,21121,21084],{"class":244},[129,21123,6434],{"class":135},[129,21125,21126],{"class":139},"p2.m_Height",[129,21128,1183],{"class":135},[129,21130,1253],{"class":139},[129,21132,21096],{"class":198},[129,21134,21135],{"class":131,"line":9808},[129,21136,13225],{"class":139},[129,21138,21139],{"class":131,"line":9813},[129,21140,1579],{"class":139},[129,21142,21143,21145,21147],{"class":131,"line":9818},[129,21144,143],{"class":135},[129,21146,1987],{"class":1977},[129,21148,1990],{"class":139},[129,21150,21151],{"class":131,"line":9827},[129,21152,1560],{"class":139},[129,21154,21155,21157],{"class":131,"line":9832},[129,21156,5648],{"class":1977},[129,21158,5651],{"class":139},[129,21160,21161],{"class":131,"line":9838},[129,21162,1579],{"class":139},[14,21164,21165],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21167,21168],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21170,21171],{},[40,21172],{"alt":42,"src":21173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21175,21176],{},"浅拷贝问题要使用深拷贝来解决",[14,21178,21179],{},[40,21180],{"alt":42,"src":21181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21183,21184],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[100,21186,21188],{"id":21187},"_826初始化列表","8.2.6初始化列表",[14,21190,21191],{},"作用：初始化属性",[14,21193,5196],{},[120,21195,21198],{"className":21196,"code":21197,"language":5202},[5200],"构造函数():属性1(值1),属性2(值2).....{}\n",[126,21199,21197],{"__ignoreMap":42},[14,21201,21202],{},"例子",[120,21204,21206],{"className":122,"code":21205,"language":124,"meta":42,"style":42},"#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",[126,21207,21208,21214,21224,21230,21234,21239,21243,21248,21253,21258,21263,21268,21273,21277,21282,21287,21330,21339,21357,21375,21393,21397,21401,21408,21415,21422,21426,21430,21438,21442,21446,21466,21475,21479,21483,21493,21497,21505],{"__ignoreMap":42},[129,21209,21210,21212],{"class":131,"line":132},[129,21211,1963],{"class":135},[129,21213,1966],{"class":244},[129,21215,21216,21218,21220,21222],{"class":131,"line":51},[129,21217,1971],{"class":135},[129,21219,1974],{"class":135},[129,21221,1978],{"class":1977},[129,21223,1305],{"class":139},[129,21225,21226,21228],{"class":131,"line":1194},[129,21227,14709],{"class":135},[129,21229,15186],{"class":1977},[129,21231,21232],{"class":131,"line":1209},[129,21233,1560],{"class":139},[129,21235,21236],{"class":131,"line":1215},[129,21237,21238],{"class":135},"    public:\n",[129,21240,21241],{"class":131,"line":1229},[129,21242,2414],{"emptyLinePlaceholder":56},[129,21244,21245],{"class":131,"line":1235},[129,21246,21247],{"class":198},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[129,21249,21250],{"class":131,"line":1326},[129,21251,21252],{"class":198},"    \u002F\u002FPerson(int a, int b, int c) {\n",[129,21254,21255],{"class":131,"line":1332},[129,21256,21257],{"class":198},"    \u002F\u002F  m_A = a;\n",[129,21259,21260],{"class":131,"line":1344},[129,21261,21262],{"class":198},"    \u002F\u002F  m_B = b;\n",[129,21264,21265],{"class":131,"line":1626},[129,21266,21267],{"class":198},"    \u002F\u002F  m_C = c;\n",[129,21269,21270],{"class":131,"line":1631},[129,21271,21272],{"class":198},"    \u002F\u002F}\n",[129,21274,21275],{"class":131,"line":1637},[129,21276,2414],{"emptyLinePlaceholder":56},[129,21278,21279],{"class":131,"line":1642},[129,21280,21281],{"class":198},"    \u002F\u002F初始化列表方式初始化\n",[129,21283,21284],{"class":131,"line":1656},[129,21285,21286],{"class":198},"    \u002F\u002F使用有参构造函数\n",[129,21288,21289,21291,21293,21295,21297,21299,21301,21303,21305,21307,21309,21312,21315,21318,21321,21324,21327],{"class":131,"line":1661},[129,21290,18534],{"class":1977},[129,21292,140],{"class":139},[129,21294,143],{"class":135},[129,21296,1413],{"class":5231},[129,21298,12450],{"class":139},[129,21300,143],{"class":135},[129,21302,2847],{"class":5231},[129,21304,12450],{"class":139},[129,21306,143],{"class":135},[129,21308,2863],{"class":5231},[129,21310,21311],{"class":139},") :",[129,21313,21314],{"class":1977},"m_A",[129,21316,21317],{"class":139},"(a), ",[129,21319,21320],{"class":1977},"m_B",[129,21322,21323],{"class":139},"(b), ",[129,21325,21326],{"class":1977},"m_C",[129,21328,21329],{"class":139},"(c) {}\n",[129,21331,21332,21334,21337],{"class":131,"line":1667},[129,21333,14924],{"class":135},[129,21335,21336],{"class":1977}," PrintPerson",[129,21338,10868],{"class":139},[129,21340,21341,21343,21345,21348,21350,21353,21355],{"class":131,"line":1688},[129,21342,9684],{"class":139},[129,21344,1183],{"class":135},[129,21346,21347],{"class":244}," \"mA:\"",[129,21349,1459],{"class":135},[129,21351,21352],{"class":139}," m_A ",[129,21354,1183],{"class":135},[129,21356,8855],{"class":139},[129,21358,21359,21361,21363,21366,21368,21371,21373],{"class":131,"line":1693},[129,21360,9684],{"class":139},[129,21362,1183],{"class":135},[129,21364,21365],{"class":244}," \"mB:\"",[129,21367,1459],{"class":135},[129,21369,21370],{"class":139}," m_B ",[129,21372,1183],{"class":135},[129,21374,8855],{"class":139},[129,21376,21377,21379,21381,21384,21386,21389,21391],{"class":131,"line":1707},[129,21378,9684],{"class":139},[129,21380,1183],{"class":135},[129,21382,21383],{"class":244}," \"mC:\"",[129,21385,1459],{"class":135},[129,21387,21388],{"class":139}," m_C ",[129,21390,1183],{"class":135},[129,21392,8855],{"class":139},[129,21394,21395],{"class":131,"line":1712},[129,21396,2201],{"class":139},[129,21398,21399],{"class":131,"line":1741},[129,21400,15237],{"class":135},[129,21402,21403,21405],{"class":131,"line":1746},[129,21404,1999],{"class":135},[129,21406,21407],{"class":139}," m_A;\n",[129,21409,21410,21412],{"class":131,"line":1763},[129,21411,1999],{"class":135},[129,21413,21414],{"class":139}," m_B;\n",[129,21416,21417,21419],{"class":131,"line":1768},[129,21418,1999],{"class":135},[129,21420,21421],{"class":139}," m_C;\n",[129,21423,21424],{"class":131,"line":1773},[129,21425,4009],{"class":139},[129,21427,21428],{"class":131,"line":1778},[129,21429,2414],{"emptyLinePlaceholder":56},[129,21431,21432,21434,21436],{"class":131,"line":1792},[129,21433,143],{"class":135},[129,21435,1987],{"class":1977},[129,21437,5993],{"class":139},[129,21439,21440],{"class":131,"line":1797},[129,21441,1560],{"class":139},[129,21443,21444],{"class":131,"line":2591},[129,21445,2414],{"emptyLinePlaceholder":56},[129,21447,21448,21450,21452,21454,21456,21458,21460,21462,21464],{"class":131,"line":2605},[129,21449,19446],{"class":139},[129,21451,14],{"class":1977},[129,21453,140],{"class":139},[129,21455,357],{"class":188},[129,21457,12450],{"class":139},[129,21459,217],{"class":188},[129,21461,12450],{"class":139},[129,21463,211],{"class":188},[129,21465,2733],{"class":139},[129,21467,21468,21470,21473],{"class":131,"line":2613},[129,21469,15881],{"class":139},[129,21471,21472],{"class":1977},"PrintPerson",[129,21474,5651],{"class":139},[129,21476,21477],{"class":131,"line":2618},[129,21478,2414],{"emptyLinePlaceholder":56},[129,21480,21481],{"class":131,"line":2624},[129,21482,2414],{"emptyLinePlaceholder":56},[129,21484,21485,21487,21489,21491],{"class":131,"line":2630},[129,21486,2317],{"class":1977},[129,21488,140],{"class":139},[129,21490,2322],{"class":244},[129,21492,2733],{"class":139},[129,21494,21495],{"class":131,"line":2635},[129,21496,2414],{"emptyLinePlaceholder":56},[129,21498,21499,21501,21503],{"class":131,"line":7963},[129,21500,4104],{"class":135},[129,21502,4107],{"class":188},[129,21504,1305],{"class":139},[129,21506,21507],{"class":131,"line":7987},[129,21508,1579],{"class":139},[14,21510,21511,21512,21515,21516],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[289,21513,21514],{},"参数名就是定义的对象属性","，",[289,21517,21518],{},"属性后面的值为有参构造函数的形参",[120,21520,21522],{"className":122,"code":21521,"language":124,"meta":42,"style":42},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[126,21523,21524],{"__ignoreMap":42},[129,21525,21526,21528,21530,21532,21535,21537,21540,21542,21545,21547,21550,21552,21555,21557],{"class":131,"line":132},[129,21527,19061],{"class":1977},[129,21529,140],{"class":139},[129,21531,143],{"class":135},[129,21533,21534],{"class":139}," a.",[129,21536,143],{"class":135},[129,21538,21539],{"class":139}," b,",[129,21541,143],{"class":135},[129,21543,21544],{"class":139}," b):",[129,21546,21314],{"class":1977},[129,21548,21549],{"class":139},"(a),",[129,21551,21320],{"class":1977},[129,21553,21554],{"class":139},"(c),",[129,21556,21326],{"class":1977},[129,21558,21559],{"class":139},"(b) {}\n",[100,21561,21563],{"id":21562},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21565,21566],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21568,14648],{},[120,21570,21572],{"className":122,"code":21571,"language":124,"meta":42,"style":42},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[126,21573,21574,21579,21584,21588,21593,21597],{"__ignoreMap":42},[129,21575,21576],{"class":131,"line":132},[129,21577,21578],{"class":139},"A{};\n",[129,21580,21581],{"class":131,"line":51},[129,21582,21583],{"class":139},"B\n",[129,21585,21586],{"class":131,"line":1194},[129,21587,1560],{"class":139},[129,21589,21590],{"class":131,"line":1209},[129,21591,21592],{"class":139},"    A a;\n",[129,21594,21595],{"class":131,"line":1215},[129,21596,1579],{"class":139},[129,21598,21599],{"class":131,"line":1229},[129,21600,21601],{"class":198},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21603,21604],{},"案例",[120,21606,21608],{"className":122,"code":21607,"language":124,"meta":42,"style":42},"\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",[126,21609,21610,21615,21622,21626,21631,21636,21650,21654,21664,21675,21679,21686,21690,21703,21707,21712,21717,21721,21727,21731,21735,21739,21770,21774,21785,21789,21795,21799,21812,21816,21820,21824,21829,21834,21838,21846,21850,21867,21886,21890,21898,21902,21908],{"__ignoreMap":42},[129,21611,21612],{"class":131,"line":132},[129,21613,21614],{"class":198},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[129,21616,21617,21619],{"class":131,"line":51},[129,21618,14709],{"class":135},[129,21620,21621],{"class":1977}," Phone\n",[129,21623,21624],{"class":131,"line":1194},[129,21625,1560],{"class":139},[129,21627,21628],{"class":131,"line":1209},[129,21629,21630],{"class":139},"public：\n",[129,21632,21633],{"class":131,"line":1215},[129,21634,21635],{"class":198},"    \u002F\u002F 赋值(构造函数)\n",[129,21637,21638,21641,21643,21645,21648],{"class":131,"line":1229},[129,21639,21640],{"class":1977},"    Phone",[129,21642,140],{"class":139},[129,21644,14932],{"class":1977},[129,21646,21647],{"class":5231}," pName",[129,21649,146],{"class":139},[129,21651,21652],{"class":131,"line":1235},[129,21653,2044],{"class":139},[129,21655,21656,21659,21661],{"class":131,"line":1326},[129,21657,21658],{"class":139},"        m_pName",[129,21660,185],{"class":135},[129,21662,21663],{"class":139},"pName;\n",[129,21665,21666,21668,21670,21673],{"class":131,"line":1332},[129,21667,3465],{"class":139},[129,21669,1183],{"class":135},[129,21671,21672],{"class":244},"\"Phone的构造函数调用\"",[129,21674,1305],{"class":139},[129,21676,21677],{"class":131,"line":1344},[129,21678,2201],{"class":139},[129,21680,21681,21684],{"class":131,"line":1626},[129,21682,21683],{"class":1977},"    ~Phone",[129,21685,1990],{"class":139},[129,21687,21688],{"class":131,"line":1631},[129,21689,2044],{"class":139},[129,21691,21692,21694,21696,21699,21701],{"class":131,"line":1637},[129,21693,3465],{"class":139},[129,21695,1183],{"class":135},[129,21697,21698],{"class":244},"\"Phone析构函数调用\"",[129,21700,1183],{"class":135},[129,21702,1206],{"class":139},[129,21704,21705],{"class":131,"line":1642},[129,21706,2201],{"class":139},[129,21708,21709],{"class":131,"line":1656},[129,21710,21711],{"class":198},"    \u002F\u002F\n",[129,21713,21714],{"class":131,"line":1661},[129,21715,21716],{"class":139},"    string m_PName;\n",[129,21718,21719],{"class":131,"line":1667},[129,21720,4009],{"class":139},[129,21722,21723,21725],{"class":131,"line":1688},[129,21724,14709],{"class":135},[129,21726,15186],{"class":1977},[129,21728,21729],{"class":131,"line":1693},[129,21730,1560],{"class":139},[129,21732,21733],{"class":131,"line":1707},[129,21734,14731],{"class":135},[129,21736,21737],{"class":131,"line":1712},[129,21738,17009],{"class":198},[129,21740,21741,21743,21745,21747,21749,21751,21753,21756,21759,21761,21764,21767],{"class":131,"line":1741},[129,21742,18534],{"class":1977},[129,21744,140],{"class":139},[129,21746,14932],{"class":1977},[129,21748,14935],{"class":5231},[129,21750,517],{"class":139},[129,21752,14932],{"class":1977},[129,21754,21755],{"class":5231}," pname",[129,21757,21758],{"class":139},"):",[129,21760,15025],{"class":1977},[129,21762,21763],{"class":139},"(name),m_phone.",[129,21765,21766],{"class":1977},"m_PName",[129,21768,21769],{"class":139},"(pname) \n",[129,21771,21772],{"class":131,"line":1746},[129,21773,2044],{"class":139},[129,21775,21776,21778,21780,21783],{"class":131,"line":1763},[129,21777,3465],{"class":139},[129,21779,1183],{"class":135},[129,21781,21782],{"class":244},"\"Person的构造函数调用\"",[129,21784,1305],{"class":139},[129,21786,21787],{"class":131,"line":1768},[129,21788,2201],{"class":139},[129,21790,21791,21793],{"class":131,"line":1773},[129,21792,18567],{"class":1977},[129,21794,1990],{"class":139},[129,21796,21797],{"class":131,"line":1778},[129,21798,2044],{"class":139},[129,21800,21801,21803,21805,21808,21810],{"class":131,"line":1792},[129,21802,3465],{"class":139},[129,21804,1183],{"class":135},[129,21806,21807],{"class":244},"\"Person析构函数调用\"",[129,21809,1183],{"class":135},[129,21811,1206],{"class":139},[129,21813,21814],{"class":131,"line":1797},[129,21815,2201],{"class":139},[129,21817,21818],{"class":131,"line":2591},[129,21819,7795],{"class":198},[129,21821,21822],{"class":131,"line":2605},[129,21823,14907],{"class":139},[129,21825,21826],{"class":131,"line":2613},[129,21827,21828],{"class":198},"    \u002F\u002F手机\n",[129,21830,21831],{"class":131,"line":2618},[129,21832,21833],{"class":139},"    Phone m_Phone;\n",[129,21835,21836],{"class":131,"line":2624},[129,21837,4009],{"class":139},[129,21839,21840,21842,21844],{"class":131,"line":2630},[129,21841,5379],{"class":135},[129,21843,5603],{"class":1977},[129,21845,1990],{"class":139},[129,21847,21848],{"class":131,"line":2635},[129,21849,1560],{"class":139},[129,21851,21852,21854,21856,21858,21860,21862,21865],{"class":131,"line":7963},[129,21853,19446],{"class":139},[129,21855,14],{"class":1977},[129,21857,140],{"class":139},[129,21859,7931],{"class":244},[129,21861,517],{"class":139},[129,21863,21864],{"class":244},"\"安卓\"",[129,21866,2733],{"class":139},[129,21868,21869,21871,21873,21876,21878,21881,21883],{"class":131,"line":7987},[129,21870,1565],{"class":139},[129,21872,1183],{"class":135},[129,21874,21875],{"class":139},"p.Name",[129,21877,1183],{"class":135},[129,21879,21880],{"class":244},"\"拿着：\"",[129,21882,1183],{"class":135},[129,21884,21885],{"class":139},"p.m_phone.m_PName;\n",[129,21887,21888],{"class":131,"line":7992},[129,21889,1579],{"class":139},[129,21891,21892,21894,21896],{"class":131,"line":7998},[129,21893,143],{"class":135},[129,21895,1987],{"class":1977},[129,21897,1990],{"class":139},[129,21899,21900],{"class":131,"line":8025},[129,21901,1560],{"class":139},[129,21903,21904,21906],{"class":131,"line":8030},[129,21905,5648],{"class":1977},[129,21907,5651],{"class":139},[129,21909,21910],{"class":131,"line":8036},[129,21911,1579],{"class":139},[14,21913,9040],{},[120,21915,21917],{"className":122,"code":21916,"language":124,"meta":42,"style":42},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[126,21918,21919,21924],{"__ignoreMap":42},[129,21920,21921],{"class":131,"line":132},[129,21922,21923],{"class":198},"    \u002F\u002F不需要写这个：\n",[129,21925,21926],{"class":131,"line":51},[129,21927,21928],{"class":198},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21930,21931],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[120,21933,21935],{"className":122,"code":21934,"language":124,"meta":42,"style":42},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[126,21936,21937],{"__ignoreMap":42},[129,21938,21939,21941,21944,21946,21949,21952],{"class":131,"line":132},[129,21940,19061],{"class":1977},[129,21942,21943],{"class":139},"(string name.string pname):",[129,21945,15025],{"class":1977},[129,21947,21948],{"class":139},"(name),",[129,21950,21951],{"class":1977},"m_phone",[129,21953,21954],{"class":139},"(pname) {}\n",[14,21956,21957,21958,185,21961],{},"采用的是隐式转换法，实际为如下：\n",[126,21959,21960],{},"m_phone(pname)",[126,21962,21963],{},"Phone m_phone=pname",[14,21965,21966,21969],{},[289,21967,21968],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,21971,21972],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[100,21974,21976],{"id":21975},"_828静态对象","8.2.8静态对象",[14,21978,21979],{},"静态对象在成员对象前static，称为静态对象",[14,21981,21982],{},"静态对象分为两类：",[83,21984,21985],{},[86,21986,21987],{},"静态成员变量",[1146,21989,21990,21993,21996],{},[86,21991,21992],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[86,21994,21995],{},"②在编译阶段分配内存",[86,21997,21998],{},"③类内声明，类外初始化",[83,22000,22001],{"start":51},[86,22002,22003],{},"静态成员函数",[1146,22005,22006,22009],{},[86,22007,22008],{},"①所有对象共享同一个函数",[86,22010,22011],{},"②静态成员函数只能访问静态成员变量",[22013,22014,22016],"h4",{"id":22015},"_8281静态成员变量","8.2.8.1静态成员变量",[120,22018,22020],{"className":122,"code":22019,"language":124,"meta":42,"style":42},"#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",[126,22021,22022,22028,22038,22044,22048,22052,22057,22062,22067,22075,22079,22083,22087,22095,22099,22103,22108,22121,22125,22133,22137,22143],{"__ignoreMap":42},[129,22023,22024,22026],{"class":131,"line":132},[129,22025,1963],{"class":135},[129,22027,1966],{"class":244},[129,22029,22030,22032,22034,22036],{"class":131,"line":51},[129,22031,1971],{"class":135},[129,22033,1974],{"class":135},[129,22035,1978],{"class":1977},[129,22037,1305],{"class":139},[129,22039,22040,22042],{"class":131,"line":1194},[129,22041,14709],{"class":135},[129,22043,15186],{"class":1977},[129,22045,22046],{"class":131,"line":1209},[129,22047,1560],{"class":139},[129,22049,22050],{"class":131,"line":1215},[129,22051,14731],{"class":135},[129,22053,22054],{"class":131,"line":1229},[129,22055,22056],{"class":198},"    \u002F\u002F非静态成员变量\n",[129,22058,22059],{"class":131,"line":1235},[129,22060,22061],{"class":198},"    \u002F\u002F int m_A;\n",[129,22063,22064],{"class":131,"line":1326},[129,22065,22066],{"class":198},"    \u002F\u002F定义静态成员变量\n",[129,22068,22069,22071,22073],{"class":131,"line":1332},[129,22070,11035],{"class":135},[129,22072,2396],{"class":135},[129,22074,21407],{"class":139},[129,22076,22077],{"class":131,"line":1344},[129,22078,2414],{"emptyLinePlaceholder":56},[129,22080,22081],{"class":131,"line":1626},[129,22082,2414],{"emptyLinePlaceholder":56},[129,22084,22085],{"class":131,"line":1631},[129,22086,4009],{"class":139},[129,22088,22089,22091,22093],{"class":131,"line":1637},[129,22090,5379],{"class":135},[129,22092,5603],{"class":1977},[129,22094,1990],{"class":139},[129,22096,22097],{"class":131,"line":1642},[129,22098,1560],{"class":139},[129,22100,22101],{"class":131,"line":1656},[129,22102,15328],{"class":139},[129,22104,22105],{"class":131,"line":1661},[129,22106,22107],{"class":198},"    \u002F\u002F输出类成员变量这块内存\n",[129,22109,22110,22112,22114,22117,22119],{"class":131,"line":1667},[129,22111,1565],{"class":139},[129,22113,1183],{"class":135},[129,22115,22116],{"class":139},"p.m_A",[129,22118,1183],{"class":135},[129,22120,1206],{"class":139},[129,22122,22123],{"class":131,"line":1688},[129,22124,1579],{"class":139},[129,22126,22127,22129,22131],{"class":131,"line":1693},[129,22128,143],{"class":135},[129,22130,1987],{"class":1977},[129,22132,1990],{"class":139},[129,22134,22135],{"class":131,"line":1707},[129,22136,1560],{"class":139},[129,22138,22139,22141],{"class":131,"line":1712},[129,22140,5648],{"class":1977},[129,22142,1990],{"class":139},[129,22144,22145],{"class":131,"line":1741},[129,22146,1579],{"class":139},[14,22148,22149],{},"此时输出是报错的：无法解析外部命令",[14,22151,22152],{},"解决这一问题：必须用到类内声明，类外初始化操作",[120,22154,22156],{"className":122,"code":22155,"language":124,"meta":42,"style":42},"#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",[126,22157,22158,22164,22174,22180,22184,22188,22193,22201,22205,22210,22225,22233,22237,22241,22246,22251,22263,22268,22279,22284,22289,22302,22306,22314,22318,22324],{"__ignoreMap":42},[129,22159,22160,22162],{"class":131,"line":132},[129,22161,1963],{"class":135},[129,22163,1966],{"class":244},[129,22165,22166,22168,22170,22172],{"class":131,"line":51},[129,22167,1971],{"class":135},[129,22169,1974],{"class":135},[129,22171,1978],{"class":1977},[129,22173,1305],{"class":139},[129,22175,22176,22178],{"class":131,"line":1194},[129,22177,14709],{"class":135},[129,22179,15186],{"class":1977},[129,22181,22182],{"class":131,"line":1209},[129,22183,1560],{"class":139},[129,22185,22186],{"class":131,"line":1215},[129,22187,14731],{"class":135},[129,22189,22190],{"class":131,"line":1229},[129,22191,22192],{"class":198},"    \u002F\u002F类内声明\n",[129,22194,22195,22197,22199],{"class":131,"line":1235},[129,22196,11035],{"class":135},[129,22198,2396],{"class":135},[129,22200,21407],{"class":139},[129,22202,22203],{"class":131,"line":1326},[129,22204,4009],{"class":139},[129,22206,22207],{"class":131,"line":1332},[129,22208,22209],{"class":198},"\u002F\u002F类外初始化\n",[129,22211,22212,22214,22216,22219,22221,22223],{"class":131,"line":1344},[129,22213,143],{"class":135},[129,22215,15584],{"class":1977},[129,22217,22218],{"class":139},"::m_A",[129,22220,185],{"class":135},[129,22222,585],{"class":188},[129,22224,1305],{"class":139},[129,22226,22227,22229,22231],{"class":131,"line":1626},[129,22228,5379],{"class":135},[129,22230,5603],{"class":1977},[129,22232,1990],{"class":139},[129,22234,22235],{"class":131,"line":1631},[129,22236,1560],{"class":139},[129,22238,22239],{"class":131,"line":1637},[129,22240,15328],{"class":139},[129,22242,22243],{"class":131,"line":1642},[129,22244,22245],{"class":198},"    \u002F\u002F访问变量的原内存空间\n",[129,22247,22248],{"class":131,"line":1656},[129,22249,22250],{"class":198},"    \u002F\u002F100\n",[129,22252,22253,22255,22257,22259,22261],{"class":131,"line":1661},[129,22254,1565],{"class":139},[129,22256,1183],{"class":135},[129,22258,22116],{"class":139},[129,22260,1183],{"class":135},[129,22262,1206],{"class":139},[129,22264,22265],{"class":131,"line":1667},[129,22266,22267],{"class":139},"    Person p2;\n",[129,22269,22270,22273,22275,22277],{"class":131,"line":1688},[129,22271,22272],{"class":139},"    p2.m_A",[129,22274,185],{"class":135},[129,22276,1736],{"class":188},[129,22278,1305],{"class":139},[129,22280,22281],{"class":131,"line":1693},[129,22282,22283],{"class":198},"    \u002F\u002F继续访问这片空间\n",[129,22285,22286],{"class":131,"line":1707},[129,22287,22288],{"class":198},"    \u002F\u002F200\n",[129,22290,22291,22293,22295,22298,22300],{"class":131,"line":1712},[129,22292,1565],{"class":139},[129,22294,1183],{"class":135},[129,22296,22297],{"class":139},"p2.m_A",[129,22299,1183],{"class":135},[129,22301,1206],{"class":139},[129,22303,22304],{"class":131,"line":1741},[129,22305,1579],{"class":139},[129,22307,22308,22310,22312],{"class":131,"line":1746},[129,22309,143],{"class":135},[129,22311,1987],{"class":1977},[129,22313,1990],{"class":139},[129,22315,22316],{"class":131,"line":1763},[129,22317,1560],{"class":139},[129,22319,22320,22322],{"class":131,"line":1768},[129,22321,5648],{"class":1977},[129,22323,5651],{"class":139},[129,22325,22326],{"class":131,"line":1773},[129,22327,1579],{"class":139},[14,22329,22330],{},[289,22331,22332],{},"静态变量的访问",[120,22334,22336],{"className":122,"code":22335,"language":124,"meta":42,"style":42},"#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",[126,22337,22338,22344,22354,22360,22364,22368,22372,22380,22384,22389,22397,22401,22405,22419,22434,22442,22446,22451,22456,22461,22466,22478,22483,22488,22502,22519,22523,22531,22535,22541],{"__ignoreMap":42},[129,22339,22340,22342],{"class":131,"line":132},[129,22341,1963],{"class":135},[129,22343,1966],{"class":244},[129,22345,22346,22348,22350,22352],{"class":131,"line":51},[129,22347,1971],{"class":135},[129,22349,1974],{"class":135},[129,22351,1978],{"class":1977},[129,22353,1305],{"class":139},[129,22355,22356,22358],{"class":131,"line":1194},[129,22357,14709],{"class":135},[129,22359,15186],{"class":1977},[129,22361,22362],{"class":131,"line":1209},[129,22363,1560],{"class":139},[129,22365,22366],{"class":131,"line":1215},[129,22367,14731],{"class":135},[129,22369,22370],{"class":131,"line":1229},[129,22371,22192],{"class":198},[129,22373,22374,22376,22378],{"class":131,"line":1235},[129,22375,11035],{"class":135},[129,22377,2396],{"class":135},[129,22379,21407],{"class":139},[129,22381,22382],{"class":131,"line":1326},[129,22383,15237],{"class":135},[129,22385,22386],{"class":131,"line":1332},[129,22387,22388],{"class":198},"    \u002F\u002F静态成员变量也是有访问权限的\n",[129,22390,22391,22393,22395],{"class":131,"line":1344},[129,22392,11035],{"class":135},[129,22394,2396],{"class":135},[129,22396,21414],{"class":139},[129,22398,22399],{"class":131,"line":1626},[129,22400,4009],{"class":139},[129,22402,22403],{"class":131,"line":1631},[129,22404,22209],{"class":198},[129,22406,22407,22409,22411,22413,22415,22417],{"class":131,"line":1637},[129,22408,143],{"class":135},[129,22410,15584],{"class":1977},[129,22412,22218],{"class":139},[129,22414,185],{"class":135},[129,22416,585],{"class":188},[129,22418,1305],{"class":139},[129,22420,22421,22423,22425,22428,22430,22432],{"class":131,"line":1642},[129,22422,143],{"class":135},[129,22424,15584],{"class":1977},[129,22426,22427],{"class":139},"::m_B",[129,22429,185],{"class":135},[129,22431,839],{"class":188},[129,22433,1305],{"class":139},[129,22435,22436,22438,22440],{"class":131,"line":1656},[129,22437,5379],{"class":135},[129,22439,5672],{"class":1977},[129,22441,1990],{"class":139},[129,22443,22444],{"class":131,"line":1661},[129,22445,1560],{"class":139},[129,22447,22448],{"class":131,"line":1667},[129,22449,22450],{"class":198},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[129,22452,22453],{"class":131,"line":1688},[129,22454,22455],{"class":198},"    \u002F\u002F静态成员变量有两种访问方式：\n",[129,22457,22458],{"class":131,"line":1693},[129,22459,22460],{"class":198},"    \u002F\u002F1.通过对象进行访问\n",[129,22462,22463],{"class":131,"line":1707},[129,22464,22465],{"class":139},"    Person p;  \n",[129,22467,22468,22470,22472,22474,22476],{"class":131,"line":1712},[129,22469,1565],{"class":139},[129,22471,1183],{"class":135},[129,22473,22116],{"class":139},[129,22475,1183],{"class":135},[129,22477,1206],{"class":139},[129,22479,22480],{"class":131,"line":1741},[129,22481,22482],{"class":198},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[129,22484,22485],{"class":131,"line":1746},[129,22486,22487],{"class":198},"    \u002F\u002F2.通过类名进行访问\n",[129,22489,22490,22492,22494,22496,22498,22500],{"class":131,"line":1763},[129,22491,1565],{"class":139},[129,22493,1183],{"class":135},[129,22495,19061],{"class":1977},[129,22497,22218],{"class":139},[129,22499,1183],{"class":135},[129,22501,1206],{"class":139},[129,22503,22504,22506,22508,22510,22512,22514,22516],{"class":131,"line":1768},[129,22505,1565],{"class":139},[129,22507,1183],{"class":135},[129,22509,19061],{"class":1977},[129,22511,22427],{"class":139},[129,22513,1183],{"class":135},[129,22515,1253],{"class":139},[129,22517,22518],{"class":198}," \u002F\u002F没有访问权限，报错\n",[129,22520,22521],{"class":131,"line":1773},[129,22522,1579],{"class":139},[129,22524,22525,22527,22529],{"class":131,"line":1778},[129,22526,143],{"class":135},[129,22528,1987],{"class":1977},[129,22530,1990],{"class":139},[129,22532,22533],{"class":131,"line":1792},[129,22534,1560],{"class":139},[129,22536,22537,22539],{"class":131,"line":1797},[129,22538,5717],{"class":1977},[129,22540,5651],{"class":139},[129,22542,22543],{"class":131,"line":2591},[129,22544,1579],{"class":139},[22013,22546,22548],{"id":22547},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22550,22551],{},"1.静态成员函数定义与访问",[120,22553,22555],{"className":122,"code":22554,"language":124,"meta":42,"style":42},"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",[126,22556,22557,22563,22567,22571,22576,22587,22591,22605,22609,22613,22621,22625,22630,22635,22639,22647,22652,22662],{"__ignoreMap":42},[129,22558,22559,22561],{"class":131,"line":132},[129,22560,14709],{"class":135},[129,22562,15186],{"class":1977},[129,22564,22565],{"class":131,"line":51},[129,22566,1560],{"class":139},[129,22568,22569],{"class":131,"line":1194},[129,22570,14731],{"class":135},[129,22572,22573],{"class":131,"line":1209},[129,22574,22575],{"class":198},"    \u002F\u002F在公共权限下定义静态成员函数\n",[129,22577,22578,22580,22583,22585],{"class":131,"line":1215},[129,22579,11035],{"class":135},[129,22581,22582],{"class":135}," void",[129,22584,11400],{"class":1977},[129,22586,1990],{"class":139},[129,22588,22589],{"class":131,"line":1229},[129,22590,2044],{"class":139},[129,22592,22593,22596,22598,22601,22603],{"class":131,"line":1235},[129,22594,22595],{"class":139},"        coout",[129,22597,1183],{"class":135},[129,22599,22600],{"class":244},"\"静态成员函数的调用\"",[129,22602,1183],{"class":135},[129,22604,1206],{"class":139},[129,22606,22607],{"class":131,"line":1326},[129,22608,2201],{"class":139},[129,22610,22611],{"class":131,"line":1332},[129,22612,4009],{"class":139},[129,22614,22615,22617,22619],{"class":131,"line":1344},[129,22616,5379],{"class":135},[129,22618,5603],{"class":1977},[129,22620,1990],{"class":139},[129,22622,22623],{"class":131,"line":1626},[129,22624,1560],{"class":139},[129,22626,22627],{"class":131,"line":1631},[129,22628,22629],{"class":198},"    \u002F\u002F静态成员函数的调用方式:\n",[129,22631,22632],{"class":131,"line":1637},[129,22633,22634],{"class":198},"    \u002F\u002F1.通过对象访问\n",[129,22636,22637],{"class":131,"line":1642},[129,22638,15328],{"class":139},[129,22640,22641,22643,22645],{"class":131,"line":1656},[129,22642,15881],{"class":139},[129,22644,11566],{"class":1977},[129,22646,5651],{"class":139},[129,22648,22649],{"class":131,"line":1661},[129,22650,22651],{"class":198},"    \u002F\u002F2.通过类名访问\n",[129,22653,22654,22656,22658,22660],{"class":131,"line":1667},[129,22655,18534],{"class":1977},[129,22657,17747],{"class":139},[129,22659,11566],{"class":1977},[129,22661,5651],{"class":139},[129,22663,22664],{"class":131,"line":1688},[129,22665,1579],{"class":139},[83,22667,22668],{"start":51},[86,22669,22670],{},"静态成员函数只能访问静态成员变量",[120,22672,22674],{"className":122,"code":22673,"language":124,"meta":42,"style":42},"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",[126,22675,22676,22682,22686,22690,22694,22704,22708,22722,22727,22739,22743,22754,22764,22768,22772,22776,22786,22790,22803,22807,22811,22815,22819,22833,22841,22845,22849,22853,22857,22865,22869,22879,22884,22888,22896,22900,22906],{"__ignoreMap":42},[129,22677,22678,22680],{"class":131,"line":132},[129,22679,14709],{"class":135},[129,22681,15186],{"class":1977},[129,22683,22684],{"class":131,"line":51},[129,22685,1560],{"class":139},[129,22687,22688],{"class":131,"line":1194},[129,22689,14731],{"class":135},[129,22691,22692],{"class":131,"line":1209},[129,22693,22575],{"class":198},[129,22695,22696,22698,22700,22702],{"class":131,"line":1215},[129,22697,11035],{"class":135},[129,22699,22582],{"class":135},[129,22701,11400],{"class":1977},[129,22703,1990],{"class":139},[129,22705,22706],{"class":131,"line":1229},[129,22707,2044],{"class":139},[129,22709,22710,22713,22715,22717,22719],{"class":131,"line":1235},[129,22711,22712],{"class":139},"        m_A",[129,22714,185],{"class":135},[129,22716,450],{"class":188},[129,22718,195],{"class":139},[129,22720,22721],{"class":198}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[129,22723,22724],{"class":131,"line":1326},[129,22725,22726],{"class":198},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[129,22728,22729,22731,22733,22735,22737],{"class":131,"line":1332},[129,22730,22595],{"class":139},[129,22732,1183],{"class":135},[129,22734,22600],{"class":244},[129,22736,1183],{"class":135},[129,22738,1206],{"class":139},[129,22740,22741],{"class":131,"line":1344},[129,22742,2201],{"class":139},[129,22744,22745,22747,22749,22751],{"class":131,"line":1626},[129,22746,11035],{"class":135},[129,22748,2396],{"class":135},[129,22750,15463],{"class":139},[129,22752,22753],{"class":198}," \u002F\u002F静态成员变量\n",[129,22755,22756,22758,22761],{"class":131,"line":1631},[129,22757,1999],{"class":135},[129,22759,22760],{"class":139}," m_B;",[129,22762,22763],{"class":198}," \u002F\u002F非静态成员变量\n",[129,22765,22766],{"class":131,"line":1637},[129,22767,2414],{"emptyLinePlaceholder":56},[129,22769,22770],{"class":131,"line":1642},[129,22771,15237],{"class":135},[129,22773,22774],{"class":131,"line":1656},[129,22775,22388],{"class":198},[129,22777,22778,22780,22782,22784],{"class":131,"line":1661},[129,22779,11035],{"class":135},[129,22781,22582],{"class":135},[129,22783,13633],{"class":1977},[129,22785,1990],{"class":139},[129,22787,22788],{"class":131,"line":1667},[129,22789,2044],{"class":139},[129,22791,22792,22794,22796,22799,22801],{"class":131,"line":1688},[129,22793,3465],{"class":139},[129,22795,1183],{"class":135},[129,22797,22798],{"class":244},"\"这是私有权限下的静态函数调用\"",[129,22800,1183],{"class":135},[129,22802,1206],{"class":139},[129,22804,22805],{"class":131,"line":1693},[129,22806,2201],{"class":139},[129,22808,22809],{"class":131,"line":1707},[129,22810,2414],{"emptyLinePlaceholder":56},[129,22812,22813],{"class":131,"line":1712},[129,22814,2414],{"emptyLinePlaceholder":56},[129,22816,22817],{"class":131,"line":1741},[129,22818,4009],{"class":139},[129,22820,22821,22823,22825,22827,22829,22831],{"class":131,"line":1746},[129,22822,143],{"class":135},[129,22824,15584],{"class":1977},[129,22826,22218],{"class":139},[129,22828,185],{"class":135},[129,22830,331],{"class":188},[129,22832,1305],{"class":139},[129,22834,22835,22837,22839],{"class":131,"line":1763},[129,22836,5379],{"class":135},[129,22838,5603],{"class":1977},[129,22840,1990],{"class":139},[129,22842,22843],{"class":131,"line":1768},[129,22844,1560],{"class":139},[129,22846,22847],{"class":131,"line":1773},[129,22848,22629],{"class":198},[129,22850,22851],{"class":131,"line":1778},[129,22852,22634],{"class":198},[129,22854,22855],{"class":131,"line":1792},[129,22856,15328],{"class":139},[129,22858,22859,22861,22863],{"class":131,"line":1797},[129,22860,15881],{"class":139},[129,22862,11566],{"class":1977},[129,22864,5651],{"class":139},[129,22866,22867],{"class":131,"line":2591},[129,22868,22651],{"class":198},[129,22870,22871,22873,22875,22877],{"class":131,"line":2605},[129,22872,18534],{"class":1977},[129,22874,17747],{"class":139},[129,22876,11566],{"class":1977},[129,22878,5651],{"class":139},[129,22880,22881],{"class":131,"line":2613},[129,22882,22883],{"class":198},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[129,22885,22886],{"class":131,"line":2618},[129,22887,1579],{"class":139},[129,22889,22890,22892,22894],{"class":131,"line":2624},[129,22891,143],{"class":135},[129,22893,1987],{"class":1977},[129,22895,1990],{"class":139},[129,22897,22898],{"class":131,"line":2630},[129,22899,1560],{"class":139},[129,22901,22902,22904],{"class":131,"line":2635},[129,22903,5648],{"class":1977},[129,22905,5651],{"class":139},[129,22907,22908],{"class":131,"line":7963},[129,22909,1579],{"class":139},[100,22911,22913],{"id":22912},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22013,22915,22917],{"id":22916},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22919,22920],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22922,22923],{},"只有非静态成员变量才属于类的对象上",[22925,22926,22928],"h5",{"id":22927},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[120,22930,22932],{"className":122,"code":22931,"language":124,"meta":42,"style":42},"#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",[126,22933,22934,22941,22951,22957,22961,22965,22969,22977,22981,22985,23008,23012,23020,23024,23030],{"__ignoreMap":42},[129,22935,22936,22938],{"class":131,"line":132},[129,22937,1963],{"class":135},[129,22939,22940],{"class":244},"\u003Ciostraem>\n",[129,22942,22943,22945,22947,22949],{"class":131,"line":51},[129,22944,1971],{"class":135},[129,22946,1974],{"class":135},[129,22948,1978],{"class":1977},[129,22950,1305],{"class":139},[129,22952,22953,22955],{"class":131,"line":1194},[129,22954,14709],{"class":135},[129,22956,15186],{"class":1977},[129,22958,22959],{"class":131,"line":1209},[129,22960,1560],{"class":139},[129,22962,22963],{"class":131,"line":1215},[129,22964,2414],{"emptyLinePlaceholder":56},[129,22966,22967],{"class":131,"line":1229},[129,22968,4009],{"class":139},[129,22970,22971,22973,22975],{"class":131,"line":1235},[129,22972,5379],{"class":135},[129,22974,5603],{"class":1977},[129,22976,1990],{"class":139},[129,22978,22979],{"class":131,"line":1326},[129,22980,1560],{"class":139},[129,22982,22983],{"class":131,"line":1332},[129,22984,15328],{"class":139},[129,22986,22987,22989,22991,22994,22996,22999,23001,23003,23005],{"class":131,"line":1344},[129,22988,1565],{"class":139},[129,22990,1183],{"class":135},[129,22992,22993],{"class":244},"\"size of p=\"",[129,22995,1183],{"class":135},[129,22997,22998],{"class":1977},"sizeoif",[129,23000,6554],{"class":139},[129,23002,1183],{"class":135},[129,23004,1253],{"class":139},[129,23006,23007],{"class":198}," \u002F\u002F查看这个空类的占用的内存空间\n",[129,23009,23010],{"class":131,"line":1626},[129,23011,1579],{"class":139},[129,23013,23014,23016,23018],{"class":131,"line":1631},[129,23015,143],{"class":135},[129,23017,1987],{"class":1977},[129,23019,1990],{"class":139},[129,23021,23022],{"class":131,"line":1637},[129,23023,1560],{"class":139},[129,23025,23026,23028],{"class":131,"line":1642},[129,23027,5648],{"class":1977},[129,23029,5651],{"class":139},[129,23031,23032],{"class":131,"line":1656},[129,23033,1579],{"class":139},[14,23035,23036],{},"输出结果为：size of p=1",[14,23038,23039],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23041,23042],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22925,23044,23046],{"id":23045},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[120,23048,23050],{"className":122,"code":23049,"language":124,"meta":42,"style":42},"#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",[126,23051,23052,23058,23068,23076,23080,23089,23093,23101,23105,23109,23128,23132,23136,23144,23148,23154],{"__ignoreMap":42},[129,23053,23054,23056],{"class":131,"line":132},[129,23055,1963],{"class":135},[129,23057,1966],{"class":244},[129,23059,23060,23062,23064,23066],{"class":131,"line":51},[129,23061,1971],{"class":135},[129,23063,1974],{"class":135},[129,23065,1978],{"class":1977},[129,23067,1305],{"class":139},[129,23069,23070,23072,23074],{"class":131,"line":1194},[129,23071,14709],{"class":135},[129,23073,15584],{"class":1977},[129,23075,2688],{"class":139},[129,23077,23078],{"class":131,"line":1209},[129,23079,1560],{"class":139},[129,23081,23082,23084,23086],{"class":131,"line":1215},[129,23083,1999],{"class":135},[129,23085,15463],{"class":139},[129,23087,23088],{"class":198},"\u002F\u002F非静态成员变量\n",[129,23090,23091],{"class":131,"line":1229},[129,23092,4009],{"class":139},[129,23094,23095,23097,23099],{"class":131,"line":1235},[129,23096,5379],{"class":135},[129,23098,5603],{"class":1977},[129,23100,1990],{"class":139},[129,23102,23103],{"class":131,"line":1326},[129,23104,1560],{"class":139},[129,23106,23107],{"class":131,"line":1332},[129,23108,15328],{"class":139},[129,23110,23111,23113,23115,23117,23119,23121,23123,23125],{"class":131,"line":1344},[129,23112,1565],{"class":139},[129,23114,1183],{"class":135},[129,23116,22993],{"class":244},[129,23118,1387],{"class":135},[129,23120,6554],{"class":139},[129,23122,1183],{"class":135},[129,23124,1253],{"class":139},[129,23126,23127],{"class":198}," \u002F\u002F查看不是空对象时占用多少内存\n",[129,23129,23130],{"class":131,"line":1626},[129,23131,2414],{"emptyLinePlaceholder":56},[129,23133,23134],{"class":131,"line":1631},[129,23135,1579],{"class":139},[129,23137,23138,23140,23142],{"class":131,"line":1637},[129,23139,143],{"class":135},[129,23141,1987],{"class":1977},[129,23143,1990],{"class":139},[129,23145,23146],{"class":131,"line":1642},[129,23147,1560],{"class":139},[129,23149,23150,23152],{"class":131,"line":1656},[129,23151,5648],{"class":1977},[129,23153,5651],{"class":139},[129,23155,23156],{"class":131,"line":1661},[129,23157,1579],{"class":139},[14,23159,23160],{},"输出结果：size of p=4",[14,23162,23163],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[83,23165,23166],{},[86,23167,23168],{},"如果加上非静态成员变量，Person类修改如下",[120,23170,23172],{"className":122,"code":23171,"language":124,"meta":42,"style":42},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[126,23173,23174,23180,23184,23190,23198,23202,23207],{"__ignoreMap":42},[129,23175,23176,23178],{"class":131,"line":132},[129,23177,14709],{"class":135},[129,23179,15186],{"class":1977},[129,23181,23182],{"class":131,"line":51},[129,23183,1560],{"class":139},[129,23185,23186,23188],{"class":131,"line":1194},[129,23187,1999],{"class":135},[129,23189,21407],{"class":139},[129,23191,23192,23194,23196],{"class":131,"line":1209},[129,23193,11035],{"class":135},[129,23195,2396],{"class":135},[129,23197,21414],{"class":139},[129,23199,23200],{"class":131,"line":1215},[129,23201,4009],{"class":139},[129,23203,23204],{"class":131,"line":1229},[129,23205,23206],{"class":198},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[129,23208,23209,23211,23213,23215,23217,23219],{"class":131,"line":1235},[129,23210,143],{"class":135},[129,23212,15584],{"class":1977},[129,23214,22427],{"class":139},[129,23216,185],{"class":135},[129,23218,331],{"class":188},[129,23220,1305],{"class":139},[14,23222,23223],{},"输出结果：4",[14,23225,23226],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[83,23228,23229],{"start":51},[86,23230,23231],{},"加上非静态成员函数",[120,23233,23235],{"className":122,"code":23234,"language":124,"meta":42,"style":42},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[126,23236,23237,23244,23248,23254,23262,23266,23270,23274],{"__ignoreMap":42},[129,23238,23239,23241],{"class":131,"line":132},[129,23240,14709],{"class":135},[129,23242,23243],{"class":1977},"  Person\n",[129,23245,23246],{"class":131,"line":51},[129,23247,1560],{"class":139},[129,23249,23250,23252],{"class":131,"line":1194},[129,23251,1999],{"class":135},[129,23253,21407],{"class":139},[129,23255,23256,23258,23260],{"class":131,"line":1209},[129,23257,14924],{"class":135},[129,23259,11400],{"class":1977},[129,23261,1990],{"class":139},[129,23263,23264],{"class":131,"line":1215},[129,23265,2044],{"class":139},[129,23267,23268],{"class":131,"line":1229},[129,23269,2414],{"emptyLinePlaceholder":56},[129,23271,23272],{"class":131,"line":1235},[129,23273,2201],{"class":139},[129,23275,23276],{"class":131,"line":1326},[129,23277,4009],{"class":139},[14,23279,23280],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[83,23282,23283],{"start":1194},[86,23284,23285],{},"加上静态成员函数",[120,23287,23289],{"className":122,"code":23288,"language":124,"meta":42,"style":42},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[126,23290,23291,23297,23301,23307,23315,23319,23323,23327,23338,23342,23346,23350],{"__ignoreMap":42},[129,23292,23293,23295],{"class":131,"line":132},[129,23294,14709],{"class":135},[129,23296,23243],{"class":1977},[129,23298,23299],{"class":131,"line":51},[129,23300,1560],{"class":139},[129,23302,23303,23305],{"class":131,"line":1194},[129,23304,1999],{"class":135},[129,23306,21407],{"class":139},[129,23308,23309,23311,23313],{"class":131,"line":1209},[129,23310,14924],{"class":135},[129,23312,11400],{"class":1977},[129,23314,1990],{"class":139},[129,23316,23317],{"class":131,"line":1215},[129,23318,2044],{"class":139},[129,23320,23321],{"class":131,"line":1229},[129,23322,2414],{"emptyLinePlaceholder":56},[129,23324,23325],{"class":131,"line":1235},[129,23326,2201],{"class":139},[129,23328,23329,23331,23333,23336],{"class":131,"line":1326},[129,23330,11035],{"class":135},[129,23332,22582],{"class":135},[129,23334,23335],{"class":1977}," func1",[129,23337,1990],{"class":139},[129,23339,23340],{"class":131,"line":1332},[129,23341,2044],{"class":139},[129,23343,23344],{"class":131,"line":1344},[129,23345,2414],{"emptyLinePlaceholder":56},[129,23347,23348],{"class":131,"line":1626},[129,23349,2201],{"class":139},[129,23351,23352],{"class":131,"line":1631},[129,23353,4009],{"class":139},[14,23355,23223],{},[14,23357,23358],{},"解释：静态成员函数也不属于类上",[5141,23360,7689],{},{"title":42,"searchDepth":51,"depth":51,"links":23362},[23363,23369],{"id":14660,"depth":51,"text":14661,"children":23364},[23365,23366,23367,23368],{"id":14664,"depth":1194,"text":14665},{"id":15389,"depth":1194,"text":15390},{"id":15561,"depth":1194,"text":15562},{"id":16020,"depth":1194,"text":16021},{"id":18392,"depth":51,"text":18393,"children":23370},[23371,23372,23373,23374,23375,23376,23377,23378,23379],{"id":18404,"depth":1194,"text":18405},{"id":18697,"depth":1194,"text":18698},{"id":19188,"depth":1194,"text":19189},{"id":20285,"depth":1194,"text":20286},{"id":20708,"depth":1194,"text":20709},{"id":21187,"depth":1194,"text":21188},{"id":21562,"depth":1194,"text":21563},{"id":21975,"depth":1194,"text":21976},{"id":22912,"depth":1194,"text":22913},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14625,"description":23380},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23387,"title":124,"body":23388,"description":53,"extension":54,"meta":23392,"navigation":56,"path":23394,"seo":23395,"stem":23396,"__hash__":23397},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23389,"toc":23390},[],{"title":42,"searchDepth":51,"depth":51,"links":23391},[],{"category":23393},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":124,"description":53},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23399,"title":23400,"body":23401,"description":42,"extension":54,"meta":23991,"navigation":56,"path":23992,"seo":23993,"stem":23994,"__hash__":23995},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23402,"toc":23973},[23403,23406,23410,23413,23416,23419,23437,23442,23445,23448,23451,23454,23459,23462,23467,23470,23473,23477,23480,23483,23489,23492,23510,23514,23518,23521,23526,23529,23533,23536,23549,23552,23556,23559,23562,23565,23590,23593,23602,23613,23628,23660,23664,23671,23679,23683,23686,23689,23694,23698,23701,23704,23709,23712,23716,23719,23722,23727,23730,23734,23739,23743,23810,23814,23817,23820,23823,23826,23829,23835,23856,23859,23873,23881,23885,23888,23891,23896,23899,23904,23909,23912,23915,23920,23925,23928,23933,23938,23941,23946,23951,23954,23957,23962,23965,23970],[10,23404,23400],{"id":23405},"_1强化学习基本认识",[71,23407,23409],{"id":23408},"_11什么是强化学习","1.1.什么是强化学习",[14,23411,23412],{},"强化学习有两部分组成：智能体和环境；",[14,23414,23415],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23417,23418],{},"强化学习与监督学习的区别:",[83,23420,23421,23424,23427,23430],{},[86,23422,23423],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[86,23425,23426],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[86,23428,23429],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[86,23431,23432,23433,23436],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[289,23434,23435],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23438,23439],{},[40,23440],{"alt":42,"src":23441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23443,23444],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23446,23447],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23449,23450],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23452,23453],{},"获取奖励",[14,23455,23456],{},[40,23457],{"alt":42,"src":23458},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23460,23461],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23463,23464],{},[40,23465],{"alt":42,"src":23466},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23468,23469],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23471,23472],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[71,23474,23476],{"id":23475},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23478,23479],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23481,23482],{},"具身智能中的应用",[14,23484,23485,23488],{},[289,23486,23487],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23490,23491],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23493,23494,23495,23498,23499,23502,23503,23506,23507],{},"机器人是",[289,23496,23497],{},"躯体","，深度学习是",[289,23500,23501],{},"神经元****网络","，VLA是",[289,23504,23505],{},"通用的行为逻辑","，而强化学习是",[289,23508,23509],{},"教练",[71,23511,23513],{"id":23512},"_13序列决策","1.3.序列决策",[100,23515,23517],{"id":23516},"_131智能体与环境","1.3.1.智能体与环境",[14,23519,23520],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23522,23523],{},[40,23524],{"alt":42,"src":23525},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23527,23528],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[100,23530,23532],{"id":23531},"_132奖励","1.3.2.奖励",[14,23534,23535],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23537,23538,23539,23548],{},"取某个策略的表现如何。强化学习的目的就是",[289,23540,23541,23542,23547],{},"最大化",[289,23543,23544],{},[289,23545,23546],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23550,23551],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[100,23553,23555],{"id":23554},"_133序列决策","1.3.3.序列决策",[14,23557,23558],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23560,23561],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23563,23564],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23566,23567,23571,23572,23574,23575,23577,23578,23580,23581,13810,23584,13810,23587],{},[23568,23569,23570],"em",{},"Ht"," = ",[23568,23573,735],{},"1*, a",[23568,23576,357],{},", r",[23568,23579,357],{},", . . . ,* ",[23568,23582,23583],{},"ot",[23568,23585,23586],{},", at ,",[23568,23588,23589],{},"rt",[14,23591,23592],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23594,23595,23571,23598,1672,23600,568],{},[23568,23596,23597],{},"st",[23568,23599,192],{},[23568,23601,23570],{},[14,23603,23604,23605,23608,23609,23612],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[289,23606,23607],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[289,23610,23611],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23614,23615,23616,23619,23620,23623,23624,23627],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[289,23617,23618],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[289,23621,23622],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23568,23625,23626],{},"S, A, T, R, Ω, O, γ",")。",[14,23629,23630,23631,23633,23634,23636,23637,140,23639,23642,23643,23645,23646,140,23649,23652,23653,23655,23656,23659],{},"其中 ",[23568,23632,828],{}," 表示状态空间，为隐变量，",[23568,23635,372],{}," 为动作空间，",[23568,23638,853],{},[23568,23640,23641],{},"s ′ |s, a",") 为状态转移概率，",[23568,23644,803],{}," 为奖励函数，",[23568,23647,23648],{},"Ω",[23568,23650,23651],{},"o|s, a",") 为观测概率，",[23568,23654,729],{}," 为观测空间，",[23568,23657,23658],{},"γ"," 为折扣因子。",[71,23661,23663],{"id":23662},"_14动作空间","1.4.动作空间",[14,23665,23666,23667,23670],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[289,23668,23669],{},"动作空间"," ，动作空间分为:",[83,23672,23673,23676],{},[86,23674,23675],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[86,23677,23678],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[71,23680,23682],{"id":23681},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23684,23685],{},"由策略、价值函数、模型三部分组成",[14,23687,23688],{},"这三者组成马尔可夫决策过程",[14,23690,23691],{},[40,23692],{"alt":42,"src":23693},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[100,23695,23697],{"id":23696},"_151策略","1.5.1.策略",[14,23699,23700],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23702,23703],{},"策略可分为两种：",[14,23705,23706],{},[40,23707],{"alt":42,"src":23708},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23710,23711],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[100,23713,23715],{"id":23714},"_152价值函数","1.5.2.价值函数",[14,23717,23718],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23720,23721],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23723,23724],{},[40,23725],{"alt":42,"src":23726},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23728,23729],{},"进入某个状态采取的最优动作可以通过Q函数得到",[100,23731,23733],{"id":23732},"_153模型","1.5.3.模型",[14,23735,23736],{},[40,23737],{"alt":42,"src":23738},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[71,23740,23742],{"id":23741},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[277,23744,23745,23756],{},[280,23746,23747],{},[283,23748,23749,23753],{},[286,23750,23752],{"align":23751},"left","类型",[286,23754,23755],{"align":23751},"特点",[324,23757,23758,23768,23778,23788,23800],{},[283,23759,23760,23765],{},[329,23761,23762],{"align":23751},[289,23763,23764],{},"基于价值的智能体",[329,23766,23767],{"align":23751},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[283,23769,23770,23775],{},[329,23771,23772],{"align":23751},[289,23773,23774],{},"基于策略的智能体",[329,23776,23777],{"align":23751},"直接学习策略，没有学习价值函数",[283,23779,23780,23785],{},[329,23781,23782],{"align":23751},[289,23783,23784],{},"演员-评论员智能体",[329,23786,23787],{"align":23751},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[283,23789,23790,23795],{},[329,23791,23792],{"align":23751},[289,23793,23794],{},"有模型强化学习智能体",[329,23796,23797],{"align":23751},[40,23798],{"alt":42,"src":23799},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[283,23801,23802,23807],{},[329,23803,23804],{"align":23751},[289,23805,23806],{},"免模型强化学习智能体",[329,23808,23809],{"align":23751},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[71,23811,23813],{"id":23812},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23815,23816],{},"学习和规划是序列决策的两个基本问题",[14,23818,23819],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23821,23822],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23824,23825],{},"强化学习用到的库：Gym",[14,23827,23828],{},"Gym可以检验强化学习算法的优劣",[14,23830,23831,23834],{},[289,23832,23833],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[120,23836,23840],{"className":23837,"code":23838,"language":23839,"meta":42,"style":42},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[126,23841,23842],{"__ignoreMap":42},[129,23843,23844,23847,23850,23853],{"class":131,"line":132},[129,23845,23846],{"class":1977},"pip",[129,23848,23849],{"class":244}," install",[129,23851,23852],{"class":244}," gym==",[129,23854,23855],{"class":188},"0.25.2\n",[14,23857,23858],{},"显示图形界面需要",[120,23860,23862],{"className":23837,"code":23861,"language":23839,"meta":42,"style":42},"pip install pygame\n",[126,23863,23864],{"__ignoreMap":42},[129,23865,23866,23868,23870],{"class":131,"line":132},[129,23867,23846],{"class":1977},[129,23869,23849],{"class":244},[129,23871,23872],{"class":244}," pygame\n",[14,23874,23875,23876],{},"有关Gym库的相关文档介绍：",[20,23877,23880],{"href":23878,"rel":23879},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[71,23882,23884],{"id":23883},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23886,23887],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23889,23890],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23892,23893],{},[40,23894],{"alt":42,"src":23895},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23897,23898],{},"折扣率需要自己来设定",[14,23900,23901],{},[40,23902],{"alt":42,"src":23903},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[83,23905,23906],{},[86,23907,23908],{},"状态转移函数：",[14,23910,23911],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23913,23914],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23916,23917],{},[40,23918],{"alt":42,"src":23919},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[83,23921,23922],{"start":51},[86,23923,23924],{},"动作价值函数：",[14,23926,23927],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23929,23930],{},[40,23931],{"alt":42,"src":23932},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[83,23934,23935],{"start":1194},[86,23936,23937],{},"最优动作价值函数：",[14,23939,23940],{},"这个函数是对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,23942,23943],{},[40,23944],{"alt":42,"src":23945},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[83,23947,23948],{"start":1209},[86,23949,23950],{},"状态价值函数:",[14,23952,23953],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,23955,23956],{},"它衡量的是“一个具体动作”的长期价值",[14,23958,23959],{},[40,23960],{"alt":42,"src":23961},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,23963,23964],{},"几个价值函数之间的比较：",[14,23966,23967],{},[40,23968],{"alt":42,"src":23969},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5141,23971,23972],{},"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":42,"searchDepth":51,"depth":51,"links":23974},[23975,23976,23977,23982,23983,23988,23989,23990],{"id":23408,"depth":51,"text":23409},{"id":23475,"depth":51,"text":23476},{"id":23512,"depth":51,"text":23513,"children":23978},[23979,23980,23981],{"id":23516,"depth":1194,"text":23517},{"id":23531,"depth":1194,"text":23532},{"id":23554,"depth":1194,"text":23555},{"id":23662,"depth":51,"text":23663},{"id":23681,"depth":51,"text":23682,"children":23984},[23985,23986,23987],{"id":23696,"depth":1194,"text":23697},{"id":23714,"depth":1194,"text":23715},{"id":23732,"depth":1194,"text":23733},{"id":23741,"depth":51,"text":23742},{"id":23812,"depth":51,"text":23813},{"id":23883,"depth":51,"text":23884},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23400,"description":42},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23997,"title":23998,"body":23999,"description":24006,"extension":54,"meta":24017,"navigation":56,"path":24018,"seo":24019,"stem":24020,"__hash__":24021},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24000,"toc":24015},[24001,24004,24007,24012],[10,24002,23998],{"id":24003},"_2马尔可夫决策过程",[14,24005,24006],{},"这是强化学习的基本框架",[14,24008,24009],{},[40,24010],{"alt":42,"src":24011},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24013,24014],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":42,"searchDepth":51,"depth":51,"links":24016},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23998,"description":24006},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24023,"title":24024,"body":24025,"description":42,"extension":54,"meta":24141,"navigation":56,"path":24142,"seo":24143,"stem":24144,"__hash__":24145},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24026,"toc":24136},[24027,24030,24034,24037,24042,24047,24050,24055,24058,24063,24066,24070,24075,24078,24083,24088,24093,24096,24100,24105,24108,24113,24118,24123,24128,24131],[10,24028,24024],{"id":24029},"_3动作价值函数",[71,24031,24033],{"id":24032},"_31dqn","3.1.DQN",[14,24035,24036],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24038,24039],{},[40,24040],{"alt":42,"src":24041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24043,24044],{},[40,24045],{"alt":42,"src":24046},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24048,24049],{},"DQN算法的描述：",[14,24051,24052],{},[40,24053],{"alt":42,"src":24054},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24056,24057],{},"这里的Dense指的是全连接层",[14,24059,24060],{},[40,24061],{"alt":42,"src":24062},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24064,24065],{},"当前观测的状态为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算法",[71,24067,24069],{"id":24068},"_32dqn的举例","3.2.DQN的举例",[14,24071,24072],{},[40,24073],{"alt":42,"src":24074},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24076,24077],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24079,24080],{},[40,24081],{"alt":42,"src":24082},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24084,24085],{},[40,24086],{"alt":42,"src":24087},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24089,24090],{},[40,24091],{"alt":42,"src":24092},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24094,24095],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[71,24097,24099],{"id":24098},"_33td算法","3.3.TD算法",[14,24101,24102],{},[40,24103],{"alt":42,"src":24104},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24106,24107],{},"强化学习TD算法公式的粗略解释：",[14,24109,24110],{},[40,24111],{"alt":42,"src":24112},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24114,24115],{},[40,24116],{"alt":42,"src":24117},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24119,24120],{},[40,24121],{"alt":42,"src":24122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24124,24125],{},[40,24126],{"alt":42,"src":24127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24129,24130],{},"TD算法总结：",[14,24132,24133],{},[40,24134],{"alt":42,"src":24135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":42,"searchDepth":51,"depth":51,"links":24137},[24138,24139,24140],{"id":24032,"depth":51,"text":24033},{"id":24068,"depth":51,"text":24069},{"id":24098,"depth":51,"text":24099},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24024,"description":42},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24147,"title":24148,"body":24149,"description":42,"extension":54,"meta":24382,"navigation":56,"path":24383,"seo":24384,"stem":24385,"__hash__":24386},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24150,"toc":24378},[24151,24154,24158,24161,24164,24169,24174,24177,24182,24187,24190,24195,24198,24203,24206,24211,24214,24219,24222,24227,24232,24235,24240,24243,24246,24251,24254,24259,24264,24268,24271,24274,24279,24284,24287,24292,24297,24300,24305,24308,24311,24316,24319,24324,24327,24332,24337,24340,24345,24350,24353,24358,24361,24366,24369],[10,24152,24148],{"id":24153},"_4策略学习",[71,24155,24157],{"id":24156},"_41概念描述","4.1.概念描述",[14,24159,24160],{},"用神经网络（策略网络）近似策略函数",[14,24162,24163],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24165,24166],{},[40,24167],{"alt":42,"src":24168},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24170,24171],{},[40,24172],{"alt":42,"src":24173},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24175,24176],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24178,24179],{},[40,24180],{"alt":42,"src":24181},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24183,24184],{},[40,24185],{"alt":42,"src":24186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24188,24189],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24191,24192],{},[40,24193],{"alt":42,"src":24194},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24196,24197],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24199,24200],{},[40,24201],{"alt":42,"src":24202},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24204,24205],{},"改进theta要用到策略梯度算法",[14,24207,24208],{},[40,24209],{"alt":42,"src":24210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24212,24213],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24215,24216],{},[40,24217],{"alt":42,"src":24218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24220,24221],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24223,24224],{},[40,24225],{"alt":42,"src":24226},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24228,24229],{},[40,24230],{"alt":42,"src":24231},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24233,24234],{},"梯度公式总结：",[14,24236,24237],{},[40,24238],{"alt":42,"src":24239},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24241,24242],{},"两个公式的分别应用场景：",[14,24244,24245],{},"对于离散的动作：",[14,24247,24248],{},[40,24249],{"alt":42,"src":24250},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24252,24253],{},"对于连续的动作：",[14,24255,24256],{},[40,24257],{"alt":42,"src":24258},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24260,24261],{},[40,24262],{"alt":42,"src":24263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[71,24265,24267],{"id":24266},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24269,24270],{},"使用蒙特卡洛来近似计算策略梯度",[14,24272,24273],{},"蒙特卡洛法的解释如下：",[14,24275,24276],{},[40,24277],{"alt":42,"src":24278},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24280,24281],{},[40,24282],{"alt":42,"src":24283},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24285,24286],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[83,24288,24289],{},[86,24290,24291],{},"方法一：reinforce算法",[14,24293,24294],{},[40,24295],{"alt":42,"src":24296},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24298,24299],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[83,24301,24302],{"start":51},[86,24303,24304],{},"方法二：actor-critic算法",[14,24306,24307],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24309,24310],{},"两个网络的构建：",[14,24312,24313],{},[40,24314],{"alt":42,"src":24315},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24317,24318],{},"actor网路：",[14,24320,24321],{},[40,24322],{"alt":42,"src":24323},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24325,24326],{},"critic网络",[14,24328,24329],{},[40,24330],{"alt":42,"src":24331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[83,24333,24334],{"start":1194},[86,24335,24336],{},"网络的训练",[14,24338,24339],{},"网络描述",[14,24341,24342],{},[40,24343],{"alt":42,"src":24344},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24346,24347],{},[40,24348],{"alt":42,"src":24349},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24351,24352],{},"TD算法更新梯度：",[14,24354,24355],{},[40,24356],{"alt":42,"src":24357},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24359,24360],{},"策略网络更新梯度：",[14,24362,24363],{},[40,24364],{"alt":42,"src":24365},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24367,24368],{},"训练整个流程的具体描述：",[14,24370,24371,24374,24375],{},[40,24372],{"alt":42,"src":24373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[40,24376],{"alt":42,"src":24377},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":42,"searchDepth":51,"depth":51,"links":24379},[24380,24381],{"id":24156,"depth":51,"text":24157},{"id":24266,"depth":51,"text":24267},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24148,"description":42},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24388,"title":24389,"body":24390,"description":24397,"extension":54,"meta":24447,"navigation":56,"path":24448,"seo":24449,"stem":24450,"__hash__":24451},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24391,"toc":24443},[24392,24395,24398,24402,24405,24410,24414,24417,24422,24425,24430,24435,24438],[10,24393,24389],{"id":24394},"_5alphago算法",[14,24396,24397],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[71,24399,24401],{"id":24400},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24403,24404],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24406,24407],{},[40,24408],{"alt":42,"src":24409},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[71,24411,24413],{"id":24412},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24415,24416],{},"采用强化学习的方式训练策略网络",[14,24418,24419],{},[40,24420],{"alt":42,"src":24421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24423,24424],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24426,24427],{},[40,24428],{"alt":42,"src":24429},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24431,24432],{},[40,24433],{"alt":42,"src":24434},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24436,24437],{},"强化学习训练策略网络的总结：",[14,24439,24440],{},[40,24441],{"alt":42,"src":24442},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":42,"searchDepth":51,"depth":51,"links":24444},[24445,24446],{"id":24400,"depth":51,"text":24401},{"id":24412,"depth":51,"text":24413},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24389,"description":24397},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24453,"title":24454,"body":24455,"description":24462,"extension":54,"meta":24465,"navigation":56,"path":24466,"seo":24467,"stem":24468,"__hash__":24469},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24456,"toc":24463},[24457,24460],[10,24458,24454],{"id":24459},"_6价值网络",[14,24461,24462],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":42,"searchDepth":51,"depth":51,"links":24464},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24454,"description":24462},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24471,"title":24472,"body":24473,"description":24477,"extension":54,"meta":24478,"navigation":56,"path":24479,"seo":24480,"stem":24481,"__hash__":24482},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24474,"toc":24475},[],{"title":42,"searchDepth":51,"depth":51,"links":24476},[],"记录自己的强化学习笔记。",{"category":23393},"\u002Fwiki\u002F2025-12-04",{"title":24472,"description":24477},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":4,"title":5,"body":24484,"description":53,"extension":54,"meta":24514,"navigation":56,"path":57,"seo":24515,"stem":59,"__hash__":60},{"type":7,"value":24485,"toc":24512},[24486,24488,24490,24495,24497,24502,24504,24508,24510],[10,24487,5],{"id":12},[14,24489,16],{},[14,24491,24492],{},[20,24493,22],{"href":22,"rel":24494},[24],[14,24496,27],{},[14,24498,24499],{},[20,24500,32],{"href":32,"rel":24501},[24],[14,24503,36],{},[14,24505,24506],{},[40,24507],{"alt":42,"src":43},[14,24509,46],{},[14,24511,49],{},{"title":42,"searchDepth":51,"depth":51,"links":24513},[],{},{"title":5,"description":53},{"id":24517,"title":24518,"body":24519,"description":53,"extension":54,"meta":24635,"navigation":56,"path":24636,"seo":24637,"stem":24638,"__hash__":24639},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24520,"toc":24630},[24521,24524,24528,24531,24538,24542,24545,24554,24564,24568,24598,24601,24627],[10,24522,24518],{"id":24523},"_2-环境准备与设备连接",[71,24525,24527],{"id":24526},"_21-系统与环境","2.1 系统与环境",[14,24529,24530],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24532,24533,24534,24537],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[126,24535,24536],{},"lerobot"," 依赖。",[71,24539,24541],{"id":24540},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24543,24544],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[120,24546,24548],{"className":23837,"code":24547,"language":23839,"meta":42,"style":42},"lerobot-find-out\n",[126,24549,24550],{"__ignoreMap":42},[129,24551,24552],{"class":131,"line":132},[129,24553,24547],{"class":1977},[14,24555,24556,24557,352,24560,24563],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[126,24558,24559],{},"\u002Fdev\u002FttyACM0",[126,24561,24562],{},"\u002Fdev\u002FttyACM1","）。",[71,24565,24567],{"id":24566},"_23-串口授权","2.3 串口授权",[120,24569,24571],{"className":23837,"code":24570,"language":23839,"meta":42,"style":42},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[126,24572,24573,24587],{"__ignoreMap":42},[129,24574,24575,24578,24581,24584],{"class":131,"line":132},[129,24576,24577],{"class":1977},"sudo",[129,24579,24580],{"class":244}," chmod",[129,24582,24583],{"class":188}," 666",[129,24585,24586],{"class":244}," \u002Fdev\u002FttyACM0\n",[129,24588,24589,24591,24593,24595],{"class":131,"line":51},[129,24590,24577],{"class":1977},[129,24592,24580],{"class":244},[129,24594,24583],{"class":188},[129,24596,24597],{"class":244}," \u002Fdev\u002FttyACM1\n",[14,24599,24600],{},"说明：",[1146,24602,24603,24608,24614,24624],{},[86,24604,24605,24607],{},[126,24606,24577],{},"：以 root 权限执行命令。",[86,24609,24610,24613],{},[126,24611,24612],{},"chmod","：修改设备节点权限。",[86,24615,24616,24619,24620,24623],{},[126,24617,24618],{},"666","：",[126,24621,24622],{},"rw-rw-rw-","，所有用户可读写。",[86,24625,24626],{},"串口号必须替换为你机器上的真实端口。",[5141,24628,24629],{},"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":42,"searchDepth":51,"depth":51,"links":24631},[24632,24633,24634],{"id":24526,"depth":51,"text":24527},{"id":24540,"depth":51,"text":24541},{"id":24566,"depth":51,"text":24567},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24518,"description":53},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24641,"title":24642,"body":24643,"description":53,"extension":54,"meta":24804,"navigation":56,"path":24805,"seo":24806,"stem":24807,"__hash__":24808},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24644,"toc":24800},[24645,24649,24653,24659,24662,24719,24722,24726,24729,24797],[10,24646,24648],{"id":24647},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[71,24650,24652],{"id":24651},"_31-配置电机-id","3.1 配置电机 ID",[14,24654,24655,24656,24658],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[126,24657,357],{},"，需要改成机械臂链路里不冲突的编号。",[14,24660,24661],{},"方式一：用 LeRobot 命令逐步写入。",[120,24663,24665],{"className":23837,"code":24664,"language":23839,"meta":42,"style":42},"# 主臂舵机配置 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",[126,24666,24667,24672,24680,24687,24692,24696,24701,24707,24714],{"__ignoreMap":42},[129,24668,24669],{"class":131,"line":132},[129,24670,24671],{"class":198},"# 主臂舵机配置 ID\n",[129,24673,24674,24677],{"class":131,"line":51},[129,24675,24676],{"class":1977},"lerobot-setup-motors",[129,24678,24679],{"class":188}," \\\n",[129,24681,24682,24685],{"class":131,"line":1194},[129,24683,24684],{"class":188},"  --teleop.type=so101_leader",[129,24686,24679],{"class":188},[129,24688,24689],{"class":131,"line":1209},[129,24690,24691],{"class":188},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[129,24693,24694],{"class":131,"line":1215},[129,24695,2414],{"emptyLinePlaceholder":56},[129,24697,24698],{"class":131,"line":1229},[129,24699,24700],{"class":198},"# 从臂舵机配置 ID\n",[129,24702,24703,24705],{"class":131,"line":1235},[129,24704,24676],{"class":1977},[129,24706,24679],{"class":188},[129,24708,24709,24712],{"class":131,"line":1326},[129,24710,24711],{"class":188},"  --robot.type=so101_follower",[129,24713,24679],{"class":188},[129,24715,24716],{"class":131,"line":1332},[129,24717,24718],{"class":188},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24720,24721],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[71,24723,24725],{"id":24724},"_32-机械臂校准","3.2 机械臂校准",[14,24727,24728],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[120,24730,24732],{"className":23837,"code":24731,"language":23839,"meta":42,"style":42},"# 主臂校准\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",[126,24733,24734,24739,24746,24752,24759,24764,24768,24773,24779,24785,24792],{"__ignoreMap":42},[129,24735,24736],{"class":131,"line":132},[129,24737,24738],{"class":198},"# 主臂校准\n",[129,24740,24741,24744],{"class":131,"line":51},[129,24742,24743],{"class":1977},"lerobot-calibrate",[129,24745,24679],{"class":188},[129,24747,24748,24750],{"class":131,"line":1194},[129,24749,24684],{"class":188},[129,24751,24679],{"class":188},[129,24753,24754,24757],{"class":131,"line":1209},[129,24755,24756],{"class":188},"  --teleop.port=\u002Fdev\u002FttyACM0",[129,24758,24679],{"class":188},[129,24760,24761],{"class":131,"line":1215},[129,24762,24763],{"class":188},"  --teleop.id=my_awesome_leader_arm\n",[129,24765,24766],{"class":131,"line":1229},[129,24767,2414],{"emptyLinePlaceholder":56},[129,24769,24770],{"class":131,"line":1235},[129,24771,24772],{"class":198},"# 从臂校准\n",[129,24774,24775,24777],{"class":131,"line":1326},[129,24776,24743],{"class":1977},[129,24778,24679],{"class":188},[129,24780,24781,24783],{"class":131,"line":1332},[129,24782,24711],{"class":188},[129,24784,24679],{"class":188},[129,24786,24787,24790],{"class":131,"line":1344},[129,24788,24789],{"class":188},"  --robot.port=\u002Fdev\u002FttyACM1",[129,24791,24679],{"class":188},[129,24793,24794],{"class":131,"line":1626},[129,24795,24796],{"class":188},"  --robot.id=my_awesome_follower_arm\n",[5141,24798,24799],{},"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":42,"searchDepth":51,"depth":51,"links":24801},[24802,24803],{"id":24651,"depth":51,"text":24652},{"id":24724,"depth":51,"text":24725},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24642,"description":53},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24810,"title":24811,"body":24812,"description":53,"extension":54,"meta":25003,"navigation":56,"path":25004,"seo":25005,"stem":25006,"__hash__":25007},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24813,"toc":24999},[24814,24817,24821,24868,24872,24885,24948,24951,24996],[10,24815,24811],{"id":24816},"_4-遥操与相机接入",[71,24818,24820],{"id":24819},"_41-不带相机遥操","4.1 不带相机遥操",[120,24822,24824],{"className":23837,"code":24823,"language":23839,"meta":42,"style":42},"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",[126,24825,24826,24833,24839,24845,24852,24858,24864],{"__ignoreMap":42},[129,24827,24828,24831],{"class":131,"line":132},[129,24829,24830],{"class":1977},"lerobot-teleoperate",[129,24832,24679],{"class":188},[129,24834,24835,24837],{"class":131,"line":51},[129,24836,24711],{"class":188},[129,24838,24679],{"class":188},[129,24840,24841,24843],{"class":131,"line":1194},[129,24842,24789],{"class":188},[129,24844,24679],{"class":188},[129,24846,24847,24850],{"class":131,"line":1209},[129,24848,24849],{"class":188},"  --robot.id=my_awesome_follower_arm",[129,24851,24679],{"class":188},[129,24853,24854,24856],{"class":131,"line":1215},[129,24855,24684],{"class":188},[129,24857,24679],{"class":188},[129,24859,24860,24862],{"class":131,"line":1229},[129,24861,24756],{"class":188},[129,24863,24679],{"class":188},[129,24865,24866],{"class":131,"line":1235},[129,24867,24763],{"class":188},[71,24869,24871],{"id":24870},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[120,24873,24875],{"className":23837,"code":24874,"language":23839,"meta":42,"style":42},"lerobot-find-cameras opencv\n",[126,24876,24877],{"__ignoreMap":42},[129,24878,24879,24882],{"class":131,"line":132},[129,24880,24881],{"class":1977},"lerobot-find-cameras",[129,24883,24884],{"class":244}," opencv\n",[120,24886,24888],{"className":23837,"code":24887,"language":23839,"meta":42,"style":42},"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",[126,24889,24890,24896,24902,24908,24914,24924,24930,24936,24943],{"__ignoreMap":42},[129,24891,24892,24894],{"class":131,"line":132},[129,24893,24830],{"class":1977},[129,24895,24679],{"class":188},[129,24897,24898,24900],{"class":131,"line":51},[129,24899,24711],{"class":188},[129,24901,24679],{"class":188},[129,24903,24904,24906],{"class":131,"line":1194},[129,24905,24789],{"class":188},[129,24907,24679],{"class":188},[129,24909,24910,24912],{"class":131,"line":1209},[129,24911,24849],{"class":188},[129,24913,24679],{"class":188},[129,24915,24916,24919,24922],{"class":131,"line":1215},[129,24917,24918],{"class":188},"  --robot.cameras=",[129,24920,24921],{"class":244},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[129,24923,24679],{"class":188},[129,24925,24926,24928],{"class":131,"line":1229},[129,24927,24684],{"class":188},[129,24929,24679],{"class":188},[129,24931,24932,24934],{"class":131,"line":1235},[129,24933,24756],{"class":188},[129,24935,24679],{"class":188},[129,24937,24938,24941],{"class":131,"line":1326},[129,24939,24940],{"class":188},"  --teleop.id=my_awesome_leader_arm",[129,24942,24679],{"class":188},[129,24944,24945],{"class":131,"line":1332},[129,24946,24947],{"class":188},"  --display_data=true\n",[14,24949,24950],{},"相机参数说明：",[1146,24952,24953,24959,24965,24974,24984,24990],{},[86,24954,24955,24958],{},[126,24956,24957],{},"front","：相机名称。",[86,24960,24961,24964],{},[126,24962,24963],{},"type: opencv","：相机驱动类型。",[86,24966,24967,24970,24971,24563],{},[126,24968,24969],{},"index_or_path","：设备编号或设备路径（如 ",[126,24972,24973],{},"\u002Fdev\u002Fvideo4",[86,24975,24976,24979,24980,24983],{},[126,24977,24978],{},"width"," \u002F ",[126,24981,24982],{},"height","：图像分辨率。",[86,24985,24986,24989],{},[126,24987,24988],{},"fps","：采样帧率。",[86,24991,24992,24995],{},[126,24993,24994],{},"--display_data=true","：启用实时可视化。",[5141,24997,24998],{},"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":42,"searchDepth":51,"depth":51,"links":25000},[25001,25002],{"id":24819,"depth":51,"text":24820},{"id":24870,"depth":51,"text":24871},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24811,"description":53},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25009,"title":25010,"body":25011,"description":53,"extension":54,"meta":25183,"navigation":56,"path":25184,"seo":25185,"stem":25186,"__hash__":25187},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25012,"toc":25178},[25013,25017,25021,25026,25031,25034,25076,25082,25086,25135,25140,25144,25147,25155,25160,25165,25170,25175],[10,25014,25016],{"id":25015},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[71,25018,25020],{"id":25019},"_51-生成访问令牌","5.1 生成访问令牌",[14,25022,25023],{},[40,25024],{"alt":42,"src":25025},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25027,25028],{},[40,25029],{"alt":42,"src":25030},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25032,25033],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[120,25035,25037],{"className":23837,"code":25036,"language":23839,"meta":42,"style":42},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[126,25038,25039,25052],{"__ignoreMap":42},[129,25040,25041,25044,25047,25049],{"class":131,"line":132},[129,25042,25043],{"class":135},"export",[129,25045,25046],{"class":139}," HF_TOKEN",[129,25048,185],{"class":135},[129,25050,25051],{"class":244},"\"your_huggingface_token\"\n",[129,25053,25054,25057,25060,25063,25066,25068,25071,25073],{"class":131,"line":51},[129,25055,25056],{"class":1977},"hf",[129,25058,25059],{"class":244}," auth",[129,25061,25062],{"class":244}," login",[129,25064,25065],{"class":188}," --token",[129,25067,9739],{"class":244},[129,25069,25070],{"class":139},"$HF_TOKEN",[129,25072,390],{"class":244},[129,25074,25075],{"class":188}," --add-to-git-credential\n",[14,25077,25078,25081],{},[126,25079,25080],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[71,25083,25085],{"id":25084},"_52-验证登录","5.2 验证登录",[120,25087,25089],{"className":23837,"code":25088,"language":23839,"meta":42,"style":42},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[126,25090,25091,25122],{"__ignoreMap":42},[129,25092,25093,25096,25098,25101,25103,25105,25108,25111,25114,25117,25120],{"class":131,"line":132},[129,25094,25095],{"class":139},"HF_USER",[129,25097,185],{"class":135},[129,25099,25100],{"class":139},"$(",[129,25102,25056],{"class":1977},[129,25104,25059],{"class":244},[129,25106,25107],{"class":244}," whoami",[129,25109,25110],{"class":135}," |",[129,25112,25113],{"class":1977}," head",[129,25115,25116],{"class":188}," -n",[129,25118,25119],{"class":188}," 1",[129,25121,146],{"class":139},[129,25123,25124,25127,25129,25132],{"class":131,"line":51},[129,25125,25126],{"class":188},"echo",[129,25128,9739],{"class":244},[129,25130,25131],{"class":139},"$HF_USER",[129,25133,25134],{"class":244},"\"\n",[14,25136,25137],{},[40,25138],{"alt":42,"src":25139},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[71,25141,25143],{"id":25142},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25145,25146],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1146,25148,25149,25152],{},[86,25150,25151],{},"Dataset Repo（用于上传演示数据）",[86,25153,25154],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25156,25157],{},[40,25158],{"alt":42,"src":25159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25161,25162],{},[40,25163],{"alt":42,"src":25164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25166,25167],{},[40,25168],{"alt":42,"src":25169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25171,25172],{},[40,25173],{"alt":42,"src":25174},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5141,25176,25177],{},"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":42,"searchDepth":51,"depth":51,"links":25179},[25180,25181,25182],{"id":25019,"depth":51,"text":25020},{"id":25084,"depth":51,"text":25085},{"id":25142,"depth":51,"text":25143},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25010,"description":53},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25189,"title":25190,"body":25191,"description":53,"extension":54,"meta":25388,"navigation":56,"path":25389,"seo":25390,"stem":25391,"__hash__":25392},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25192,"toc":25383},[25193,25197,25201,25297,25305,25310,25314,25330,25333,25337,25380],[10,25194,25196],{"id":25195},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[71,25198,25200],{"id":25199},"_61-录制示教数据","6.1 录制示教数据",[120,25202,25204],{"className":23837,"code":25203,"language":23839,"meta":42,"style":42},"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",[126,25205,25206,25213,25219,25225,25231,25240,25246,25252,25258,25265,25275,25282,25292],{"__ignoreMap":42},[129,25207,25208,25211],{"class":131,"line":132},[129,25209,25210],{"class":1977},"lerobot-record",[129,25212,24679],{"class":188},[129,25214,25215,25217],{"class":131,"line":51},[129,25216,24711],{"class":188},[129,25218,24679],{"class":188},[129,25220,25221,25223],{"class":131,"line":1194},[129,25222,24789],{"class":188},[129,25224,24679],{"class":188},[129,25226,25227,25229],{"class":131,"line":1209},[129,25228,24849],{"class":188},[129,25230,24679],{"class":188},[129,25232,25233,25235,25238],{"class":131,"line":1215},[129,25234,24918],{"class":188},[129,25236,25237],{"class":244},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[129,25239,24679],{"class":188},[129,25241,25242,25244],{"class":131,"line":1229},[129,25243,24684],{"class":188},[129,25245,24679],{"class":188},[129,25247,25248,25250],{"class":131,"line":1235},[129,25249,24756],{"class":188},[129,25251,24679],{"class":188},[129,25253,25254,25256],{"class":131,"line":1326},[129,25255,24940],{"class":188},[129,25257,24679],{"class":188},[129,25259,25260,25263],{"class":131,"line":1332},[129,25261,25262],{"class":188},"  --display_data=true",[129,25264,24679],{"class":188},[129,25266,25267,25270,25273],{"class":131,"line":1344},[129,25268,25269],{"class":188},"  --dataset.repo_id=",[129,25271,25272],{"class":244},"\"Embodied-AI-6\u002Fso101_test\"",[129,25274,24679],{"class":188},[129,25276,25277,25280],{"class":131,"line":1626},[129,25278,25279],{"class":188},"  --dataset.num_episodes=10",[129,25281,24679],{"class":188},[129,25283,25284,25287,25290],{"class":131,"line":1631},[129,25285,25286],{"class":188},"  --dataset.single_task=",[129,25288,25289],{"class":244},"\"Grab the green cube\"",[129,25291,24679],{"class":188},[129,25293,25294],{"class":131,"line":1637},[129,25295,25296],{"class":188},"  --resume=true\n",[1146,25298,25299],{},[86,25300,25301,25304],{},[126,25302,25303],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25306,25307],{},[40,25308],{"alt":42,"src":25309},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[71,25311,25313],{"id":25312},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[120,25315,25317],{"className":23837,"code":25316,"language":23839,"meta":42,"style":42},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[126,25318,25319],{"__ignoreMap":42},[129,25320,25321,25324,25327],{"class":131,"line":132},[129,25322,25323],{"class":1977},"rm",[129,25325,25326],{"class":188}," -rf",[129,25328,25329],{"class":244}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25331,25332],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[71,25334,25336],{"id":25335},"_63-回放指定-episode","6.3 回放指定 episode",[120,25338,25340],{"className":23837,"code":25339,"language":23839,"meta":42,"style":42},"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",[126,25341,25342,25349,25355,25361,25367,25375],{"__ignoreMap":42},[129,25343,25344,25347],{"class":131,"line":132},[129,25345,25346],{"class":1977},"lerobot-replay",[129,25348,24679],{"class":188},[129,25350,25351,25353],{"class":131,"line":51},[129,25352,24711],{"class":188},[129,25354,24679],{"class":188},[129,25356,25357,25359],{"class":131,"line":1194},[129,25358,24789],{"class":188},[129,25360,24679],{"class":188},[129,25362,25363,25365],{"class":131,"line":1209},[129,25364,24849],{"class":188},[129,25366,24679],{"class":188},[129,25368,25369,25371,25373],{"class":131,"line":1215},[129,25370,25269],{"class":188},[129,25372,25272],{"class":244},[129,25374,24679],{"class":188},[129,25376,25377],{"class":131,"line":1229},[129,25378,25379],{"class":188},"  --dataset.episode=0\n",[5141,25381,25382],{},"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":42,"searchDepth":51,"depth":51,"links":25384},[25385,25386,25387],{"id":25199,"depth":51,"text":25200},{"id":25312,"depth":51,"text":25313},{"id":25335,"depth":51,"text":25336},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25190,"description":53},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25394,"title":25395,"body":25396,"description":53,"extension":54,"meta":25524,"navigation":56,"path":25525,"seo":25526,"stem":25527,"__hash__":25528},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25397,"toc":25522},[25398,25402,25465,25468,25515,25520],[10,25399,25401],{"id":25400},"_7-act-模型训练","7. ACT 模型训练",[120,25403,25405],{"className":23837,"code":25404,"language":23839,"meta":42,"style":42},"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",[126,25406,25407,25414,25422,25429,25436,25443,25450,25457],{"__ignoreMap":42},[129,25408,25409,25412],{"class":131,"line":132},[129,25410,25411],{"class":1977},"lerobot-train",[129,25413,24679],{"class":188},[129,25415,25416,25418,25420],{"class":131,"line":51},[129,25417,25269],{"class":188},[129,25419,25272],{"class":244},[129,25421,24679],{"class":188},[129,25423,25424,25427],{"class":131,"line":1194},[129,25425,25426],{"class":188},"  --policy.type=act",[129,25428,24679],{"class":188},[129,25430,25431,25434],{"class":131,"line":1209},[129,25432,25433],{"class":188},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[129,25435,24679],{"class":188},[129,25437,25438,25441],{"class":131,"line":1215},[129,25439,25440],{"class":188},"  --job_name=act_so101_test",[129,25442,24679],{"class":188},[129,25444,25445,25448],{"class":131,"line":1229},[129,25446,25447],{"class":188},"  --policy.device=cuda",[129,25449,24679],{"class":188},[129,25451,25452,25455],{"class":131,"line":1235},[129,25453,25454],{"class":188},"  --wandb.enable=false",[129,25456,24679],{"class":188},[129,25458,25459,25462],{"class":131,"line":1326},[129,25460,25461],{"class":188},"  --policy.repo_id=",[129,25463,25464],{"class":244},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25466,25467],{},"参数说明：",[1146,25469,25470,25476,25482,25488,25494,25503,25509],{},[86,25471,25472,25475],{},[126,25473,25474],{},"--dataset.repo_id","：训练数据集仓库。",[86,25477,25478,25481],{},[126,25479,25480],{},"--policy.type=act","：策略模型类型为 ACT。",[86,25483,25484,25487],{},[126,25485,25486],{},"--output_dir","：本地训练输出目录。",[86,25489,25490,25493],{},[126,25491,25492],{},"--job_name","：训练任务名称。",[86,25495,25496,25499,25500,24563],{},[126,25497,25498],{},"--policy.device","：训练设备（如 ",[126,25501,25502],{},"cuda",[86,25504,25505,25508],{},[126,25506,25507],{},"--wandb.enable","：是否启用 WandB 可视化。",[86,25510,25511,25514],{},[126,25512,25513],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25516,25517],{},[40,25518],{"alt":42,"src":25519},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5141,25521,25382],{},{"title":42,"searchDepth":51,"depth":51,"links":25523},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25395,"description":53},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25530,"title":25531,"body":25532,"description":53,"extension":54,"meta":25619,"navigation":56,"path":25620,"seo":25621,"stem":25622,"__hash__":25623},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25533,"toc":25617},[25534,25537,25540,25607,25615],[10,25535,25531],{"id":25536},"_8-策略部署与自动采集",[14,25538,25539],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[120,25541,25543],{"className":23837,"code":25542,"language":23839,"meta":42,"style":42},"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",[126,25544,25545,25551,25557,25563,25571,25577,25584,25592,25600],{"__ignoreMap":42},[129,25546,25547,25549],{"class":131,"line":132},[129,25548,25210],{"class":1977},[129,25550,24679],{"class":188},[129,25552,25553,25555],{"class":131,"line":51},[129,25554,24711],{"class":188},[129,25556,24679],{"class":188},[129,25558,25559,25561],{"class":131,"line":1194},[129,25560,24789],{"class":188},[129,25562,24679],{"class":188},[129,25564,25565,25567,25569],{"class":131,"line":1209},[129,25566,24918],{"class":188},[129,25568,25237],{"class":244},[129,25570,24679],{"class":188},[129,25572,25573,25575],{"class":131,"line":1215},[129,25574,24849],{"class":188},[129,25576,24679],{"class":188},[129,25578,25579,25582],{"class":131,"line":1229},[129,25580,25581],{"class":188},"  --display_data=false",[129,25583,24679],{"class":188},[129,25585,25586,25588,25590],{"class":131,"line":1235},[129,25587,25269],{"class":188},[129,25589,25272],{"class":244},[129,25591,24679],{"class":188},[129,25593,25594,25596,25598],{"class":131,"line":1326},[129,25595,25286],{"class":188},[129,25597,25289],{"class":244},[129,25599,24679],{"class":188},[129,25601,25602,25605],{"class":131,"line":1332},[129,25603,25604],{"class":188},"  --policy.path=",[129,25606,25464],{"class":244},[1146,25608,25609],{},[86,25610,25611,25614],{},[126,25612,25613],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5141,25616,25382],{},{"title":42,"searchDepth":51,"depth":51,"links":25618},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25531,"description":53},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25625,"title":25626,"body":25627,"description":53,"extension":54,"meta":25656,"navigation":56,"path":25657,"seo":25658,"stem":25659,"__hash__":25660},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25628,"toc":25654},[25629,25633,25636,25642,25645,25651],[10,25630,25632],{"id":25631},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25634,25635],{},"项目地址：",[14,25637,25638],{},[20,25639,25640],{"href":25640,"rel":25641},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24],[14,25643,25644],{},"参考教程：",[14,25646,25647],{},[20,25648,25649],{"href":25649,"rel":25650},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24],[14,25652,25653],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":42,"searchDepth":51,"depth":51,"links":25655},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25626,"description":53},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25662,"title":25663,"body":25664,"description":25668,"extension":54,"meta":25669,"navigation":56,"path":25670,"seo":25671,"stem":25672,"__hash__":25673},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25665,"toc":25666},[],{"title":42,"searchDepth":51,"depth":51,"links":25667},[],"act复现",{"category":23393},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25663,"description":25668},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25675,"title":25676,"body":25677,"description":42,"extension":54,"meta":25979,"navigation":56,"path":25980,"seo":25981,"stem":25982,"__hash__":25983},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25678,"toc":25971},[25679,25682,25686,25696,25703,25710,25713,25720,25723,25726,25730,25742,25746,25792,25795,25798,25801,25804,25807,25811,25849,25855,25859,25913,25918,25921,25924,25929,25932,25937,25940,25943,25947,25950,25953,25957],[10,25680,25676],{"id":25681},"_1简介",[100,25683,25685],{"id":25684},"_11什么是-docker","1.1什么是 Docker？",[14,25687,25688,25689,25692,25693],{},"Docker 是一个开源的 ",[289,25690,25691],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[289,25694,25695],{},"一次构建，到处运行。",[14,25697,25698,25699,25702],{},"“ ",[289,25700,25701],{},"一次构建，到处运行"," ”也就是说：",[83,25704,25705],{},[86,25706,25707],{},[289,25708,25709],{},"之前：",[14,25711,25712],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[83,25714,25715],{},[86,25716,25717],{},[289,25718,25719],{},"使用docker后：",[14,25721,25722],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25724,25725],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[100,25727,25729],{"id":25728},"_12它是怎么工作的","1.2.它是怎么工作的？",[1146,25731,25732,25735],{},[86,25733,25734],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[86,25736,25737,25738,25741],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[289,25739,25740],{},"无论在哪运行都一样稳定"," 。",[100,25743,25745],{"id":25744},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[277,25747,25748,25758],{},[280,25749,25750],{},[283,25751,25752,25755],{},[286,25753,25754],{"align":23751},"概念",[286,25756,25757],{"align":23751},"解释",[324,25759,25760,25768,25776,25784],{},[283,25761,25762,25765],{},[329,25763,25764],{"align":23751},"镜像",[329,25766,25767],{"align":23751},"Image，运行容器的模板，像是一个应用快照",[283,25769,25770,25773],{},[329,25771,25772],{"align":23751},"容器",[329,25774,25775],{"align":23751},"Container，运行中的镜像实例，有自己的文件系统、网络等",[283,25777,25778,25781],{},[329,25779,25780],{"align":23751},"Dockerfile",[329,25782,25783],{"align":23751},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[283,25785,25786,25789],{},[329,25787,25788],{"align":23751},"仓库",[329,25790,25791],{"align":23751},"Registry，存放镜像的地方，比如 Docker Hub",[14,25793,25794],{},"抽象化理解:",[14,25796,25797],{},"Docker镜像≈C++类",[14,25799,25800],{},"Docker容器≈C++类实例(即对象)",[14,25802,25803],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25805,25806],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[100,25808,25810],{"id":25809},"_14类比理解","1.4.类比理解",[277,25812,25813,25823],{},[280,25814,25815],{},[283,25816,25817,25820],{},[286,25818,25819],{"align":23751},"传统部署",[286,25821,25822],{"align":23751},"Docker部署",[324,25824,25825,25833,25841],{},[283,25826,25827,25830],{},[329,25828,25829],{"align":23751},"手动安装依赖、调试版本不一致问题",[329,25831,25832],{"align":23751},"一次打包环境和代码",[283,25834,25835,25838],{},[329,25836,25837],{"align":23751},"程序“裸奔”跑在系统上",[329,25839,25840],{"align":23751},"程序“穿着容器”隔离运行",[283,25842,25843,25846],{},[329,25844,25845],{"align":23751},"容易“在我电脑上能跑”",[329,25847,25848],{"align":23751},"保证“无论在哪都能跑”",[14,25850,25851,25852],{},"就像快递包裹： ",[289,25853,25854],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[100,25856,25858],{"id":25857},"_15docker-的核心优势","1.5.Docker 的核心优势",[277,25860,25861,25871],{},[280,25862,25863],{},[283,25864,25865,25868],{},[286,25866,25867],{"align":23751},"优势",[286,25869,25870],{"align":23751},"说明",[324,25872,25873,25881,25889,25897,25905],{},[283,25874,25875,25878],{},[329,25876,25877],{"align":23751},"轻量级",[329,25879,25880],{"align":23751},"基于系统内核共享，启动速度快，占资源少",[283,25882,25883,25886],{},[329,25884,25885],{"align":23751},"跨平台",[329,25887,25888],{"align":23751},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[283,25890,25891,25894],{},[329,25892,25893],{"align":23751},"易于迁移部署",[329,25895,25896],{"align":23751},"应用和环境一起封装，不怕依赖不一致",[283,25898,25899,25902],{},[329,25900,25901],{"align":23751},"易于版本控制",[329,25903,25904],{"align":23751},"镜像版本可控，支持回滚",[283,25906,25907,25910],{},[329,25908,25909],{"align":23751},"生态丰富",[329,25911,25912],{"align":23751},"Docker Hub 上有成千上万的现成镜像可用",[83,25914,25915],{},[86,25916,25917],{},"在Linux上可以几乎实现无性能损失。",[14,25919,25920],{},"docker里的发行版和本机共用Linux内核。",[14,25922,25923],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[83,25925,25926],{},[86,25927,25928],{},"可以快速部署在绝大多数Linux发行版",[14,25930,25931],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[83,25933,25934],{},[86,25935,25936],{},"配置环境简单",[14,25938,25939],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,25941,25942],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[83,25944,25945],{},[86,25946,25909],{},[14,25948,25949],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,25951,25952],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[100,25954,25956],{"id":25955},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1146,25958,25959,25962,25965,25968],{},[86,25960,25961],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[86,25963,25964],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[86,25966,25967],{},"微服务架构：每个服务一个容器，灵活组合",[86,25969,25970],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":42,"searchDepth":51,"depth":51,"links":25972},[25973,25974,25975,25976,25977,25978],{"id":25684,"depth":1194,"text":25685},{"id":25728,"depth":1194,"text":25729},{"id":25744,"depth":1194,"text":25745},{"id":25809,"depth":1194,"text":25810},{"id":25857,"depth":1194,"text":25858},{"id":25955,"depth":1194,"text":25956},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25676,"description":42},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25985,"title":25986,"body":25987,"description":42,"extension":54,"meta":26720,"navigation":56,"path":26721,"seo":26722,"stem":26723,"__hash__":26724},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25988,"toc":26715},[25989,25992,25996,25999,26002,26008,26014,26018,26027,26030,26087,26090,26141,26144,26227,26230,26267,26271,26282,26295,26302,26305,26385,26388,26438,26441,26464,26468,26475,26478,26494,26500,26503,26519,26525,26528,26544,26558,26564,26584,26590,26593,26605,26611,26614,26628,26634,26637,26657,26662,26665,26668,26672,26675,26678,26681,26688,26691,26694,26697,26702,26707,26712],[10,25990,25986],{"id":25991},"_2安装docker",[100,25993,25995],{"id":25994},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,25997,25998],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26000,26001],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26003,26004],{},[20,26005,26006],{"href":26006,"rel":26007},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24],[14,26009,26010],{},[20,26011,26012],{"href":26012,"rel":26013},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24],[22013,26015,26017],{"id":26016},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26019,26020,26021,26026],{},"以下内容根据 ",[20,26022,26025],{"href":26023,"rel":26024},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24],"官方文档"," 修改而来。",[14,26028,26029],{},"如果你过去安装过 docker，先删掉：",[120,26031,26033],{"className":23837,"code":26032,"language":23839,"meta":42,"style":42},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[126,26034,26035],{"__ignoreMap":42},[129,26036,26037,26039,26042,26045,26048,26051,26054,26057,26060,26063,26066,26069,26072,26075,26078,26081,26084],{"class":131,"line":132},[129,26038,3039],{"class":135},[129,26040,26041],{"class":139}," pkg ",[129,26043,26044],{"class":135},"in",[129,26046,26047],{"class":244}," docker.io",[129,26049,26050],{"class":244}," docker-doc",[129,26052,26053],{"class":244}," docker-compose",[129,26055,26056],{"class":244}," docker-compose-v2",[129,26058,26059],{"class":244}," podman-docker",[129,26061,26062],{"class":244}," containerd",[129,26064,26065],{"class":244}," runc",[129,26067,26068],{"class":139},"; ",[129,26070,26071],{"class":135},"do",[129,26073,26074],{"class":1977}," sudo",[129,26076,26077],{"class":244}," apt-get",[129,26079,26080],{"class":244}," remove",[129,26082,26083],{"class":139}," $pkg; ",[129,26085,26086],{"class":135},"done\n",[14,26088,26089],{},"首先安装依赖和GPG：",[120,26091,26095],{"className":26092,"code":26093,"language":26094,"meta":42,"style":42},"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",[126,26096,26097,26102,26107,26112,26117,26122,26127,26131,26136],{"__ignoreMap":42},[129,26098,26099],{"class":131,"line":132},[129,26100,26101],{},"# Add Docker's official GPG key:\n",[129,26103,26104],{"class":131,"line":51},[129,26105,26106],{},"sudo apt-get update\n",[129,26108,26109],{"class":131,"line":1194},[129,26110,26111],{},"sudo apt-get install ca-certificates curl\n",[129,26113,26114],{"class":131,"line":1209},[129,26115,26116],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[129,26118,26119],{"class":131,"line":1215},[129,26120,26121],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[129,26123,26124],{"class":131,"line":1229},[129,26125,26126],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[129,26128,26129],{"class":131,"line":1235},[129,26130,2414],{"emptyLinePlaceholder":56},[129,26132,26133],{"class":131,"line":1326},[129,26134,26135],{},"# 如果上面这行报错就弄下面这行\n",[129,26137,26138],{"class":131,"line":1332},[129,26139,26140],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26142,26143],{},"信任 Docker 的 GPG 公钥并添加仓库：",[120,26145,26147],{"className":23837,"code":26146,"language":23839,"meta":42,"style":42},"# 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",[126,26148,26149,26154,26160,26177,26210],{"__ignoreMap":42},[129,26150,26151],{"class":131,"line":132},[129,26152,26153],{"class":198},"# Add the repository to Apt sources:\n",[129,26155,26156,26158],{"class":131,"line":51},[129,26157,25126],{"class":188},[129,26159,24679],{"class":188},[129,26161,26162,26165,26168,26171,26174],{"class":131,"line":1194},[129,26163,26164],{"class":244},"  \"deb [arch=$(",[129,26166,26167],{"class":1977},"dpkg",[129,26169,26170],{"class":188}," --print-architecture",[129,26172,26173],{"class":244},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[129,26175,26176],{"class":188},"\\\n",[129,26178,26179,26182,26184,26186,26189,26192,26194,26196,26199,26201,26203,26206,26208],{"class":131,"line":1209},[129,26180,26181],{"class":244},"  \"",[129,26183,25100],{"class":139},[129,26185,697],{"class":188},[129,26187,26188],{"class":244}," \u002Fetc\u002Fos-release",[129,26190,26191],{"class":139}," && ",[129,26193,25126],{"class":188},[129,26195,9739],{"class":244},[129,26197,26198],{"class":139},"$VERSION_CODENAME",[129,26200,390],{"class":244},[129,26202,568],{"class":139},[129,26204,26205],{"class":244},"\" stable\"",[129,26207,25110],{"class":135},[129,26209,24679],{"class":188},[129,26211,26212,26215,26218,26221,26224],{"class":131,"line":1215},[129,26213,26214],{"class":1977},"  sudo",[129,26216,26217],{"class":244}," tee",[129,26219,26220],{"class":244}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[129,26222,26223],{"class":135}," >",[129,26225,26226],{"class":244}," \u002Fdev\u002Fnull\n",[14,26228,26229],{},"最后安装",[120,26231,26233],{"className":23837,"code":26232,"language":23839,"meta":42,"style":42},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[126,26234,26235,26244],{"__ignoreMap":42},[129,26236,26237,26239,26241],{"class":131,"line":132},[129,26238,24577],{"class":1977},[129,26240,26077],{"class":244},[129,26242,26243],{"class":244}," update\n",[129,26245,26246,26248,26250,26252,26255,26258,26261,26264],{"class":131,"line":51},[129,26247,24577],{"class":1977},[129,26249,26077],{"class":244},[129,26251,23849],{"class":244},[129,26253,26254],{"class":244}," docker-ce",[129,26256,26257],{"class":244}," docker-ce-cli",[129,26259,26260],{"class":244}," containerd.io",[129,26262,26263],{"class":244}," docker-buildx-plugin",[129,26265,26266],{"class":244}," docker-compose-plugin\n",[22013,26268,26270],{"id":26269},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26272,26273,26274,26277,26278,26281],{},"查看自己自己包管理工具版本（dnf是 ",[289,26275,26276],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[289,26279,26280],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[120,26283,26285],{"className":23837,"code":26284,"language":23839,"meta":42,"style":42},"dnf --version\n",[126,26286,26287],{"__ignoreMap":42},[129,26288,26289,26292],{"class":131,"line":132},[129,26290,26291],{"class":1977},"dnf",[129,26293,26294],{"class":188}," --version\n",[14,26296,26020,26297,26301],{},[20,26298,26025],{"href":26299,"rel":26300},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26303,26304],{},"如果你之前安装过 docker，请先删掉",[120,26306,26308],{"className":23837,"code":26307,"language":23839,"meta":42,"style":42},"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",[126,26309,26310,26324,26331,26338,26345,26352,26359,26366,26373,26380],{"__ignoreMap":42},[129,26311,26312,26314,26317,26319,26322],{"class":131,"line":132},[129,26313,24577],{"class":1977},[129,26315,26316],{"class":244}," dnf",[129,26318,26080],{"class":244},[129,26320,26321],{"class":244}," docker",[129,26323,24679],{"class":188},[129,26325,26326,26329],{"class":131,"line":51},[129,26327,26328],{"class":244},"                  docker-client",[129,26330,24679],{"class":188},[129,26332,26333,26336],{"class":131,"line":1194},[129,26334,26335],{"class":244},"                  docker-client-latest",[129,26337,24679],{"class":188},[129,26339,26340,26343],{"class":131,"line":1209},[129,26341,26342],{"class":244},"                  docker-common",[129,26344,24679],{"class":188},[129,26346,26347,26350],{"class":131,"line":1215},[129,26348,26349],{"class":244},"                  docker-latest",[129,26351,24679],{"class":188},[129,26353,26354,26357],{"class":131,"line":1229},[129,26355,26356],{"class":244},"                  docker-latest-logrotate",[129,26358,24679],{"class":188},[129,26360,26361,26364],{"class":131,"line":1235},[129,26362,26363],{"class":244},"                  docker-logrotate",[129,26365,24679],{"class":188},[129,26367,26368,26371],{"class":131,"line":1326},[129,26369,26370],{"class":244},"                  docker-selinux",[129,26372,24679],{"class":188},[129,26374,26375,26378],{"class":131,"line":1332},[129,26376,26377],{"class":244},"                  docker-engine-selinux",[129,26379,24679],{"class":188},[129,26381,26382],{"class":131,"line":1344},[129,26383,26384],{"class":244},"                  docker-engine\n",[14,26386,26387],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[120,26389,26391],{"className":23837,"code":26390,"language":23839,"meta":42,"style":42},"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",[126,26392,26393,26407,26422],{"__ignoreMap":42},[129,26394,26395,26397,26399,26402,26404],{"class":131,"line":132},[129,26396,24577],{"class":1977},[129,26398,26316],{"class":244},[129,26400,26401],{"class":188}," -y",[129,26403,23849],{"class":244},[129,26405,26406],{"class":244}," dnf-plugins-core\n",[129,26408,26409,26411,26413,26416,26419],{"class":131,"line":51},[129,26410,24577],{"class":1977},[129,26412,26316],{"class":244},[129,26414,26415],{"class":244}," config-manager",[129,26417,26418],{"class":244}," addrepo",[129,26420,26421],{"class":188}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[129,26423,26424,26426,26429,26432,26435],{"class":131,"line":1194},[129,26425,24577],{"class":1977},[129,26427,26428],{"class":244}," sed",[129,26430,26431],{"class":188}," -i",[129,26433,26434],{"class":244}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[129,26436,26437],{"class":244}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26439,26440],{},"最后安装：",[120,26442,26444],{"className":23837,"code":26443,"language":23839,"meta":42,"style":42},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[126,26445,26446],{"__ignoreMap":42},[129,26447,26448,26450,26452,26454,26456,26458,26460,26462],{"class":131,"line":132},[129,26449,24577],{"class":1977},[129,26451,26316],{"class":244},[129,26453,23849],{"class":244},[129,26455,26254],{"class":244},[129,26457,26257],{"class":244},[129,26459,26260],{"class":244},[129,26461,26263],{"class":244},[129,26463,26266],{"class":244},[100,26465,26467],{"id":26466},"_22配置环境","2.2.配置环境",[22013,26469,26471,26474],{"id":26470},"_221检查-docker-服务状态",[289,26472,26473],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26476,26477],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[120,26479,26481],{"className":23837,"code":26480,"language":23839,"meta":42,"style":42},"systemctl status docker\n",[126,26482,26483],{"__ignoreMap":42},[129,26484,26485,26488,26491],{"class":131,"line":132},[129,26486,26487],{"class":1977},"systemctl",[129,26489,26490],{"class":244}," status",[129,26492,26493],{"class":244}," docker\n",[22013,26495,26497,26474],{"id":26496},"_222启动-docker-服务",[289,26498,26499],{},"2.2.2.启动 Docker 服务",[14,26501,26502],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[120,26504,26506],{"className":23837,"code":26505,"language":23839,"meta":42,"style":42},"sudo systemctl start docker\n",[126,26507,26508],{"__ignoreMap":42},[129,26509,26510,26512,26515,26517],{"class":131,"line":132},[129,26511,24577],{"class":1977},[129,26513,26514],{"class":244}," systemctl",[129,26516,4198],{"class":244},[129,26518,26493],{"class":244},[22013,26520,26522,26474],{"id":26521},"_223设置-docker-开机自启",[289,26523,26524],{},"2.2.3.设置 Docker 开机自启",[14,26526,26527],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[120,26529,26531],{"className":23837,"code":26530,"language":23839,"meta":42,"style":42},"sudo systemctl enable docker\n",[126,26532,26533],{"__ignoreMap":42},[129,26534,26535,26537,26539,26542],{"class":131,"line":132},[129,26536,24577],{"class":1977},[129,26538,26514],{"class":244},[129,26540,26541],{"class":244}," enable",[129,26543,26493],{"class":244},[22013,26545,26547,13810,26550,13810,26555,26474],{"id":26546},"_224将用户添加到-docker-组",[289,26548,26549],{},"2.2.4.将用户添加到",[289,26551,26552],{},[126,26553,26554],{},"docker",[289,26556,26557],{},"组",[14,26559,26560,26561,26563],{},"使用以下命令将当前用户添加到 ",[126,26562,26554],{}," 组：",[120,26565,26567],{"className":23837,"code":26566,"language":23839,"meta":42,"style":42},"sudo usermod -aG docker $USER\n",[126,26568,26569],{"__ignoreMap":42},[129,26570,26571,26573,26576,26579,26581],{"class":131,"line":132},[129,26572,24577],{"class":1977},[129,26574,26575],{"class":244}," usermod",[129,26577,26578],{"class":188}," -aG",[129,26580,26321],{"class":244},[129,26582,26583],{"class":139}," $USER\n",[22013,26585,26587,26474],{"id":26586},"_225退出并重新登录",[289,26588,26589],{},"2.2.5.退出并重新登录",[14,26591,26592],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[120,26594,26596],{"className":23837,"code":26595,"language":23839,"meta":42,"style":42},"newgrp docker\n",[126,26597,26598],{"__ignoreMap":42},[129,26599,26600,26603],{"class":131,"line":132},[129,26601,26602],{"class":1977},"newgrp",[129,26604,26493],{"class":244},[22013,26606,26608,26474],{"id":26607},"_226重新启动-docker-服务如果需要",[289,26609,26610],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26612,26613],{},"确保 Docker 服务正在运行，可以使用以下命令：",[120,26615,26616],{"className":23837,"code":26505,"language":23839,"meta":42,"style":42},[126,26617,26618],{"__ignoreMap":42},[129,26619,26620,26622,26624,26626],{"class":131,"line":132},[129,26621,24577],{"class":1977},[129,26623,26514],{"class":244},[129,26625,4198],{"class":244},[129,26627,26493],{"class":244},[22013,26629,26631,26474],{"id":26630},"_227重启电脑后检查-docker-服务状态",[289,26632,26633],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26635,26636],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[120,26638,26640],{"className":23837,"code":26639,"language":23839,"meta":42,"style":42},"sudo reboot\nsystemctl status docker\n",[126,26641,26642,26649],{"__ignoreMap":42},[129,26643,26644,26646],{"class":131,"line":132},[129,26645,24577],{"class":1977},[129,26647,26648],{"class":244}," reboot\n",[129,26650,26651,26653,26655],{"class":131,"line":51},[129,26652,26487],{"class":1977},[129,26654,26490],{"class":244},[129,26656,26493],{"class":244},[14,26658,26659],{},[40,26660],{"alt":42,"src":26661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26663,26664],{},"第三行显示enabled说明开机自启动成功",[14,26666,26667],{},"按q退出",[100,26669,26671],{"id":26670},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26673,26674],{},"优先使用linux来使用docker是比较好的",[14,26676,26677],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26679,26680],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26682,26683,26684],{},"官方下载安装:",[20,26685,26686],{"href":26686,"rel":26687},"https:\u002F\u002Fwww.docker.com\u002F",[24],[14,26689,26690],{},"Windows的Docker显卡直通与USB直通:",[14,26692,26693],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26695,26696],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26698,26699],{},[40,26700],{"alt":42,"src":26701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26703,26704],{},[40,26705],{"alt":42,"src":26706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26708,26709],{},[40,26710],{"alt":42,"src":26711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5141,26713,26714],{},"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":42,"searchDepth":51,"depth":51,"links":26716},[26717,26718,26719],{"id":25994,"depth":1194,"text":25995},{"id":26466,"depth":1194,"text":26467},{"id":26670,"depth":1194,"text":26671},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25986,"description":42},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26726,"title":26727,"body":26728,"description":26735,"extension":54,"meta":27428,"navigation":56,"path":27429,"seo":27430,"stem":27431,"__hash__":27432},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26729,"toc":27422},[26730,26733,26736,26740,26745,26750,26753,26781,26786,26795,26798,26803,26807,26814,26819,26825,26829,26832,26836,26841,26933,26938,26956,26961,26982,26987,27003,27007,27012,27041,27046,27092,27097,27141,27149,27166,27171,27187,27192,27206,27209,27212,27215,27218,27247,27250,27255,27259,27262,27265,27271,27274,27277,27280,27342,27349,27354,27357,27375,27379,27382,27399,27402,27405,27419],[10,26731,26727],{"id":26732},"_3docker直通",[14,26734,26735],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[100,26737,26739],{"id":26738},"_31usb直通","3.1.USB直通",[14,26741,26742],{},[40,26743],{"alt":42,"src":26744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[83,26746,26747],{},[86,26748,26749],{},"方法一(不是很推荐新手)：",[14,26751,26752],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[120,26754,26756],{"className":23837,"code":26755,"language":23839,"meta":42,"style":42},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[126,26757,26758,26766,26771],{"__ignoreMap":42},[129,26759,26760,26763],{"class":131,"line":132},[129,26761,26762],{"class":1977},"ls",[129,26764,26765],{"class":244}," \u002Fdev\n",[129,26767,26768],{"class":131,"line":51},[129,26769,26770],{"class":198},"#例如\n",[129,26772,26773,26776,26778],{"class":131,"line":1194},[129,26774,26775],{"class":139},"--device",[129,26777,185],{"class":135},[129,26779,26780],{"class":244},"\u002Fdev\u002Ftty_USB0\n",[83,26782,26783],{"start":51},[86,26784,26785],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[120,26787,26789],{"className":23837,"code":26788,"language":23839,"meta":42,"style":42},"--privileged\n",[126,26790,26791],{"__ignoreMap":42},[129,26792,26793],{"class":131,"line":132},[129,26794,26788],{"class":1977},[14,26796,26797],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26799,26800],{},[40,26801],{"alt":42,"src":26802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[100,26804,26806],{"id":26805},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26808,26809,26810,26813],{},"NVIDIA Container Toolkit使用户 ",[289,26811,26812],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26815,26816],{},[40,26817],{"alt":42,"src":26818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26820,26821],{},[20,26822,26823],{"href":26823,"rel":26824},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24],[22013,26826,26828],{"id":26827},"_321安装","3.2.1.安装",[14,26830,26831],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22925,26833,26835],{"id":26834},"_3211ubuntu","3.2.1.1.Ubuntu",[83,26837,26838],{},[86,26839,26840],{},"配置存储库 并更新",[120,26842,26844],{"className":23837,"code":26843,"language":23839,"meta":42,"style":42},"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",[126,26845,26846,26875,26895,26907,26919,26925],{"__ignoreMap":42},[129,26847,26848,26851,26854,26857,26859,26861,26864,26867,26870,26873],{"class":131,"line":132},[129,26849,26850],{"class":1977},"curl",[129,26852,26853],{"class":188}," -fsSL",[129,26855,26856],{"class":244}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[129,26858,25110],{"class":135},[129,26860,26074],{"class":1977},[129,26862,26863],{"class":244}," gpg",[129,26865,26866],{"class":188}," --dearmor",[129,26868,26869],{"class":188}," -o",[129,26871,26872],{"class":244}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[129,26874,24679],{"class":188},[129,26876,26877,26880,26882,26885,26888,26891,26893],{"class":131,"line":51},[129,26878,26879],{"class":139},"  && ",[129,26881,26850],{"class":1977},[129,26883,26884],{"class":188}," -s",[129,26886,26887],{"class":188}," -L",[129,26889,26890],{"class":244}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[129,26892,25110],{"class":135},[129,26894,24679],{"class":188},[129,26896,26897,26900,26903,26905],{"class":131,"line":1194},[129,26898,26899],{"class":1977},"    sed",[129,26901,26902],{"class":244}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[129,26904,25110],{"class":135},[129,26906,24679],{"class":188},[129,26908,26909,26912,26914,26917],{"class":131,"line":1209},[129,26910,26911],{"class":1977},"    sudo",[129,26913,26217],{"class":244},[129,26915,26916],{"class":244}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[129,26918,24679],{"class":188},[129,26920,26921,26923],{"class":131,"line":1215},[129,26922,26879],{"class":139},[129,26924,26176],{"class":188},[129,26926,26927,26929,26931],{"class":131,"line":1229},[129,26928,26911],{"class":1977},[129,26930,26077],{"class":244},[129,26932,26243],{"class":244},[83,26934,26935],{"start":51},[86,26936,26937],{},"安装nvidia-docker2",[120,26939,26941],{"className":23837,"code":26940,"language":23839,"meta":42,"style":42},"sudo apt-get install -y nvidia-docker2\n",[126,26942,26943],{"__ignoreMap":42},[129,26944,26945,26947,26949,26951,26953],{"class":131,"line":132},[129,26946,24577],{"class":1977},[129,26948,26077],{"class":244},[129,26950,23849],{"class":244},[129,26952,26401],{"class":188},[129,26954,26955],{"class":244}," nvidia-docker2\n",[83,26957,26958],{"start":1194},[86,26959,26960],{},"使用nvidia-ctk命令配置container runtime",[120,26962,26964],{"className":23837,"code":26963,"language":23839,"meta":42,"style":42},"sudo nvidia-ctk runtime configure --runtime=docker\n",[126,26965,26966],{"__ignoreMap":42},[129,26967,26968,26970,26973,26976,26979],{"class":131,"line":132},[129,26969,24577],{"class":1977},[129,26971,26972],{"class":244}," nvidia-ctk",[129,26974,26975],{"class":244}," runtime",[129,26977,26978],{"class":244}," configure",[129,26980,26981],{"class":188}," --runtime=docker\n",[83,26983,26984],{"start":1209},[86,26985,26986],{},"重启docker服务:",[120,26988,26990],{"className":23837,"code":26989,"language":23839,"meta":42,"style":42},"sudo systemctl restart docker\n",[126,26991,26992],{"__ignoreMap":42},[129,26993,26994,26996,26998,27001],{"class":131,"line":132},[129,26995,24577],{"class":1977},[129,26997,26514],{"class":244},[129,26999,27000],{"class":244}," restart",[129,27002,26493],{"class":244},[22925,27004,27006],{"id":27005},"_3212fedora","3.2.1.2.Fedora",[83,27008,27009],{},[86,27010,27011],{},"配置存储库",[120,27013,27015],{"className":23837,"code":27014,"language":23839,"meta":42,"style":42},"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",[126,27016,27017,27032],{"__ignoreMap":42},[129,27018,27019,27021,27023,27025,27028,27030],{"class":131,"line":132},[129,27020,26850],{"class":1977},[129,27022,26884],{"class":188},[129,27024,26887],{"class":188},[129,27026,27027],{"class":244}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[129,27029,25110],{"class":135},[129,27031,24679],{"class":188},[129,27033,27034,27036,27038],{"class":131,"line":51},[129,27035,24577],{"class":1977},[129,27037,26217],{"class":244},[129,27039,27040],{"class":244}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[83,27042,27043],{"start":51},[86,27044,27045],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[120,27047,27049],{"className":23837,"code":27048,"language":23839,"meta":42,"style":42},"# 如果是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",[126,27050,27051,27056,27070,27074,27079],{"__ignoreMap":42},[129,27052,27053],{"class":131,"line":132},[129,27054,27055],{"class":198},"# 如果是RHEL或者Rocky（DNF4）\n",[129,27057,27058,27060,27062,27064,27067],{"class":131,"line":51},[129,27059,24577],{"class":1977},[129,27061,26316],{"class":244},[129,27063,26415],{"class":244},[129,27065,27066],{"class":188}," --add-repo",[129,27068,27069],{"class":244}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[129,27071,27072],{"class":131,"line":1194},[129,27073,2414],{"emptyLinePlaceholder":56},[129,27075,27076],{"class":131,"line":1209},[129,27077,27078],{"class":198},"# 如果是Feodra41+（DNF5）\n",[129,27080,27081,27083,27085,27087,27089],{"class":131,"line":1215},[129,27082,24577],{"class":1977},[129,27084,26316],{"class":244},[129,27086,26415],{"class":244},[129,27088,26418],{"class":244},[129,27090,27091],{"class":188}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[83,27093,27094],{"start":1194},[86,27095,27096],{},"安装NVIDIA Container Toolki包",[120,27098,27100],{"className":23837,"code":27099,"language":23839,"meta":42,"style":42},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[126,27101,27102,27107,27120,27124,27129],{"__ignoreMap":42},[129,27103,27104],{"class":131,"line":132},[129,27105,27106],{"class":198},"# 如果是RHEL或者Rocky\n",[129,27108,27109,27111,27113,27115,27117],{"class":131,"line":51},[129,27110,24577],{"class":1977},[129,27112,26316],{"class":244},[129,27114,23849],{"class":244},[129,27116,26401],{"class":188},[129,27118,27119],{"class":244}," nvidia-container-toolkit\n",[129,27121,27122],{"class":131,"line":1194},[129,27123,2414],{"emptyLinePlaceholder":56},[129,27125,27126],{"class":131,"line":1209},[129,27127,27128],{"class":198},"# 如果是Fedora\n",[129,27130,27131,27133,27135,27137,27139],{"class":131,"line":1215},[129,27132,24577],{"class":1977},[129,27134,26316],{"class":244},[129,27136,23849],{"class":244},[129,27138,26401],{"class":188},[129,27140,27119],{"class":244},[83,27142,27143],{"start":1209},[86,27144,27145,27146,27148],{},"安装nvidia-docker2 ： 在Fedora上使用",[126,27147,26291],{},"进行安装",[120,27150,27152],{"className":23837,"code":27151,"language":23839,"meta":42,"style":42},"sudo dnf install -y nvidia-docker2\n",[126,27153,27154],{"__ignoreMap":42},[129,27155,27156,27158,27160,27162,27164],{"class":131,"line":132},[129,27157,24577],{"class":1977},[129,27159,26316],{"class":244},[129,27161,23849],{"class":244},[129,27163,26401],{"class":188},[129,27165,26955],{"class":244},[83,27167,27168],{"start":1215},[86,27169,27170],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[120,27172,27173],{"className":23837,"code":26963,"language":23839,"meta":42,"style":42},[126,27174,27175],{"__ignoreMap":42},[129,27176,27177,27179,27181,27183,27185],{"class":131,"line":132},[129,27178,24577],{"class":1977},[129,27180,26972],{"class":244},[129,27182,26975],{"class":244},[129,27184,26978],{"class":244},[129,27186,26981],{"class":188},[83,27188,27189],{"start":1229},[86,27190,27191],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[120,27193,27194],{"className":23837,"code":26989,"language":23839,"meta":42,"style":42},[126,27195,27196],{"__ignoreMap":42},[129,27197,27198,27200,27202,27204],{"class":131,"line":132},[129,27199,24577],{"class":1977},[129,27201,26514],{"class":244},[129,27203,27000],{"class":244},[129,27205,26493],{"class":244},[14,27207,27208],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27210,27211],{},"方法：",[14,27213,27214],{},"1️⃣nvidia-smi",[14,27216,27217],{},"2️⃣运行nvidia cuda 容器进行测试",[120,27219,27221],{"className":23837,"code":27220,"language":23839,"meta":42,"style":42},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[126,27222,27223],{"__ignoreMap":42},[129,27224,27225,27227,27229,27232,27235,27238,27241,27244],{"class":131,"line":132},[129,27226,24577],{"class":1977},[129,27228,26321],{"class":244},[129,27230,27231],{"class":244}," run",[129,27233,27234],{"class":188}," --rm",[129,27236,27237],{"class":188}," --gpus",[129,27239,27240],{"class":244}," all",[129,27242,27243],{"class":244}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[129,27245,27246],{"class":244}," nvidia-smi\n",[14,27248,27249],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27251,27252],{},[40,27253],{"alt":42,"src":27254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[100,27256,27258],{"id":27257},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27260,27261],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27263,27264],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27266,27267],{},[20,27268,27269],{"href":27269,"rel":27270},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24],[14,27272,27273],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27275,27276],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27278,27279],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[277,27281,27282,27298],{},[280,27283,27284],{},[283,27285,27286,27289,27292,27295],{},[286,27287,27288],{"align":23751},"镜像类型",[286,27290,27291],{"align":23751},"适用场景",[286,27293,27294],{"align":23751},"示例标签",[286,27296,27297],{"align":23751},"大小",[324,27299,27300,27314,27328],{},[283,27301,27302,27305,27308,27311],{},[329,27303,27304],{"align":23751},"base",[329,27306,27307],{"align":23751},"仅需 CUDA 运行时库",[329,27309,27310],{"align":23751},"12.4.0-base-ubuntu22.04",[329,27312,27313],{"align":23751},"~240MB",[283,27315,27316,27319,27322,27325],{},[329,27317,27318],{"align":23751},"runtime",[329,27320,27321],{"align":23751},"部署编译后的应用（含数学库）",[329,27323,27324],{"align":23751},"12.4.0-runtime-ubuntu22.04",[329,27326,27327],{"align":23751},"~2GB",[283,27329,27330,27333,27336,27339],{},[329,27331,27332],{"align":23751},"devel",[329,27334,27335],{"align":23751},"开发环境（含编译工具）",[329,27337,27338],{"align":23751},"12.4.0-devel-ubuntu22.04",[329,27340,27341],{"align":23751},"~3GB",[14,27343,27344,27345,27348],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[126,27346,27347],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27350,27351],{},[40,27352],{"alt":42,"src":27353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27355,27356],{},"在dockerfile里就可以开头这么写：",[120,27358,27360],{"className":23837,"code":27359,"language":23839,"meta":42,"style":42},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[126,27361,27362,27367],{"__ignoreMap":42},[129,27363,27364],{"class":131,"line":132},[129,27365,27366],{"class":198},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[129,27368,27369,27372],{"class":131,"line":51},[129,27370,27371],{"class":1977},"FROM",[129,27373,27374],{"class":244}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[100,27376,27378],{"id":27377},"_34配置以太网","3.4.配置以太网",[14,27380,27381],{},"指定网络模式",[120,27383,27385],{"className":23837,"code":27384,"language":23839,"meta":42,"style":42},"--net=host \\\n",[126,27386,27387],{"__ignoreMap":42},[129,27388,27389,27392,27394,27397],{"class":131,"line":132},[129,27390,27391],{"class":139},"--net",[129,27393,185],{"class":135},[129,27395,27396],{"class":244},"host",[129,27398,24679],{"class":1977},[14,27400,27401],{},"启动参数里加上这行即可。具体在下方",[14,27403,27404],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1146,27406,27407,27410,27413,27416],{},[86,27408,27409],{},"--net=bridge:默认选项，表示连接到默认的网桥",[86,27411,27412],{},"--net=host:容器使用宿主机的网络",[86,27414,27415],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[86,27417,27418],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5141,27420,27421],{},"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":42,"searchDepth":51,"depth":51,"links":27423},[27424,27425,27426,27427],{"id":26738,"depth":1194,"text":26739},{"id":26805,"depth":1194,"text":26806},{"id":27257,"depth":1194,"text":27258},{"id":27377,"depth":1194,"text":27378},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26727,"description":26735},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27434,"title":27435,"body":27436,"description":27443,"extension":54,"meta":27449,"navigation":56,"path":27450,"seo":27451,"stem":27452,"__hash__":27453},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27437,"toc":27447},[27438,27441,27444],[10,27439,27435],{"id":27440},"_4dockerhub换源",[14,27442,27443],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27445,27446],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":42,"searchDepth":51,"depth":51,"links":27448},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27435,"description":27443},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27455,"title":27456,"body":27457,"description":42,"extension":54,"meta":28469,"navigation":56,"path":28470,"seo":28471,"stem":28472,"__hash__":28473},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27458,"toc":28464},[27459,27462,27466,27472,27476,27479,27819,27822,27825,27828,27833,27838,27841,27844,27847,27850,27869,27872,27883,27889,28071,28081,28097,28360,28362,28387,28402,28411,28461],[10,27460,27456],{"id":27461},"_5docker命令学习",[100,27463,27465],{"id":27464},"_51参考文档","5.1.参考文档",[14,27467,27468],{},[20,27469,27470],{"href":27470,"rel":27471},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24],[100,27473,27475],{"id":27474},"_52常用命令","5.2.常用命令",[14,27477,27478],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[277,27480,27481,27494],{},[280,27482,27483],{},[283,27484,27485,27488,27491],{},[286,27486,27487],{"align":23751},"命令",[286,27489,27490],{"align":23751},"描述",[286,27492,27493],{"align":23751},"示例",[324,27495,27496,27507,27518,27529,27540,27551,27562,27573,27583,27594,27605,27616,27626,27637,27648,27659,27669,27679,27689,27699,27710,27721,27732,27743,27754,27765,27775,27786,27797,27808],{},[283,27497,27498,27501,27504],{},[329,27499,27500],{"align":23751},"docker run",[329,27502,27503],{"align":23751},"创建并启动一个新的容器。",[329,27505,27506],{"align":23751},"docker run -it ubuntu bash",[283,27508,27509,27512,27515],{},[329,27510,27511],{"align":23751},"docker build",[329,27513,27514],{"align":23751},"通过指定的 Dockerfile 创建一个新的镜像。",[329,27516,27517],{"align":23751},"docker build -t myimage .",[283,27519,27520,27523,27526],{},[329,27521,27522],{"align":23751},"docker pull",[329,27524,27525],{"align":23751},"从 Docker 仓库拉取镜像。",[329,27527,27528],{"align":23751},"docker pull ubuntu",[283,27530,27531,27534,27537],{},[329,27532,27533],{"align":23751},"docker push",[329,27535,27536],{"align":23751},"将本地镜像推送到 Docker 仓库。",[329,27538,27539],{"align":23751},"docker push myimage",[283,27541,27542,27545,27548],{},[329,27543,27544],{"align":23751},"docker stop",[329,27546,27547],{"align":23751},"停止一个正在运行的容器。",[329,27549,27550],{"align":23751},"docker stop container_id",[283,27552,27553,27556,27559],{},[329,27554,27555],{"align":23751},"docker start",[329,27557,27558],{"align":23751},"启动一个已经存在的容器。",[329,27560,27561],{"align":23751},"docker start container_id",[283,27563,27564,27567,27570],{},[329,27565,27566],{"align":23751},"docker restart",[329,27568,27569],{"align":23751},"重新启动容器。",[329,27571,27572],{"align":23751},"docker restart container_id",[283,27574,27575,27578,27581],{},[329,27576,27577],{"align":23751},"docker ps",[329,27579,27580],{"align":23751},"列出当前正在运行的容器。",[329,27582,27577],{"align":23751},[283,27584,27585,27588,27591],{},[329,27586,27587],{"align":23751},"docker rm",[329,27589,27590],{"align":23751},"删除一个或多个停止的容器。",[329,27592,27593],{"align":23751},"docker rm container_id",[283,27595,27596,27599,27602],{},[329,27597,27598],{"align":23751},"docker exec",[329,27600,27601],{"align":23751},"在一个正在运行的容器中执行命令。",[329,27603,27604],{"align":23751},"docker exec -it container_id bash",[283,27606,27607,27610,27613],{},[329,27608,27609],{"align":23751},"docker logs",[329,27611,27612],{"align":23751},"查看容器的日志输出。",[329,27614,27615],{"align":23751},"docker logs container_id",[283,27617,27618,27621,27624],{},[329,27619,27620],{"align":23751},"docker images",[329,27622,27623],{"align":23751},"列出本地所有镜像。",[329,27625,27620],{"align":23751},[283,27627,27628,27631,27634],{},[329,27629,27630],{"align":23751},"docker rmi",[329,27632,27633],{"align":23751},"删除一个或多个镜像。",[329,27635,27636],{"align":23751},"docker rmi myimage",[283,27638,27639,27642,27645],{},[329,27640,27641],{"align":23751},"docker network",[329,27643,27644],{"align":23751},"管理 Docker 网络。",[329,27646,27647],{"align":23751},"docker network ls",[283,27649,27650,27653,27656],{},[329,27651,27652],{"align":23751},"docker volume",[329,27654,27655],{"align":23751},"管理 Docker 数据卷。",[329,27657,27658],{"align":23751},"docker volume ls",[283,27660,27661,27664,27667],{},[329,27662,27663],{"align":23751},"docker-compose up",[329,27665,27666],{"align":23751},"启动 docker-compose.yml 中定义的所有服务。",[329,27668,27663],{"align":23751},[283,27670,27671,27674,27677],{},[329,27672,27673],{"align":23751},"docker-compose down",[329,27675,27676],{"align":23751},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[329,27678,27673],{"align":23751},[283,27680,27681,27684,27687],{},[329,27682,27683],{"align":23751},"docker info",[329,27685,27686],{"align":23751},"显示 Docker 系统的详细信息。",[329,27688,27683],{"align":23751},[283,27690,27691,27694,27697],{},[329,27692,27693],{"align":23751},"docker stats",[329,27695,27696],{"align":23751},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[329,27698,27693],{"align":23751},[283,27700,27701,27704,27707],{},[329,27702,27703],{"align":23751},"docker inspect",[329,27705,27706],{"align":23751},"查看容器或镜像的详细信息（JSON 格式）。",[329,27708,27709],{"align":23751},"docker inspect container_id",[283,27711,27712,27715,27718],{},[329,27713,27714],{"align":23751},"docker save",[329,27716,27717],{"align":23751},"将一个镜像保存为 tar 文件。",[329,27719,27720],{"align":23751},"docker save -o myimage.tar myimage",[283,27722,27723,27726,27729],{},[329,27724,27725],{"align":23751},"docker load",[329,27727,27728],{"align":23751},"从 tar 文件中加载镜像。",[329,27730,27731],{"align":23751},"docker load -i myimage.tar",[283,27733,27734,27737,27740],{},[329,27735,27736],{"align":23751},"docker tag",[329,27738,27739],{"align":23751},"为镜像添加标签（tag）。",[329,27741,27742],{"align":23751},"docker tag myimage myimage:v1",[283,27744,27745,27748,27751],{},[329,27746,27747],{"align":23751},"docker buildx build",[329,27749,27750],{"align":23751},"使用 Buildx 构建多架构镜像。",[329,27752,27753],{"align":23751},"docker buildx build -t myimage .",[283,27755,27756,27759,27762],{},[329,27757,27758],{"align":23751},"docker buildx create",[329,27760,27761],{"align":23751},"创建一个新的 Buildx 构建实例。",[329,27763,27764],{"align":23751},"docker buildx create –use",[283,27766,27767,27770,27773],{},[329,27768,27769],{"align":23751},"docker buildx ls",[329,27771,27772],{"align":23751},"列出所有可用的 Buildx 构建实例。",[329,27774,27769],{"align":23751},[283,27776,27777,27780,27783],{},[329,27778,27779],{"align":23751},"docker buildx use",[329,27781,27782],{"align":23751},"设置当前的 Buildx 构建实例。",[329,27784,27785],{"align":23751},"docker buildx use mybuilder",[283,27787,27788,27791,27794],{},[329,27789,27790],{"align":23751},"docker buildx bake",[329,27792,27793],{"align":23751},"使用 Bake 文件批量构建镜像。",[329,27795,27796],{"align":23751},"docker buildx bake -f bake.hcl",[283,27798,27799,27802,27805],{},[329,27800,27801],{"align":23751},"docker buildx build –push",[329,27803,27804],{"align":23751},"构建镜像并推送到镜像仓库。",[329,27806,27807],{"align":23751},"docker buildx build –push -t myimage .",[283,27809,27810,27813,27816],{},[329,27811,27812],{"align":23751},"docker buildx build –platform",[329,27814,27815],{"align":23751},"构建镜像并为多个平台生成支持。",[329,27817,27818],{"align":23751},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27820,27821],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27823,27824],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27826,27827],{},"docker images 可以查看已经下载的镜像",[14,27829,27830],{},[40,27831],{"alt":42,"src":27832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27834,27835],{},[289,27836,27837],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27839,27840],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27842,27843],{},"docker container logs 查看容器日志",[14,27845,27846],{},"docker top 查看容器里的进程",[14,27848,27849],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[120,27851,27853],{"className":23837,"code":27852,"language":23839,"meta":42,"style":42},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[126,27854,27855],{"__ignoreMap":42},[129,27856,27857,27860,27863,27866],{"class":131,"line":132},[129,27858,27859],{"class":1977},"如：docker",[129,27861,27862],{"class":244}," cp",[129,27864,27865],{"class":244}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[129,27867,27868],{"class":244}," \u002Fmydata\u002Fnginx\n",[14,27870,27871],{},"docker run时在启动容器的时候会有几个常用的选项：",[1146,27873,27874,27877,27880],{},[86,27875,27876],{},"-d选项：表示后台运行",[86,27878,27879],{},"-P选项：随机端口映射",[86,27881,27882],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[100,27884,27886],{"id":27885},"_53run命令的参数非常重要",[289,27887,27888],{},"5.3.run命令的参数（非常重要）",[277,27890,27891,27904],{},[280,27892,27893],{},[283,27894,27895,27898,27901],{},[286,27896,27897],{"align":23751},"参数\u002F配置",[286,27899,27900],{"align":23751},"功能说明",[286,27902,27903],{"align":23751},"重要性与参考依据",[324,27905,27906,27917,27928,27939,27950,27961,27972,27983,27994,28005,28016,28027,28038,28049,28060],{},[283,27907,27908,27911,27914],{},[329,27909,27910],{"align":23751},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[329,27912,27913],{"align":23751},"指定容器名称，便于后续管理",[329,27915,27916],{"align":23751},"替代随机生成的容器名。",[283,27918,27919,27922,27925],{},[329,27920,27921],{"align":23751},"–gpus all",[329,27923,27924],{"align":23751},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[329,27926,27927],{"align":23751},"用于CUDA加速等GPU依赖任务。",[283,27929,27930,27933,27936],{},[329,27931,27932],{"align":23751},"-e NVIDIA_DRIVER_CAPABILITIES=all",[329,27934,27935],{"align":23751},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[329,27937,27938],{"align":23751},"确保容器内GPU功能完整67。",[283,27940,27941,27944,27947],{},[329,27942,27943],{"align":23751},"-dit",[329,27945,27946],{"align":23751},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[329,27948,27949],{"align":23751},"允许容器在后台运行并支持交互操作。",[283,27951,27952,27955,27958],{},[329,27953,27954],{"align":23751},"–privileged",[329,27956,27957],{"align":23751},"赋予容器完全主机权限（可访问设备、内核模块等）",[329,27959,27960],{"align":23751},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[283,27962,27963,27966,27969],{},[329,27964,27965],{"align":23751},"–net=host",[329,27967,27968],{"align":23751},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[329,27970,27971],{"align":23751},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[283,27973,27974,27977,27980],{},[329,27975,27976],{"align":23751},"–group-add audio–group-add video–group-add dialout",[329,27978,27979],{"align":23751},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[329,27981,27982],{"align":23751},"避免权限问题（如避免无法调用摄像头、麦克风）。",[283,27984,27985,27988,27991],{},[329,27986,27987],{"align":23751},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[329,27989,27990],{"align":23751},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[329,27992,27993],{"align":23751},"支持容器内运行图形界面应用（如OpenCV可视化）。",[283,27995,27996,27999,28002],{},[329,27997,27998],{"align":23751},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[329,28000,28001],{"align":23751},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[329,28003,28004],{"align":23751},"实现容器内图形显示。",[283,28006,28007,28010,28013],{},[329,28008,28009],{"align":23751},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[329,28011,28012],{"align":23751},"挂载X11认证文件（只读）",[329,28014,28015],{"align":23751},"确保容器有权连接宿主机显示服务。",[283,28017,28018,28021,28024],{},[329,28019,28020],{"align":23751},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[329,28022,28023],{"align":23751},"挂载Wayland显示协议相关目录",[329,28025,28026],{"align":23751},"支持Wayland协议的图形显示。",[283,28028,28029,28032,28035],{},[329,28030,28031],{"align":23751},"–ulimit nofile=1024:524288",[329,28033,28034],{"align":23751},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[329,28036,28037],{"align":23751},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[283,28039,28040,28043,28046],{},[329,28041,28042],{"align":23751},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[329,28044,28045],{"align":23751},"挂载宿主机用户目录到容器内同名路径",[329,28047,28048],{"align":23751},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[283,28050,28051,28054,28057],{},[329,28052,28053],{"align":23751},"-w \u002Fhome\u002Ftungchiahui",[329,28055,28056],{"align":23751},"设置容器启动后的默认工作目录",[329,28058,28059],{"align":23751},"直接进入项目路径，方便执行命令2324。",[283,28061,28062,28065,28068],{},[329,28063,28064],{"align":23751},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[329,28066,28067],{"align":23751},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[329,28069,28070],{"align":23751},"提供预配置的深度学习与机器人开发环境。",[14,28072,28073,28074,28076,28077,28080],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[126,28075,24577],{},"加不加",[126,28078,28079],{},"sudo -E","都无所谓。",[14,28082,28083,28084,28086,28087,28089,28090,28093,28094,28096],{},"用户已经被加到docker组了，不用",[126,28085,24577],{},"也行跑，其次，",[126,28088,24577],{},"运行的话，你的",[126,28091,28092],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[126,28095,28092],{},"更不可能变了。",[120,28098,28100],{"className":23837,"code":28099,"language":23839,"meta":42,"style":42},"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",[126,28101,28102,28115,28125,28135,28147,28154,28161,28168,28178,28187,28196,28210,28222,28234,28243,28253,28262,28277,28310,28337,28348,28355],{"__ignoreMap":42},[129,28103,28104,28106,28108,28110,28113],{"class":131,"line":132},[129,28105,24577],{"class":1977},[129,28107,26321],{"class":244},[129,28109,27231],{"class":244},[129,28111,28112],{"class":188}," --name=ros_opencv_cuda",[129,28114,24679],{"class":188},[129,28116,28117,28120,28123],{"class":131,"line":51},[129,28118,28119],{"class":139},"--gpus ",[129,28121,28122],{"class":244},"all",[129,28124,24679],{"class":188},[129,28126,28127,28130,28133],{"class":131,"line":1194},[129,28128,28129],{"class":139},"-e ",[129,28131,28132],{"class":244},"NVIDIA_DRIVER_CAPABILITIES=all",[129,28134,24679],{"class":188},[129,28136,28137,28139,28142,28145],{"class":131,"line":1209},[129,28138,28129],{"class":139},[129,28140,28141],{"class":244},"DISPLAY=",[129,28143,28144],{"class":139},"$DISPLAY ",[129,28146,26176],{"class":188},[129,28148,28149,28152],{"class":131,"line":1215},[129,28150,28151],{"class":139},"-dit ",[129,28153,26176],{"class":188},[129,28155,28156,28159],{"class":131,"line":1229},[129,28157,28158],{"class":139},"--privileged ",[129,28160,26176],{"class":188},[129,28162,28163,28166],{"class":131,"line":1235},[129,28164,28165],{"class":139},"--net=host ",[129,28167,26176],{"class":188},[129,28169,28170,28173,28176],{"class":131,"line":1326},[129,28171,28172],{"class":139},"--group-add ",[129,28174,28175],{"class":244},"audio",[129,28177,24679],{"class":188},[129,28179,28180,28182,28185],{"class":131,"line":1332},[129,28181,28172],{"class":139},[129,28183,28184],{"class":244},"video",[129,28186,24679],{"class":188},[129,28188,28189,28191,28194],{"class":131,"line":1344},[129,28190,28172],{"class":139},[129,28192,28193],{"class":244},"dialout",[129,28195,24679],{"class":188},[129,28197,28198,28200,28203,28205,28208],{"class":131,"line":1626},[129,28199,28129],{"class":139},[129,28201,28202],{"class":244},"XAUTHORITY=",[129,28204,28092],{"class":139},[129,28206,28207],{"class":244},"\u002F.Xauthority",[129,28209,24679],{"class":188},[129,28211,28212,28214,28217,28220],{"class":131,"line":1631},[129,28213,28129],{"class":139},[129,28215,28216],{"class":244},"WAYLAND_DISPLAY=",[129,28218,28219],{"class":139},"$WAYLAND_DISPLAY ",[129,28221,26176],{"class":188},[129,28223,28224,28226,28229,28232],{"class":131,"line":1637},[129,28225,28129],{"class":139},[129,28227,28228],{"class":244},"XDG_RUNTIME_DIR=",[129,28230,28231],{"class":139},"$XDG_RUNTIME_DIR ",[129,28233,26176],{"class":188},[129,28235,28236,28238,28241],{"class":131,"line":1642},[129,28237,28129],{"class":139},[129,28239,28240],{"class":244},"QT_QPA_PLATFORM=xcb",[129,28242,24679],{"class":188},[129,28244,28245,28248,28251],{"class":131,"line":1656},[129,28246,28247],{"class":139},"-v ",[129,28249,28250],{"class":244},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[129,28252,24679],{"class":188},[129,28254,28255,28257,28260],{"class":131,"line":1661},[129,28256,28247],{"class":139},[129,28258,28259],{"class":244},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[129,28261,24679],{"class":188},[129,28263,28264,28267,28270,28272,28275],{"class":131,"line":1667},[129,28265,28266],{"class":139},"-v $HOME",[129,28268,28269],{"class":244},"\u002F.Xauthority:",[129,28271,28092],{"class":139},[129,28273,28274],{"class":244},"\u002F.Xauthority:ro",[129,28276,24679],{"class":188},[129,28278,28279,28281,28284,28286,28289,28292,28294,28297,28299,28301,28303,28305,28308],{"class":131,"line":1688},[129,28280,28247],{"class":139},[129,28282,28283],{"class":244},"\u002Frun\u002Fuser\u002F",[129,28285,25100],{"class":139},[129,28287,28288],{"class":1977},"id",[129,28290,28291],{"class":188}," -u",[129,28293,568],{"class":139},[129,28295,28296],{"class":244},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[129,28298,25100],{"class":139},[129,28300,28288],{"class":1977},[129,28302,28291],{"class":188},[129,28304,568],{"class":139},[129,28306,28307],{"class":244},"\u002Fwayland-0",[129,28309,24679],{"class":188},[129,28311,28312,28314,28316,28318,28320,28322,28324,28327,28329,28331,28333,28335],{"class":131,"line":1693},[129,28313,28247],{"class":139},[129,28315,28283],{"class":244},[129,28317,25100],{"class":139},[129,28319,28288],{"class":1977},[129,28321,28291],{"class":188},[129,28323,568],{"class":139},[129,28325,28326],{"class":244},":\u002Frun\u002Fuser\u002F",[129,28328,25100],{"class":139},[129,28330,28288],{"class":1977},[129,28332,28291],{"class":188},[129,28334,13729],{"class":139},[129,28336,26176],{"class":188},[129,28338,28339,28341,28343,28346],{"class":131,"line":1707},[129,28340,28266],{"class":139},[129,28342,998],{"class":244},[129,28344,28345],{"class":139},"$HOME ",[129,28347,26176],{"class":188},[129,28349,28350,28353],{"class":131,"line":1712},[129,28351,28352],{"class":139},"-w $HOME ",[129,28354,26176],{"class":188},[129,28356,28357],{"class":131,"line":1741},[129,28358,28359],{"class":139},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28361,9040],{},[83,28363,28364,28372,28375,28378],{},[86,28365,28366,13810,28368,28371],{},[126,28367,28132],{},[126,28369,28370],{},"--gpus all","没有英伟达显卡请注释。",[86,28373,28374],{},"--name后面请自己为容器起名。",[86,28376,28377],{},"最后一行仓库名称请你自己找对应的镜像填上。",[86,28379,28380,28381,28386],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23568,28382,28383],{},[289,28384,28385],{},"请不要加","。",[120,28388,28390],{"className":23837,"code":28389,"language":23839,"meta":42,"style":42},"--ulimit nofile=1024:524288 \\\n",[126,28391,28392],{"__ignoreMap":42},[129,28393,28394,28397,28400],{"class":131,"line":132},[129,28395,28396],{"class":1977},"--ulimit",[129,28398,28399],{"class":244}," nofile=1024:524288",[129,28401,24679],{"class":188},[14,28403,28404,28405,28410],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23568,28406,28407],{},[289,28408,28409],{},"不建议","**.**",[120,28412,28414],{"className":23837,"code":28413,"language":23839,"meta":42,"style":42},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[126,28415,28416,28443,28452],{"__ignoreMap":42},[129,28417,28418,28421,28424,28426,28428,28430,28432,28434,28436,28439,28441],{"class":131,"line":132},[129,28419,28420],{"class":1977},"--user",[129,28422,28423],{"class":139}," $(",[129,28425,28288],{"class":1977},[129,28427,28291],{"class":188},[129,28429,568],{"class":139},[129,28431,998],{"class":244},[129,28433,25100],{"class":139},[129,28435,28288],{"class":1977},[129,28437,28438],{"class":188}," -g",[129,28440,13729],{"class":139},[129,28442,26176],{"class":188},[129,28444,28445,28447,28450],{"class":131,"line":51},[129,28446,28247],{"class":139},[129,28448,28449],{"class":244},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[129,28451,24679],{"class":188},[129,28453,28454,28456,28459],{"class":131,"line":1194},[129,28455,28247],{"class":139},[129,28457,28458],{"class":244},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[129,28460,24679],{"class":188},[5141,28462,28463],{},"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":42,"searchDepth":51,"depth":51,"links":28465},[28466,28467,28468],{"id":27464,"depth":1194,"text":27465},{"id":27474,"depth":1194,"text":27475},{"id":27885,"depth":1194,"text":27888},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27456,"description":42},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28475,"title":28476,"body":28477,"description":42,"extension":54,"meta":30100,"navigation":56,"path":30101,"seo":30102,"stem":30103,"__hash__":30104},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28478,"toc":30095},[28479,28482,28486,28489,28711,28715,28719,28722,28828,28833,28836,28841,28844,28849,28852,28857,28860,28872,28875,28880,28887,28915,28922,28998,29003,29006,29029,29031,29106,29111,29114,29118,29126,29131,29136,29140,29151,29157,29160,29163,29187,29190,29193,29221,29224,29227,29692,29695,29700,29705,29709,29732,29737,29741,29745,29748,29751,29754,29781,29784,29787,29805,29808,29811,29833,29841,29846,29851,29855,29858,29861,29864,29867,29912,29915,29933,29936,29941,29944,29965,29968,30024,30027,30032,30036,30039,30046,30049,30052,30057,30060,30076,30079,30092],[10,28480,28476],{"id":28481},"_6手动创建docker镜像",[100,28483,28485],{"id":28484},"_61dockerfile","6.1.DockerFile",[14,28487,28488],{},"常用命令：",[277,28490,28491,28502],{},[280,28492,28493],{},[283,28494,28495,28498,28500],{},[286,28496,28497],{"align":23751},"指令",[286,28499,25870],{"align":23751},[286,28501,27493],{"align":23751},[324,28503,28504,28514,28530,28541,28552,28563,28574,28585,28596,28610,28624,28635,28649,28660,28671,28685,28700],{},[283,28505,28506,28508,28511],{},[329,28507,27371],{"align":23751},[329,28509,28510],{"align":23751},"指定基础镜像，是 Dockerfile 的起点",[329,28512,28513],{"align":23751},"FROM ubuntu:22.04",[283,28515,28516,28519,28522],{},[329,28517,28518],{"align":23751},"LABEL",[329,28520,28521],{"align":23751},"添加元数据（如作者、版本等）",[329,28523,28524,28525,28529],{"align":23751},"LABEL maintainer=”",[20,28526,28528],{"href":28527},"mailto:you@example.com","you@example.com","”",[283,28531,28532,28535,28538],{},[329,28533,28534],{"align":23751},"ENV",[329,28536,28537],{"align":23751},"设置环境变量",[329,28539,28540],{"align":23751},"ENV PORT=8080",[283,28542,28543,28546,28549],{},[329,28544,28545],{"align":23751},"ARG",[329,28547,28548],{"align":23751},"构建参数，只在构建期间可用",[329,28550,28551],{"align":23751},"ARG VERSION=1.0",[283,28553,28554,28557,28560],{},[329,28555,28556],{"align":23751},"RUN",[329,28558,28559],{"align":23751},"构建镜像时运行命令",[329,28561,28562],{"align":23751},"RUN apt-get update && apt-get install -y curl",[283,28564,28565,28568,28571],{},[329,28566,28567],{"align":23751},"COPY",[329,28569,28570],{"align":23751},"复制文件到镜像中",[329,28572,28573],{"align":23751},"COPY . \u002Fapp",[283,28575,28576,28579,28582],{},[329,28577,28578],{"align":23751},"ADD",[329,28580,28581],{"align":23751},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[329,28583,28584],{"align":23751},"ADD archive.tar.gz \u002Fdata\u002F",[283,28586,28587,28590,28593],{},[329,28588,28589],{"align":23751},"WORKDIR",[329,28591,28592],{"align":23751},"设置工作目录",[329,28594,28595],{"align":23751},"WORKDIR \u002Fopt",[283,28597,28598,28601,28604],{},[329,28599,28600],{"align":23751},"CMD",[329,28602,28603],{"align":23751},"设置容器启动时默认命令（可被 docker run 覆盖）",[329,28605,28606,28607],{"align":23751},"CMD ",[129,28608,28609],{},"“node”, “index.js”",[283,28611,28612,28615,28618],{},[329,28613,28614],{"align":23751},"ENTRYPOINT",[329,28616,28617],{"align":23751},"设置容器启动时固定命令（通常用于 CLI 工具等）",[329,28619,28620,28621],{"align":23751},"ENTRYPOINT ",[129,28622,28623],{},"“python3”",[283,28625,28626,28629,28632],{},[329,28627,28628],{"align":23751},"EXPOSE",[329,28630,28631],{"align":23751},"声明镜像内服务监听的端口（不会自动映射）",[329,28633,28634],{"align":23751},"EXPOSE 80",[283,28636,28637,28640,28643],{},[329,28638,28639],{"align":23751},"VOLUME",[329,28641,28642],{"align":23751},"声明数据卷挂载点",[329,28644,28645,28646],{"align":23751},"VOLUME ",[129,28647,28648],{},"“\u002Fdata”",[283,28650,28651,28654,28657],{},[329,28652,28653],{"align":23751},"USER",[329,28655,28656],{"align":23751},"设置后续命令执行的用户",[329,28658,28659],{"align":23751},"USER appuser",[283,28661,28662,28665,28668],{},[329,28663,28664],{"align":23751},"ONBUILD",[329,28666,28667],{"align":23751},"当镜像作为其他镜像基础镜像时触发的构建指令",[329,28669,28670],{"align":23751},"ONBUILD COPY . \u002Fsrc",[283,28672,28673,28676,28679],{},[329,28674,28675],{"align":23751},"SHELL",[329,28677,28678],{"align":23751},"更改默认 shell，比如将 sh -c 改为 bash -c",[329,28680,28681,28682],{"align":23751},"SHELL ",[129,28683,28684],{},"“\u002Fbin\u002Fbash”, “-c”",[283,28686,28687,28690,28693],{},[329,28688,28689],{"align":23751},"HEALTHCHECK",[329,28691,28692],{"align":23751},"定义容器运行时的健康检查命令",[329,28694,28695,28696],{"align":23751},"`HEALTHCHECK CMD curl –fail ",[20,28697,28698],{"href":28698,"rel":28699},"http:\u002F\u002Flocalhost:8080",[24],[283,28701,28702,28705,28708],{},[329,28703,28704],{"align":23751},"STOPSIGNAL",[329,28706,28707],{"align":23751},"容器停止时发送的信号",[329,28709,28710],{"align":23751},"STOPSIGNAL SIGKILL",[100,28712,28714],{"id":28713},"_62自己创建容器","6.2.自己创建容器",[22013,28716,28718],{"id":28717},"_621手动创建","6.2.1.手动创建",[14,28720,28721],{},"在x86电脑上编译x86的：",[120,28723,28725],{"className":23837,"code":28724,"language":23839,"meta":42,"style":42},"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",[126,28726,28727,28743,28747,28760,28764,28777,28781,28794,28798,28811,28815],{"__ignoreMap":42},[129,28728,28729,28731,28734,28737,28740],{"class":131,"line":132},[129,28730,26554],{"class":1977},[129,28732,28733],{"class":244}," build",[129,28735,28736],{"class":188}," -t",[129,28738,28739],{"class":244}," ros-melodic-cuda118-cudnn8-bionic:latest",[129,28741,28742],{"class":244}," .\n",[129,28744,28745],{"class":131,"line":51},[129,28746,2414],{"emptyLinePlaceholder":56},[129,28748,28749,28751,28753,28755,28758],{"class":131,"line":1194},[129,28750,26554],{"class":1977},[129,28752,28733],{"class":244},[129,28754,28736],{"class":188},[129,28756,28757],{"class":244}," ros-noetic-focal:latest",[129,28759,28742],{"class":244},[129,28761,28762],{"class":131,"line":1209},[129,28763,2414],{"emptyLinePlaceholder":56},[129,28765,28766,28768,28770,28772,28775],{"class":131,"line":1215},[129,28767,26554],{"class":1977},[129,28769,28733],{"class":244},[129,28771,28736],{"class":188},[129,28773,28774],{"class":244}," ros-humble-jammy:latest",[129,28776,28742],{"class":244},[129,28778,28779],{"class":131,"line":1229},[129,28780,2414],{"emptyLinePlaceholder":56},[129,28782,28783,28785,28787,28789,28792],{"class":131,"line":1235},[129,28784,26554],{"class":1977},[129,28786,28733],{"class":244},[129,28788,28736],{"class":188},[129,28790,28791],{"class":244}," ros-jazzy-noble:latest",[129,28793,28742],{"class":244},[129,28795,28796],{"class":131,"line":1326},[129,28797,2414],{"emptyLinePlaceholder":56},[129,28799,28800,28802,28804,28806,28809],{"class":131,"line":1332},[129,28801,26554],{"class":1977},[129,28803,28733],{"class":244},[129,28805,28736],{"class":188},[129,28807,28808],{"class":244}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[129,28810,28742],{"class":244},[129,28812,28813],{"class":131,"line":1344},[129,28814,2414],{"emptyLinePlaceholder":56},[129,28816,28817,28819,28821,28823,28826],{"class":131,"line":1626},[129,28818,26554],{"class":1977},[129,28820,28733],{"class":244},[129,28822,28736],{"class":188},[129,28824,28825],{"class":244}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[129,28827,28742],{"class":244},[14,28829,28830],{},[40,28831],{"alt":42,"src":28832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28834,28835],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28837,28838],{},[40,28839],{"alt":42,"src":28840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28842,28843],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[83,28845,28846],{},[86,28847,28848],{},"创建 Docker Hub 账户",[14,28850,28851],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[83,28853,28854],{"start":51},[86,28855,28856],{},"登录 Docker Hub",[14,28858,28859],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[120,28861,28863],{"className":23837,"code":28862,"language":23839,"meta":42,"style":42},"docker login\n",[126,28864,28865],{"__ignoreMap":42},[129,28866,28867,28869],{"class":131,"line":132},[129,28868,26554],{"class":1977},[129,28870,28871],{"class":244}," login\n",[14,28873,28874],{},"输入你的 Docker Hub 用户名和密码进行验证。",[83,28876,28877],{},[86,28878,28879],{},"为你的镜像打标签",[14,28881,28882,28883,28886],{},"Docker Hub 使用 ",[126,28884,28885],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[120,28888,28890],{"className":23837,"code":28889,"language":23839,"meta":42,"style":42},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[126,28891,28892],{"__ignoreMap":42},[129,28893,28894,28896,28899,28901,28904,28907,28910,28912],{"class":131,"line":132},[129,28895,26554],{"class":1977},[129,28897,28898],{"class":244}," tag",[129,28900,28791],{"class":244},[129,28902,28903],{"class":135}," \u003C",[129,28905,28906],{"class":244},"你的用户",[129,28908,28909],{"class":139},"名",[129,28911,1099],{"class":135},[129,28913,28914],{"class":244},"\u002Fros-jazzy-noble:latest\n",[14,28916,28917,28918,28921],{},"例如，如果你的 Docker Hub 用户名是 ",[126,28919,28920],{},"tungchiahui","，你应该执行：",[120,28923,28925],{"className":23837,"code":28924,"language":23839,"meta":42,"style":42},"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",[126,28926,28927,28938,28942,28953,28957,28968,28972,28983,28987],{"__ignoreMap":42},[129,28928,28929,28931,28933,28935],{"class":131,"line":132},[129,28930,26554],{"class":1977},[129,28932,28898],{"class":244},[129,28934,28757],{"class":244},[129,28936,28937],{"class":244}," tungchiahui\u002Fros-noetic-focal:latest\n",[129,28939,28940],{"class":131,"line":51},[129,28941,2414],{"emptyLinePlaceholder":56},[129,28943,28944,28946,28948,28950],{"class":131,"line":1194},[129,28945,26554],{"class":1977},[129,28947,28898],{"class":244},[129,28949,28774],{"class":244},[129,28951,28952],{"class":244}," tungchiahui\u002Fros-humble-jammy:latest\n",[129,28954,28955],{"class":131,"line":1209},[129,28956,2414],{"emptyLinePlaceholder":56},[129,28958,28959,28961,28963,28965],{"class":131,"line":1215},[129,28960,26554],{"class":1977},[129,28962,28898],{"class":244},[129,28964,28791],{"class":244},[129,28966,28967],{"class":244}," tungchiahui\u002Fros-jazzy-noble:latest\n",[129,28969,28970],{"class":131,"line":1229},[129,28971,2414],{"emptyLinePlaceholder":56},[129,28973,28974,28976,28978,28980],{"class":131,"line":1235},[129,28975,26554],{"class":1977},[129,28977,28898],{"class":244},[129,28979,28808],{"class":244},[129,28981,28982],{"class":244}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[129,28984,28985],{"class":131,"line":1326},[129,28986,2414],{"emptyLinePlaceholder":56},[129,28988,28989,28991,28993,28995],{"class":131,"line":1332},[129,28990,26554],{"class":1977},[129,28992,28898],{"class":244},[129,28994,28825],{"class":244},[129,28996,28997],{"class":244}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[83,28999,29000],{"start":51},[86,29001,29002],{},"推送镜像到 Docker Hub",[14,29004,29005],{},"使用以下命令将镜像推送到 Docker Hub：",[120,29007,29009],{"className":23837,"code":29008,"language":23839,"meta":42,"style":42},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[126,29010,29011],{"__ignoreMap":42},[129,29012,29013,29015,29018,29020,29022,29024,29026],{"class":131,"line":132},[129,29014,26554],{"class":1977},[129,29016,29017],{"class":244}," push",[129,29019,28903],{"class":135},[129,29021,28906],{"class":244},[129,29023,28909],{"class":139},[129,29025,1099],{"class":135},[129,29027,29028],{"class":244},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29030,14648],{},[120,29032,29034],{"className":23837,"code":29033,"language":23839,"meta":42,"style":42},"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",[126,29035,29036,29044,29048,29056,29060,29068,29072,29081,29085,29093,29097],{"__ignoreMap":42},[129,29037,29038,29040,29042],{"class":131,"line":132},[129,29039,26554],{"class":1977},[129,29041,29017],{"class":244},[129,29043,28937],{"class":244},[129,29045,29046],{"class":131,"line":51},[129,29047,2414],{"emptyLinePlaceholder":56},[129,29049,29050,29052,29054],{"class":131,"line":1194},[129,29051,26554],{"class":1977},[129,29053,29017],{"class":244},[129,29055,28952],{"class":244},[129,29057,29058],{"class":131,"line":1209},[129,29059,2414],{"emptyLinePlaceholder":56},[129,29061,29062,29064,29066],{"class":131,"line":1215},[129,29063,26554],{"class":1977},[129,29065,29017],{"class":244},[129,29067,28967],{"class":244},[129,29069,29070],{"class":131,"line":1229},[129,29071,2414],{"emptyLinePlaceholder":56},[129,29073,29074,29076,29078],{"class":131,"line":1235},[129,29075,26554],{"class":1977},[129,29077,29017],{"class":244},[129,29079,29080],{"class":244}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[129,29082,29083],{"class":131,"line":1326},[129,29084,2414],{"emptyLinePlaceholder":56},[129,29086,29087,29089,29091],{"class":131,"line":1332},[129,29088,26554],{"class":1977},[129,29090,29017],{"class":244},[129,29092,28997],{"class":244},[129,29094,29095],{"class":131,"line":1344},[129,29096,2414],{"emptyLinePlaceholder":56},[129,29098,29099,29101,29103],{"class":131,"line":1626},[129,29100,26554],{"class":1977},[129,29102,29017],{"class":244},[129,29104,29105],{"class":244}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[83,29107,29108],{"start":1194},[86,29109,29110],{},"验证推送成功",[14,29112,29113],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29115,29116],{},[289,29117,3798],{},[1146,29119,29120,29123],{},[86,29121,29122],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[86,29124,29125],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29127,29128],{},[40,29129],{"alt":42,"src":29130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29132,29133],{},[40,29134],{"alt":42,"src":29135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22013,29137,29139],{"id":29138},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29141,29142,29143,29146,29147,29150],{},"如果您想在 ",[289,29144,29145],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[289,29148,29149],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29152,29153,29154],{},"1. ",[289,29155,29156],{},"启用 Docker 跨平台构建",[14,29158,29159],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29161,29162],{},"第一步：启用 buildx（只需执行一次）",[120,29164,29166],{"className":23837,"code":29165,"language":23839,"meta":42,"style":42},"docker buildx create --name multiarch_builder --use\n",[126,29167,29168],{"__ignoreMap":42},[129,29169,29170,29172,29175,29178,29181,29184],{"class":131,"line":132},[129,29171,26554],{"class":1977},[129,29173,29174],{"class":244}," buildx",[129,29176,29177],{"class":244}," create",[129,29179,29180],{"class":188}," --name",[129,29182,29183],{"class":244}," multiarch_builder",[129,29185,29186],{"class":188}," --use\n",[14,29188,29189],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29191,29192],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[120,29194,29196],{"className":23837,"code":29195,"language":23839,"meta":42,"style":42},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[126,29197,29198],{"__ignoreMap":42},[129,29199,29200,29202,29204,29206,29209,29212,29215,29218],{"class":131,"line":132},[129,29201,26554],{"class":1977},[129,29203,27231],{"class":244},[129,29205,27234],{"class":188},[129,29207,29208],{"class":188}," --privileged",[129,29210,29211],{"class":244}," multiarch\u002Fqemu-user-static",[129,29213,29214],{"class":188}," --reset",[129,29216,29217],{"class":188}," -p",[129,29219,29220],{"class":244}," yes\n",[14,29222,29223],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29225,29226],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[120,29228,29230],{"className":23837,"code":29229,"language":23839,"meta":42,"style":42},"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",[126,29231,29232,29274,29278,29283,29293,29303,29312,29318,29322,29326,29336,29344,29353,29359,29363,29367,29377,29385,29394,29400,29404,29408,29418,29426,29435,29441,29445,29449,29459,29467,29476,29482,29486,29490,29500,29508,29517,29523,29527,29531,29541,29549,29558,29564,29568,29572,29582,29590,29599,29605,29609,29613,29623,29631,29640,29646,29650,29654,29665,29673,29682,29688],{"__ignoreMap":42},[129,29233,29234,29236,29238,29240,29243,29246,29248,29250,29253,29255,29257,29259,29261,29264,29267,29269,29272],{"class":131,"line":132},[129,29235,26554],{"class":1977},[129,29237,29174],{"class":244},[129,29239,28733],{"class":244},[129,29241,29242],{"class":188}," --platform",[129,29244,29245],{"class":244}," linux\u002Famd64,linux\u002Farm64",[129,29247,28736],{"class":188},[129,29249,28903],{"class":135},[129,29251,29252],{"class":244},"你的镜像",[129,29254,28909],{"class":139},[129,29256,1099],{"class":135},[129,29258,998],{"class":244},[129,29260,1049],{"class":135},[129,29262,29263],{"class":244},"标",[129,29265,29266],{"class":139},"签",[129,29268,1099],{"class":135},[129,29270,29271],{"class":188}," --push",[129,29273,28742],{"class":244},[129,29275,29276],{"class":131,"line":51},[129,29277,2414],{"emptyLinePlaceholder":56},[129,29279,29280],{"class":131,"line":1194},[129,29281,29282],{"class":198},"# 例子：\n",[129,29284,29285,29287,29289,29291],{"class":131,"line":1209},[129,29286,26554],{"class":1977},[129,29288,29174],{"class":244},[129,29290,28733],{"class":244},[129,29292,24679],{"class":188},[129,29294,29295,29298,29301],{"class":131,"line":1215},[129,29296,29297],{"class":139},"--platform ",[129,29299,29300],{"class":244},"linux\u002Famd64,linux\u002Farm64",[129,29302,24679],{"class":188},[129,29304,29305,29307,29310],{"class":131,"line":1229},[129,29306,28736],{"class":188},[129,29308,29309],{"class":244}," tungchiahui\u002Fros:noetic-focal",[129,29311,24679],{"class":188},[129,29313,29314,29316],{"class":131,"line":1235},[129,29315,29271],{"class":188},[129,29317,24679],{"class":188},[129,29319,29320],{"class":131,"line":1326},[129,29321,28742],{"class":244},[129,29323,29324],{"class":131,"line":1332},[129,29325,2414],{"emptyLinePlaceholder":56},[129,29327,29328,29330,29332,29334],{"class":131,"line":1344},[129,29329,26554],{"class":1977},[129,29331,29174],{"class":244},[129,29333,28733],{"class":244},[129,29335,24679],{"class":188},[129,29337,29338,29340,29342],{"class":131,"line":1626},[129,29339,29297],{"class":139},[129,29341,29300],{"class":244},[129,29343,24679],{"class":188},[129,29345,29346,29348,29351],{"class":131,"line":1631},[129,29347,28736],{"class":188},[129,29349,29350],{"class":244}," tungchiahui\u002Fros:humble-jammy",[129,29352,24679],{"class":188},[129,29354,29355,29357],{"class":131,"line":1637},[129,29356,29271],{"class":188},[129,29358,24679],{"class":188},[129,29360,29361],{"class":131,"line":1642},[129,29362,28742],{"class":244},[129,29364,29365],{"class":131,"line":1656},[129,29366,2414],{"emptyLinePlaceholder":56},[129,29368,29369,29371,29373,29375],{"class":131,"line":1661},[129,29370,26554],{"class":1977},[129,29372,29174],{"class":244},[129,29374,28733],{"class":244},[129,29376,24679],{"class":188},[129,29378,29379,29381,29383],{"class":131,"line":1667},[129,29380,29297],{"class":139},[129,29382,29300],{"class":244},[129,29384,24679],{"class":188},[129,29386,29387,29389,29392],{"class":131,"line":1688},[129,29388,28736],{"class":188},[129,29390,29391],{"class":244}," tungchiahui\u002Fros:jazzy-noble",[129,29393,24679],{"class":188},[129,29395,29396,29398],{"class":131,"line":1693},[129,29397,29271],{"class":188},[129,29399,24679],{"class":188},[129,29401,29402],{"class":131,"line":1707},[129,29403,28742],{"class":244},[129,29405,29406],{"class":131,"line":1712},[129,29407,2414],{"emptyLinePlaceholder":56},[129,29409,29410,29412,29414,29416],{"class":131,"line":1741},[129,29411,26321],{"class":1977},[129,29413,29174],{"class":244},[129,29415,28733],{"class":244},[129,29417,24679],{"class":188},[129,29419,29420,29422,29424],{"class":131,"line":1746},[129,29421,29297],{"class":139},[129,29423,29300],{"class":244},[129,29425,24679],{"class":188},[129,29427,29428,29430,29433],{"class":131,"line":1763},[129,29429,28736],{"class":188},[129,29431,29432],{"class":244}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[129,29434,24679],{"class":188},[129,29436,29437,29439],{"class":131,"line":1768},[129,29438,29271],{"class":188},[129,29440,24679],{"class":188},[129,29442,29443],{"class":131,"line":1773},[129,29444,28742],{"class":244},[129,29446,29447],{"class":131,"line":1778},[129,29448,2414],{"emptyLinePlaceholder":56},[129,29450,29451,29453,29455,29457],{"class":131,"line":1792},[129,29452,26554],{"class":1977},[129,29454,29174],{"class":244},[129,29456,28733],{"class":244},[129,29458,24679],{"class":188},[129,29460,29461,29463,29465],{"class":131,"line":1797},[129,29462,29297],{"class":139},[129,29464,29300],{"class":244},[129,29466,24679],{"class":188},[129,29468,29469,29471,29474],{"class":131,"line":2591},[129,29470,28736],{"class":188},[129,29472,29473],{"class":244}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[129,29475,24679],{"class":188},[129,29477,29478,29480],{"class":131,"line":2605},[129,29479,29271],{"class":188},[129,29481,24679],{"class":188},[129,29483,29484],{"class":131,"line":2613},[129,29485,28742],{"class":244},[129,29487,29488],{"class":131,"line":2618},[129,29489,2414],{"emptyLinePlaceholder":56},[129,29491,29492,29494,29496,29498],{"class":131,"line":2624},[129,29493,26321],{"class":1977},[129,29495,29174],{"class":244},[129,29497,28733],{"class":244},[129,29499,24679],{"class":188},[129,29501,29502,29504,29506],{"class":131,"line":2630},[129,29503,29297],{"class":139},[129,29505,29300],{"class":244},[129,29507,24679],{"class":188},[129,29509,29510,29512,29515],{"class":131,"line":2635},[129,29511,28736],{"class":188},[129,29513,29514],{"class":244}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[129,29516,24679],{"class":188},[129,29518,29519,29521],{"class":131,"line":7963},[129,29520,29271],{"class":188},[129,29522,24679],{"class":188},[129,29524,29525],{"class":131,"line":7987},[129,29526,28742],{"class":244},[129,29528,29529],{"class":131,"line":7992},[129,29530,2414],{"emptyLinePlaceholder":56},[129,29532,29533,29535,29537,29539],{"class":131,"line":7998},[129,29534,26554],{"class":1977},[129,29536,29174],{"class":244},[129,29538,28733],{"class":244},[129,29540,24679],{"class":188},[129,29542,29543,29545,29547],{"class":131,"line":8025},[129,29544,29297],{"class":139},[129,29546,29300],{"class":244},[129,29548,24679],{"class":188},[129,29550,29551,29553,29556],{"class":131,"line":8030},[129,29552,28736],{"class":188},[129,29554,29555],{"class":244}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[129,29557,24679],{"class":188},[129,29559,29560,29562],{"class":131,"line":8036},[129,29561,29271],{"class":188},[129,29563,24679],{"class":188},[129,29565,29566],{"class":131,"line":8048},[129,29567,28742],{"class":244},[129,29569,29570],{"class":131,"line":8060},[129,29571,2414],{"emptyLinePlaceholder":56},[129,29573,29574,29576,29578,29580],{"class":131,"line":8072},[129,29575,26554],{"class":1977},[129,29577,29174],{"class":244},[129,29579,28733],{"class":244},[129,29581,24679],{"class":188},[129,29583,29584,29586,29588],{"class":131,"line":9731},[129,29585,29297],{"class":139},[129,29587,29300],{"class":244},[129,29589,24679],{"class":188},[129,29591,29592,29594,29597],{"class":131,"line":9756},[129,29593,28736],{"class":188},[129,29595,29596],{"class":244}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[129,29598,24679],{"class":188},[129,29600,29601,29603],{"class":131,"line":9779},[129,29602,29271],{"class":188},[129,29604,24679],{"class":188},[129,29606,29607],{"class":131,"line":9803},[129,29608,28742],{"class":244},[129,29610,29611],{"class":131,"line":9808},[129,29612,2414],{"emptyLinePlaceholder":56},[129,29614,29615,29617,29619,29621],{"class":131,"line":9813},[129,29616,26321],{"class":1977},[129,29618,29174],{"class":244},[129,29620,28733],{"class":244},[129,29622,24679],{"class":188},[129,29624,29625,29627,29629],{"class":131,"line":9818},[129,29626,29297],{"class":139},[129,29628,29300],{"class":244},[129,29630,24679],{"class":188},[129,29632,29633,29635,29638],{"class":131,"line":9827},[129,29634,28736],{"class":188},[129,29636,29637],{"class":244}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[129,29639,24679],{"class":188},[129,29641,29642,29644],{"class":131,"line":9832},[129,29643,29271],{"class":188},[129,29645,24679],{"class":188},[129,29647,29648],{"class":131,"line":9838},[129,29649,28742],{"class":244},[129,29651,29652],{"class":131,"line":9859},[129,29653,2414],{"emptyLinePlaceholder":56},[129,29655,29656,29659,29661,29663],{"class":131,"line":9865},[129,29657,29658],{"class":1977},"  docker",[129,29660,29174],{"class":244},[129,29662,28733],{"class":244},[129,29664,24679],{"class":188},[129,29666,29667,29669,29671],{"class":131,"line":9879},[129,29668,29297],{"class":139},[129,29670,29300],{"class":244},[129,29672,24679],{"class":188},[129,29674,29675,29677,29680],{"class":131,"line":9885},[129,29676,28736],{"class":188},[129,29678,29679],{"class":244}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[129,29681,24679],{"class":188},[129,29683,29684,29686],{"class":131,"line":9912},[129,29685,29271],{"class":188},[129,29687,24679],{"class":188},[129,29689,29690],{"class":131,"line":9921},[129,29691,28742],{"class":244},[14,29693,29694],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29696,29697],{},[40,29698],{"alt":42,"src":29699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29701,29702],{},[40,29703],{"alt":42,"src":29704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22013,29706,29708],{"id":29707},"_623清除构建缓存","6.2.3.清除构建缓存",[120,29710,29712],{"className":23837,"code":29711,"language":23839,"meta":42,"style":42},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[126,29713,29714,29719],{"__ignoreMap":42},[129,29715,29716],{"class":131,"line":132},[129,29717,29718],{"class":198},"# 清理BuildKit构建缓存\n",[129,29720,29721,29723,29726,29729],{"class":131,"line":51},[129,29722,26554],{"class":1977},[129,29724,29725],{"class":244}," builder",[129,29727,29728],{"class":244}," prune",[129,29730,29731],{"class":188}," -f\n",[14,29733,29734],{},[40,29735],{"alt":42,"src":29736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[100,29738,29740],{"id":29739},"_63补充","6.3.补充",[22013,29742,29744],{"id":29743},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29746,29747],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29749,29750],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29752,29753],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[120,29755,29757],{"className":23837,"code":29756,"language":23839,"meta":42,"style":42},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[126,29758,29759,29766],{"__ignoreMap":42},[129,29760,29761,29763],{"class":131,"line":132},[129,29762,27371],{"class":1977},[129,29764,29765],{"class":244}," nginx\n",[129,29767,29768,29770,29773,29776,29778],{"class":131,"line":51},[129,29769,28556],{"class":1977},[129,29771,29772],{"class":244}," echo",[129,29774,29775],{"class":244}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[129,29777,26223],{"class":135},[129,29779,29780],{"class":244}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29782,29783],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29785,29786],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[120,29788,29790],{"className":23837,"code":29789,"language":23839,"meta":42,"style":42},"docker build -t nginx:tuling .\n",[126,29791,29792],{"__ignoreMap":42},[129,29793,29794,29796,29798,29800,29803],{"class":131,"line":132},[129,29795,26554],{"class":1977},[129,29797,28733],{"class":244},[129,29799,28736],{"class":188},[129,29801,29802],{"class":244}," nginx:tuling",[129,29804,28742],{"class":244},[14,29806,29807],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29809,29810],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[120,29812,29814],{"className":23837,"code":29813,"language":23839,"meta":42,"style":42},"docker run -d -p 92:80 nginx:tuling\n",[126,29815,29816],{"__ignoreMap":42},[129,29817,29818,29820,29822,29825,29827,29830],{"class":131,"line":132},[129,29819,26554],{"class":1977},[129,29821,27231],{"class":244},[129,29823,29824],{"class":188}," -d",[129,29826,29217],{"class":188},[129,29828,29829],{"class":244}," 92:80",[129,29831,29832],{"class":244}," nginx:tuling\n",[14,29834,29835,29836],{},"4、访问 ",[20,29837,29840],{"href":29838,"rel":29839},"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",[24],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29842,29843],{},[40,29844],{"alt":42,"src":29845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29847,29848],{},[40,29849],{"alt":42,"src":29850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22013,29852,29854],{"id":29853},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29856,29857],{},"只需要知道大体流程即可",[14,29859,29860],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29862,29863],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29865,29866],{},"2、在Dockerfile中添加以下内容",[120,29868,29870],{"className":26092,"code":29869,"language":26094,"meta":42,"style":42},"# 基于哪个镜像\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",[126,29871,29872,29877,29882,29887,29892,29897,29902,29907],{"__ignoreMap":42},[129,29873,29874],{"class":131,"line":132},[129,29875,29876],{},"# 基于哪个镜像\n",[129,29878,29879],{"class":131,"line":51},[129,29880,29881],{},"From java:8\n",[129,29883,29884],{"class":131,"line":1194},[129,29885,29886],{},"# 复制文件到容器\n",[129,29888,29889],{"class":131,"line":1209},[129,29890,29891],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[129,29893,29894],{"class":131,"line":1215},[129,29895,29896],{},"# 声明需要暴露的端口\n",[129,29898,29899],{"class":131,"line":1229},[129,29900,29901],{},"EXPOSE 8877\n",[129,29903,29904],{"class":131,"line":1235},[129,29905,29906],{},"# 配置容器启动后执行的命令\n",[129,29908,29909],{"class":131,"line":1326},[129,29910,29911],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29913,29914],{},"3、使用docker build命令构建镜像",[120,29916,29918],{"className":23837,"code":29917,"language":23839,"meta":42,"style":42},"docker build -t tulingmall-member:0.0.5 .\n",[126,29919,29920],{"__ignoreMap":42},[129,29921,29922,29924,29926,29928,29931],{"class":131,"line":132},[129,29923,26554],{"class":1977},[129,29925,28733],{"class":244},[129,29927,28736],{"class":188},[129,29929,29930],{"class":244}," tulingmall-member:0.0.5",[129,29932,28742],{"class":244},[14,29934,29935],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,29937,29938],{},[40,29939],{"alt":42,"src":29940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,29942,29943],{},"4、启动镜像，加-d可在后台启动",[120,29945,29947],{"className":23837,"code":29946,"language":23839,"meta":42,"style":42},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[126,29948,29949],{"__ignoreMap":42},[129,29950,29951,29953,29955,29957,29959,29962],{"class":131,"line":132},[129,29952,26554],{"class":1977},[129,29954,27231],{"class":244},[129,29956,29824],{"class":188},[129,29958,29217],{"class":188},[129,29960,29961],{"class":244}," 8877:8877",[129,29963,29964],{"class":244}," tulingmall-member:0.0.5\n",[14,29966,29967],{},"加上JVM参数：",[120,29969,29971],{"className":23837,"code":29970,"language":23839,"meta":42,"style":42},"# --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",[126,29972,29973,29978,29993,30003,30012,30019],{"__ignoreMap":42},[129,29974,29975],{"class":131,"line":132},[129,29976,29977],{"class":198},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[129,29979,29980,29982,29984,29987,29989,29991],{"class":131,"line":51},[129,29981,26554],{"class":1977},[129,29983,27231],{"class":244},[129,29985,29986],{"class":188},"  -d",[129,29988,29217],{"class":188},[129,29990,29961],{"class":244},[129,29992,24679],{"class":188},[129,29994,29995,29997,30000],{"class":131,"line":1194},[129,29996,28129],{"class":139},[129,29998,29999],{"class":244},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[129,30001,30002],{"class":188},"  \\\n",[129,30004,30005,30007,30010],{"class":131,"line":1209},[129,30006,28129],{"class":139},[129,30008,30009],{"class":244},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[129,30011,30002],{"class":188},[129,30013,30014,30017],{"class":131,"line":1215},[129,30015,30016],{"class":139},"--cap-add=SYS_PTRACE  ",[129,30018,26176],{"class":188},[129,30020,30021],{"class":131,"line":1229},[129,30022,30023],{"class":139},"tulingmall-member:0.0.5\n",[14,30025,30026],{},"5、访问会员服务接口",[14,30028,30029],{},[40,30030],{"alt":42,"src":30031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22013,30033,30035],{"id":30034},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30037,30038],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30040,30041,30042],{},"阿里云docker镜像仓库：",[20,30043,30044],{"href":30044,"rel":30045},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24],[14,30047,30048],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30050,30051],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30053,30054],{},[40,30055],{"alt":42,"src":30056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30058,30059],{},"要把镜像推送到镜像仓库",[120,30061,30063],{"className":23837,"code":30062,"language":23839,"meta":42,"style":42},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[126,30064,30065],{"__ignoreMap":42},[129,30066,30067,30069,30071,30073],{"class":131,"line":132},[129,30068,26554],{"class":1977},[129,30070,28898],{"class":244},[129,30072,29930],{"class":244},[129,30074,30075],{"class":244}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30077,30078],{},"最后将镜像推送到远程仓库",[120,30080,30082],{"className":23837,"code":30081,"language":23839,"meta":42,"style":42},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[126,30083,30084],{"__ignoreMap":42},[129,30085,30086,30088,30090],{"class":131,"line":132},[129,30087,26554],{"class":1977},[129,30089,29017],{"class":244},[129,30091,30075],{"class":244},[5141,30093,30094],{},"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":42,"searchDepth":51,"depth":51,"links":30096},[30097,30098,30099],{"id":28484,"depth":1194,"text":28485},{"id":28713,"depth":1194,"text":28714},{"id":29739,"depth":1194,"text":29740},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28476,"description":42},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30106,"title":30107,"body":30108,"description":42,"extension":54,"meta":30251,"navigation":56,"path":30252,"seo":30253,"stem":30254,"__hash__":30255},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30109,"toc":30249},[30110,30113,30118,30123,30126,30131,30136,30139,30144,30149,30152,30157,30160,30163,30166,30169,30172,30175,30195,30217,30220,30223,30243,30246],[10,30111,30107],{"id":30112},"_7vscode远程开发",[83,30114,30115],{},[86,30116,30117],{},"插件1：微软Docker工具",[14,30119,30120],{},[40,30121],{"alt":42,"src":30122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30124,30125],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30127,30128],{},[40,30129],{"alt":42,"src":30130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[83,30132,30133],{"start":51},[86,30134,30135],{},"插件2：微软Docker远程开发工具",[14,30137,30138],{},"下面这是远程开发的插件。",[14,30140,30141],{},[40,30142],{"alt":42,"src":30143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30145,30146],{},[40,30147],{"alt":42,"src":30148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30150,30151],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30153,30154],{},[40,30155],{"alt":42,"src":30156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30158,30159],{},"安装完拓展之后，vscode进行链接：",[14,30161,30162],{},"1.按ctrl+shift+p",[14,30164,30165],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30167,30168],{},"3.选择目前运行的容器",[14,30170,30171],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30173,30174],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[120,30176,30178],{"className":23837,"code":30177,"language":23839,"meta":42,"style":42},"docker run -v 主机目录:容器目录 image-name\n",[126,30179,30180],{"__ignoreMap":42},[129,30181,30182,30184,30186,30189,30192],{"class":131,"line":132},[129,30183,26554],{"class":1977},[129,30185,27231],{"class":244},[129,30187,30188],{"class":188}," -v",[129,30190,30191],{"class":244}," 主机目录:容器目录",[129,30193,30194],{"class":244}," image-name\n",[120,30196,30198],{"className":23837,"code":30197,"language":23839,"meta":42,"style":42},"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",[126,30199,30200],{"__ignoreMap":42},[129,30201,30202,30204,30206,30209,30211,30214],{"class":131,"line":132},[129,30203,26554],{"class":1977},[129,30205,27231],{"class":244},[129,30207,30208],{"class":188}," -it",[129,30210,30188],{"class":188},[129,30212,30213],{"class":244}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[129,30215,30216],{"class":244}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30218,30219],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30221,30222],{},"查看挂载情况：",[120,30224,30226],{"className":23837,"code":30225,"language":23839,"meta":42,"style":42},"mount | grep -i project\n",[126,30227,30228],{"__ignoreMap":42},[129,30229,30230,30233,30235,30238,30240],{"class":131,"line":132},[129,30231,30232],{"class":1977},"mount",[129,30234,25110],{"class":135},[129,30236,30237],{"class":1977}," grep",[129,30239,26431],{"class":188},[129,30241,30242],{"class":244}," project\n",[14,30244,30245],{},"也可以通过ls来进行查看",[5141,30247,30248],{},"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":42,"searchDepth":51,"depth":51,"links":30250},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30107,"description":42},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30257,"title":30258,"body":30259,"description":53,"extension":54,"meta":30263,"navigation":56,"path":30265,"seo":30266,"stem":30267,"__hash__":30268},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30260,"toc":30261},[],{"title":42,"searchDepth":51,"depth":51,"links":30262},[],{"category":30264},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30258,"description":53},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30270,"title":30271,"body":30272,"description":53,"extension":54,"meta":30276,"navigation":56,"path":30277,"seo":30278,"stem":30279,"__hash__":30280},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30273,"toc":30274},[],{"title":42,"searchDepth":51,"depth":51,"links":30275},[],{"category":30264},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30271,"description":53},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30282,"title":30283,"body":30284,"description":53,"extension":54,"meta":30577,"navigation":56,"path":30578,"seo":30579,"stem":30580,"__hash__":30581},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30285,"toc":30575},[30286,30289,30297,30312,30317,30368,30371,30377,30564,30569,30572],[10,30287,30283],{"id":30288},"_1验证深度学习环境",[14,30290,30291,30292],{},"关于环境的安装，看",[20,30293,30296],{"href":30294,"rel":30295},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24],"Pytorch-->深度学习",[14,30298,30299,30300,30303,30304,30307,30308,30311],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[126,30301,30302],{},"pytorch-cuda=12.4"," 是一个“ ",[289,30305,30306],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[289,30309,30310],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30313,30314],{},[40,30315],{"alt":42,"src":30316},"\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",[120,30318,30320],{"className":23837,"code":30319,"language":23839,"meta":42,"style":42},"# 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",[126,30321,30322,30327],{"__ignoreMap":42},[129,30323,30324],{"class":131,"line":132},[129,30325,30326],{"class":198},"# CUDA 12.4\n",[129,30328,30329,30332,30334,30337,30340,30343,30346,30349,30351,30354,30357,30360,30363,30365],{"class":131,"line":51},[129,30330,30331],{"class":1977},"conda",[129,30333,23849],{"class":244},[129,30335,30336],{"class":244}," pytorch==",[129,30338,30339],{"class":188},"2.5.1",[129,30341,30342],{"class":244}," torchvision==",[129,30344,30345],{"class":188},"0.20.1",[129,30347,30348],{"class":244}," torchaudio==",[129,30350,30339],{"class":188},[129,30352,30353],{"class":244}," pytorch-cuda=",[129,30355,30356],{"class":188},"12.4",[129,30358,30359],{"class":188}," -c",[129,30361,30362],{"class":244}," pytorch",[129,30364,30359],{"class":188},[129,30366,30367],{"class":244}," nvidia\n",[14,30369,30370],{},"）：",[14,30372,30373],{},[20,30374,30375],{"href":30375,"rel":30376},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24],[120,30378,30382],{"className":30379,"code":30380,"language":30381,"meta":42,"style":42},"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",[126,30383,30384,30389,30397,30402,30412,30428,30433,30443,30480,30487,30499,30515,30520,30530,30542,30552],{"__ignoreMap":42},[129,30385,30386],{"class":131,"line":132},[129,30387,30388],{"class":198},"# 对深度学习环境进行测试\n",[129,30390,30391,30394],{"class":131,"line":51},[129,30392,30393],{"class":135},"import",[129,30395,30396],{"class":139}," torch\n",[129,30398,30399],{"class":131,"line":1194},[129,30400,30401],{"class":198},"# 查看cuda是否被激活\n",[129,30403,30404,30407,30409],{"class":131,"line":1209},[129,30405,30406],{"class":139},"flag",[129,30408,185],{"class":135},[129,30410,30411],{"class":139},"torch.cuda.is_available()\n",[129,30413,30414,30417,30419,30422,30425],{"class":131,"line":1215},[129,30415,30416],{"class":188},"print",[129,30418,140],{"class":139},[129,30420,30421],{"class":244},"\"cuda:\"",[129,30423,30424],{"class":139},", flag)   ",[129,30426,30427],{"class":198},"#返回true的话说明被激活\n",[129,30429,30430],{"class":131,"line":1229},[129,30431,30432],{"class":198},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[129,30434,30435,30438,30440],{"class":131,"line":1235},[129,30436,30437],{"class":139},"ngpu",[129,30439,185],{"class":135},[129,30441,30442],{"class":188},"1\n",[129,30444,30445,30448,30450,30453,30456,30458,30461,30464,30467,30469,30471,30473,30475,30478],{"class":131,"line":1326},[129,30446,30447],{"class":139},"device",[129,30449,185],{"class":135},[129,30451,30452],{"class":139},"torch.device(",[129,30454,30455],{"class":244},"\"cuda:0\"",[129,30457,1718],{"class":135},[129,30459,30460],{"class":139},"(torch.cuda.is_available() ",[129,30462,30463],{"class":135},"and",[129,30465,30466],{"class":139}," ngpu",[129,30468,1099],{"class":135},[129,30470,331],{"class":188},[129,30472,13729],{"class":139},[129,30474,1715],{"class":135},[129,30476,30477],{"class":244}," \"cpu\"",[129,30479,146],{"class":139},[129,30481,30482,30484],{"class":131,"line":1332},[129,30483,30416],{"class":188},[129,30485,30486],{"class":139},"(device)\n",[129,30488,30489,30491,30494,30496],{"class":131,"line":1344},[129,30490,30416],{"class":188},[129,30492,30493],{"class":139},"(torch.cuda.get_device_name(",[129,30495,331],{"class":188},[129,30497,30498],{"class":139},"))\n",[129,30500,30501,30503,30506,30508,30510,30512],{"class":131,"line":1626},[129,30502,30416],{"class":188},[129,30504,30505],{"class":139},"(torch.rand(",[129,30507,211],{"class":188},[129,30509,517],{"class":139},[129,30511,211],{"class":188},[129,30513,30514],{"class":139},").cuda())\n",[129,30516,30517],{"class":131,"line":1631},[129,30518,30519],{"class":198},"# 查看cuda和cudnn的版本\n",[129,30521,30522,30525,30527],{"class":131,"line":1637},[129,30523,30524],{"class":139},"cuda_version",[129,30526,185],{"class":135},[129,30528,30529],{"class":139},"torch.version.cuda\n",[129,30531,30532,30534,30536,30539],{"class":131,"line":1642},[129,30533,30416],{"class":188},[129,30535,140],{"class":139},[129,30537,30538],{"class":244},"\"cuda version\"",[129,30540,30541],{"class":139},",cuda_version)\n",[129,30543,30544,30547,30549],{"class":131,"line":1656},[129,30545,30546],{"class":139},"cudnn_version",[129,30548,185],{"class":135},[129,30550,30551],{"class":139},"torch.backends.cudnn.version()\n",[129,30553,30554,30556,30558,30561],{"class":131,"line":1661},[129,30555,30416],{"class":188},[129,30557,140],{"class":139},[129,30559,30560],{"class":244},"\"cudnn version\"",[129,30562,30563],{"class":139},",cudnn_version)\n",[14,30565,30566],{},[40,30567],{"alt":42,"src":30568},"\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,30570,30571],{},"cuda:0 指的是一块显卡",[5141,30573,30574],{},"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":42,"searchDepth":51,"depth":51,"links":30576},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30283,"description":53},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30583,"title":30584,"body":30585,"description":53,"extension":54,"meta":50389,"navigation":56,"path":50390,"seo":50391,"stem":50392,"__hash__":50393},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30586,"toc":50383},[30587,30590,30594,30598,30601,30606,30611,30614,30619,30624,30629,30632,30636,30641,30645,30650,30653,30658,30661,30664,30667,30670,30675,30678,30683,30688,30693,30698,30701,30705,30708,30713,31317,31322,31325,31330,31333,31336,31800,31803,31806,31809,31812,33863,33866,33871,33876,34671,34674,34679,35457,35461,37120,37124,37838,37842,37846,37851,37856,37861,37864,37869,37874,37879,37884,37889,37893,37898,39180,39185,39188,39191,39194,39349,39352,39355,40571,40576,41271,41275,41279,41284,41289,41292,41297,41302,41307,41312,41317,41322,41327,41332,41337,41342,41347,41352,41357,41362,41367,41372,41377,41382,41387,41392,41397,41402,41407,41412,41417,41422,41427,41432,41437,41442,41446,41450,41453,42931,42935,44582,44586,45280,45284,45287,45290,45834,45837,45841,45844,47241,47245,47248,47826,49613,49617,49620,50380],[10,30588,30584],{"id":30589},"_2经典神经网络",[100,30591,30593],{"id":30592},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22013,30595,30597],{"id":30596},"_211原理介绍","2.1.1.原理介绍",[14,30599,30600],{},"LeNet-5",[83,30602,30603],{},[86,30604,30605],{},"原理",[14,30607,30608],{},[40,30609],{"alt":42,"src":30610},"\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,30612,30613],{},"B是batch批次；C是channel通道",[83,30615,30616],{"start":51},[86,30617,30618],{},"网络参数详细",[14,30620,30621],{},[40,30622],{"alt":42,"src":30623},"\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,30625,30626],{},[40,30627],{"alt":42,"src":30628},"\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,30630,30631],{},"AlexNet",[83,30633,30634],{},[86,30635,30605],{},[14,30637,30638],{},[40,30639],{"alt":42,"src":30640},"\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",[83,30642,30643],{"start":51},[86,30644,30618],{},[14,30646,30647],{},[40,30648],{"alt":42,"src":30649},"\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,30651,30652],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30654,30655],{},[40,30656],{"alt":42,"src":30657},"\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,30659,30660],{},"数据处理中的图像增强操作:",[14,30662,30663],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30665,30666],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30668,30669],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30671,30672],{},[40,30673],{"alt":42,"src":30674},"\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,30676,30677],{},"提升网络精确度的方法：LRN正则化",[14,30679,30680],{},[40,30681],{"alt":42,"src":30682},"\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,30684,30685],{},[40,30686],{"alt":42,"src":30687},"\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",[83,30689,30690],{"start":1194},[86,30691,30692],{},"AlexNet的总结",[14,30694,30695],{},[40,30696],{"alt":42,"src":30697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[14,30699,30700],{},"比LeNet模型要深一丢丢",[22013,30702,30704],{"id":30703},"_212代码实现","2.1.2.代码实现",[14,30706,30707],{},"（1）LeNet",[83,30709,30710],{},[86,30711,30712],{},"模型搭建",[120,30714,30716],{"className":30379,"code":30715,"language":30381,"meta":42,"style":42},"# 导入库\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",[126,30717,30718,30723,30729,30734,30747,30752,30764,30768,30788,30793,30798,30809,30814,30833,30837,30842,30891,30903,30908,30937,30972,30999,31004,31016,31021,31041,31060,31079,31083,31088,31098,31115,31126,31141,31152,31163,31178,31193,31204,31211,31215,31229,31234,31257,31262,31267,31272,31276,31281,31286,31296],{"__ignoreMap":42},[129,30719,30720],{"class":131,"line":132},[129,30721,30722],{"class":198},"# 导入库\n",[129,30724,30725,30727],{"class":131,"line":51},[129,30726,30393],{"class":135},[129,30728,30396],{"class":139},[129,30730,30731],{"class":131,"line":1194},[129,30732,30733],{"class":198},"# 导入神经网络层\n",[129,30735,30736,30739,30742,30744],{"class":131,"line":1209},[129,30737,30738],{"class":135},"from",[129,30740,30741],{"class":139}," torch ",[129,30743,30393],{"class":135},[129,30745,30746],{"class":139}," nn\n",[129,30748,30749],{"class":131,"line":1215},[129,30750,30751],{"class":198},"# 导入展示神经网络参数的包\n",[129,30753,30754,30756,30759,30761],{"class":131,"line":1229},[129,30755,30738],{"class":135},[129,30757,30758],{"class":139}," torchsummary ",[129,30760,30393],{"class":135},[129,30762,30763],{"class":139}," summary\n",[129,30765,30766],{"class":131,"line":1235},[129,30767,2414],{"emptyLinePlaceholder":56},[129,30769,30770,30772,30775,30777,30780,30782,30785],{"class":131,"line":1326},[129,30771,14709],{"class":135},[129,30773,30774],{"class":1977}," LeNet",[129,30776,140],{"class":139},[129,30778,30779],{"class":1977},"nn",[129,30781,697],{"class":139},[129,30783,30784],{"class":1977},"Module",[129,30786,30787],{"class":139},"):\n",[129,30789,30790],{"class":131,"line":1332},[129,30791,30792],{"class":198},"    # 模型初始化:\n",[129,30794,30795],{"class":131,"line":1344},[129,30796,30797],{"class":198},"    # 定义一些网络层和激活函数\n",[129,30799,30800,30803,30806],{"class":131,"line":1626},[129,30801,30802],{"class":135},"    def",[129,30804,30805],{"class":188}," __init__",[129,30807,30808],{"class":139},"(self):\n",[129,30810,30811],{"class":131,"line":1631},[129,30812,30813],{"class":198},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[129,30815,30816,30819,30822,30825,30828,30831],{"class":131,"line":1637},[129,30817,30818],{"class":188},"        super",[129,30820,30821],{"class":139},"(LeNet,",[129,30823,30824],{"class":188},"self",[129,30826,30827],{"class":139},").",[129,30829,30830],{"class":188},"__init__",[129,30832,1990],{"class":139},[129,30834,30835],{"class":131,"line":1642},[129,30836,2414],{"emptyLinePlaceholder":56},[129,30838,30839],{"class":131,"line":1656},[129,30840,30841],{"class":198},"        # 定义网络层\n",[129,30843,30844,30847,30850,30852,30855,30858,30860,30862,30864,30867,30869,30871,30873,30876,30878,30880,30882,30885,30887,30889],{"class":131,"line":1661},[129,30845,30846],{"class":188},"        self",[129,30848,30849],{"class":139},".c1",[129,30851,185],{"class":135},[129,30853,30854],{"class":139},"nn.Conv2d(",[129,30856,30857],{"class":5231},"in_channels",[129,30859,185],{"class":135},[129,30861,357],{"class":188},[129,30863,517],{"class":139},[129,30865,30866],{"class":5231},"out_channels",[129,30868,185],{"class":135},[129,30870,483],{"class":188},[129,30872,517],{"class":139},[129,30874,30875],{"class":5231},"kernel_size",[129,30877,185],{"class":135},[129,30879,458],{"class":188},[129,30881,517],{"class":139},[129,30883,30884],{"class":5231},"padding",[129,30886,185],{"class":135},[129,30888,217],{"class":188},[129,30890,146],{"class":139},[129,30892,30893,30895,30898,30900],{"class":131,"line":1667},[129,30894,30846],{"class":188},[129,30896,30897],{"class":139},".sig",[129,30899,185],{"class":135},[129,30901,30902],{"class":139},"nn.Sigmoid()\n",[129,30904,30905],{"class":131,"line":1688},[129,30906,30907],{"class":198},"        # 定义池化\n",[129,30909,30910,30912,30915,30917,30920,30922,30924,30926,30928,30931,30933,30935],{"class":131,"line":1693},[129,30911,30846],{"class":188},[129,30913,30914],{"class":139},".s2",[129,30916,185],{"class":135},[129,30918,30919],{"class":139},"nn.AvgPool2d(",[129,30921,30875],{"class":5231},[129,30923,185],{"class":135},[129,30925,217],{"class":188},[129,30927,517],{"class":139},[129,30929,30930],{"class":5231},"stride",[129,30932,185],{"class":135},[129,30934,217],{"class":188},[129,30936,146],{"class":139},[129,30938,30939,30941,30944,30946,30948,30950,30952,30954,30956,30958,30960,30962,30964,30966,30968,30970],{"class":131,"line":1707},[129,30940,30846],{"class":188},[129,30942,30943],{"class":139},".c3",[129,30945,185],{"class":135},[129,30947,30854],{"class":139},[129,30949,30857],{"class":5231},[129,30951,185],{"class":135},[129,30953,483],{"class":188},[129,30955,517],{"class":139},[129,30957,30866],{"class":5231},[129,30959,185],{"class":135},[129,30961,740],{"class":188},[129,30963,517],{"class":139},[129,30965,30875],{"class":5231},[129,30967,185],{"class":135},[129,30969,458],{"class":188},[129,30971,146],{"class":139},[129,30973,30974,30976,30979,30981,30983,30985,30987,30989,30991,30993,30995,30997],{"class":131,"line":1712},[129,30975,30846],{"class":188},[129,30977,30978],{"class":139},".s4",[129,30980,185],{"class":135},[129,30982,30919],{"class":139},[129,30984,30875],{"class":5231},[129,30986,185],{"class":135},[129,30988,217],{"class":188},[129,30990,517],{"class":139},[129,30992,30930],{"class":5231},[129,30994,185],{"class":135},[129,30996,217],{"class":188},[129,30998,146],{"class":139},[129,31000,31001],{"class":131,"line":1741},[129,31002,31003],{"class":198},"        # 定义平展层\n",[129,31005,31006,31008,31011,31013],{"class":131,"line":1746},[129,31007,30846],{"class":188},[129,31009,31010],{"class":139},".flatten",[129,31012,185],{"class":135},[129,31014,31015],{"class":139},"nn.Flatten()\n",[129,31017,31018],{"class":131,"line":1763},[129,31019,31020],{"class":198},"        # 定义全连接层\n",[129,31022,31023,31025,31028,31030,31033,31035,31037,31039],{"class":131,"line":1768},[129,31024,30846],{"class":188},[129,31026,31027],{"class":139},".f5",[129,31029,185],{"class":135},[129,31031,31032],{"class":139},"nn.Linear(",[129,31034,4001],{"class":188},[129,31036,517],{"class":139},[129,31038,956],{"class":188},[129,31040,146],{"class":139},[129,31042,31043,31045,31048,31050,31052,31054,31056,31058],{"class":131,"line":1773},[129,31044,30846],{"class":188},[129,31046,31047],{"class":139},".f6",[129,31049,185],{"class":135},[129,31051,31032],{"class":139},[129,31053,956],{"class":188},[129,31055,517],{"class":139},[129,31057,850],{"class":188},[129,31059,146],{"class":139},[129,31061,31062,31064,31067,31069,31071,31073,31075,31077],{"class":131,"line":1778},[129,31063,30846],{"class":188},[129,31065,31066],{"class":139},".f7",[129,31068,185],{"class":135},[129,31070,31032],{"class":139},[129,31072,850],{"class":188},[129,31074,517],{"class":139},[129,31076,585],{"class":188},[129,31078,146],{"class":139},[129,31080,31081],{"class":131,"line":1792},[129,31082,2414],{"emptyLinePlaceholder":56},[129,31084,31085],{"class":131,"line":1797},[129,31086,31087],{"class":198},"    # 写工具->写前向传播\n",[129,31089,31090,31092,31095],{"class":131,"line":2591},[129,31091,30802],{"class":135},[129,31093,31094],{"class":1977}," forward",[129,31096,31097],{"class":139},"(self,x):\n",[129,31099,31100,31103,31105,31107,31110,31112],{"class":131,"line":2605},[129,31101,31102],{"class":139},"        x",[129,31104,185],{"class":135},[129,31106,30824],{"class":188},[129,31108,31109],{"class":139},".sig(",[129,31111,30824],{"class":188},[129,31113,31114],{"class":139},".c1(x))\n",[129,31116,31117,31119,31121,31123],{"class":131,"line":2613},[129,31118,31102],{"class":139},[129,31120,185],{"class":135},[129,31122,30824],{"class":188},[129,31124,31125],{"class":139},".s2(x)\n",[129,31127,31128,31130,31132,31134,31136,31138],{"class":131,"line":2618},[129,31129,31102],{"class":139},[129,31131,185],{"class":135},[129,31133,30824],{"class":188},[129,31135,31109],{"class":139},[129,31137,30824],{"class":188},[129,31139,31140],{"class":139},".c3(x))\n",[129,31142,31143,31145,31147,31149],{"class":131,"line":2624},[129,31144,31102],{"class":139},[129,31146,185],{"class":135},[129,31148,30824],{"class":188},[129,31150,31151],{"class":139},".s4(x)\n",[129,31153,31154,31156,31158,31160],{"class":131,"line":2630},[129,31155,31102],{"class":139},[129,31157,185],{"class":135},[129,31159,30824],{"class":188},[129,31161,31162],{"class":139},".flatten(x)\n",[129,31164,31165,31167,31169,31171,31173,31175],{"class":131,"line":2635},[129,31166,31102],{"class":139},[129,31168,185],{"class":135},[129,31170,30824],{"class":188},[129,31172,31109],{"class":139},[129,31174,30824],{"class":188},[129,31176,31177],{"class":139},".f5(x))\n",[129,31179,31180,31182,31184,31186,31188,31190],{"class":131,"line":7963},[129,31181,31102],{"class":139},[129,31183,185],{"class":135},[129,31185,30824],{"class":188},[129,31187,31109],{"class":139},[129,31189,30824],{"class":188},[129,31191,31192],{"class":139},".f6(x))\n",[129,31194,31195,31197,31199,31201],{"class":131,"line":7987},[129,31196,31102],{"class":139},[129,31198,185],{"class":135},[129,31200,30824],{"class":188},[129,31202,31203],{"class":139},".f7(x)\n",[129,31205,31206,31208],{"class":131,"line":7992},[129,31207,14767],{"class":135},[129,31209,31210],{"class":139}," x\n",[129,31212,31213],{"class":131,"line":7998},[129,31214,2414],{"emptyLinePlaceholder":56},[129,31216,31217,31219,31222,31224,31227],{"class":131,"line":8025},[129,31218,1545],{"class":135},[129,31220,31221],{"class":188}," __name__",[129,31223,2963],{"class":135},[129,31225,31226],{"class":244},"\"__main__\"",[129,31228,3753],{"class":139},[129,31230,31231],{"class":131,"line":8030},[129,31232,31233],{"class":198},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[129,31235,31236,31239,31241,31243,31246,31248,31251,31253,31255],{"class":131,"line":8036},[129,31237,31238],{"class":139},"    device",[129,31240,185],{"class":135},[129,31242,30452],{"class":139},[129,31244,31245],{"class":244},"\"cuda\"",[129,31247,1718],{"class":135},[129,31249,31250],{"class":139}," torch.cuda.is_available() ",[129,31252,1715],{"class":135},[129,31254,30477],{"class":244},[129,31256,146],{"class":139},[129,31258,31259],{"class":131,"line":8048},[129,31260,31261],{"class":198},"    # 如果就是想指定用cpu用下方代码:\n",[129,31263,31264],{"class":131,"line":8060},[129,31265,31266],{"class":198},"    # device=\"cpu\"\n",[129,31268,31269],{"class":131,"line":8072},[129,31270,31271],{"class":198},"    # print(device)\n",[129,31273,31274],{"class":131,"line":9731},[129,31275,2414],{"emptyLinePlaceholder":56},[129,31277,31278],{"class":131,"line":9756},[129,31279,31280],{"class":198},"    # 实例化模型\n",[129,31282,31283],{"class":131,"line":9779},[129,31284,31285],{"class":198},"    # 将模型放到设备中去运行\n",[129,31287,31288,31291,31293],{"class":131,"line":9803},[129,31289,31290],{"class":139},"    model",[129,31292,185],{"class":135},[129,31294,31295],{"class":139},"LeNet().to(device)\n",[129,31297,31298,31301,31304,31306,31308,31310,31312,31314],{"class":131,"line":9808},[129,31299,31300],{"class":188},"    print",[129,31302,31303],{"class":139},"(summary(model,(",[129,31305,357],{"class":188},[129,31307,517],{"class":139},[129,31309,1040],{"class":188},[129,31311,517],{"class":139},[129,31313,1040],{"class":188},[129,31315,31316],{"class":139},")))\n",[14,31318,31319],{},[40,31320],{"alt":42,"src":31321},"\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,31323,31324],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[83,31326,31327],{"start":51},[86,31328,31329],{},"训练",[14,31331,31332],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31334,31335],{},"在训练之前可以将数据展示看一下",[120,31337,31339],{"className":30379,"code":31338,"language":30381,"meta":42,"style":42},"# 建立画图的函数，用于展示数据\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",[126,31340,31341,31346,31351,31363,31375,31388,31393,31405,31410,31422,31427,31439,31443,31447,31468,31480,31485,31506,31517,31521,31526,31544,31555,31560,31571,31576,31587,31591,31596,31611,31624,31629,31634,31647,31660,31673,31678,31682,31687,31707,31724,31744,31757,31770,31780,31795],{"__ignoreMap":42},[129,31342,31343],{"class":131,"line":132},[129,31344,31345],{"class":198},"# 建立画图的函数，用于展示数据\n",[129,31347,31348],{"class":131,"line":51},[129,31349,31350],{"class":198},"# torchvision中包含很多内置的数据集\n",[129,31352,31353,31355,31358,31360],{"class":131,"line":1194},[129,31354,30738],{"class":135},[129,31356,31357],{"class":139}," sklearn.externals.array_api_compat.torch ",[129,31359,30393],{"class":135},[129,31361,31362],{"class":139}," squeeze\n",[129,31364,31365,31367,31370,31372],{"class":131,"line":1209},[129,31366,30738],{"class":135},[129,31368,31369],{"class":139}," torchvision.datasets ",[129,31371,30393],{"class":135},[129,31373,31374],{"class":139}," FashionMNIST\n",[129,31376,31377,31379,31382,31385],{"class":131,"line":1215},[129,31378,30393],{"class":135},[129,31380,31381],{"class":139}," numpy ",[129,31383,31384],{"class":135},"as",[129,31386,31387],{"class":139}," np\n",[129,31389,31390],{"class":131,"line":1229},[129,31391,31392],{"class":198},"# 引入处理数据集的包\n",[129,31394,31395,31397,31400,31402],{"class":131,"line":1235},[129,31396,30738],{"class":135},[129,31398,31399],{"class":139}," torchvision ",[129,31401,30393],{"class":135},[129,31403,31404],{"class":139}," transforms\n",[129,31406,31407],{"class":131,"line":1326},[129,31408,31409],{"class":198},"# 从torch库中引入数据处理的包\n",[129,31411,31412,31414,31417,31419],{"class":131,"line":1332},[129,31413,30393],{"class":135},[129,31415,31416],{"class":139}," torch.utils.data ",[129,31418,31384],{"class":135},[129,31420,31421],{"class":139}," Data\n",[129,31423,31424],{"class":131,"line":1344},[129,31425,31426],{"class":198},"# 导入画图的库\n",[129,31428,31429,31431,31434,31436],{"class":131,"line":1626},[129,31430,30393],{"class":135},[129,31432,31433],{"class":139}," matplotlib.pyplot ",[129,31435,31384],{"class":135},[129,31437,31438],{"class":139}," plt\n",[129,31440,31441],{"class":131,"line":1631},[129,31442,2414],{"emptyLinePlaceholder":56},[129,31444,31445],{"class":131,"line":1637},[129,31446,2414],{"emptyLinePlaceholder":56},[129,31448,31449,31452,31454,31457,31460,31462,31465],{"class":131,"line":1642},[129,31450,31451],{"class":139},"train_data",[129,31453,185],{"class":135},[129,31455,31456],{"class":139},"FashionMNIST(",[129,31458,31459],{"class":5231},"root",[129,31461,185],{"class":135},[129,31463,31464],{"class":244},"'.\u002Fdata'",[129,31466,31467],{"class":139},",\n",[129,31469,31470,31473,31475,31478],{"class":131,"line":1656},[129,31471,31472],{"class":5231},"                        train",[129,31474,185],{"class":135},[129,31476,31477],{"class":188},"True",[129,31479,31467],{"class":139},[129,31481,31482],{"class":131,"line":1661},[129,31483,31484],{"class":198},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[129,31486,31487,31490,31492,31495,31498,31500,31503],{"class":131,"line":1667},[129,31488,31489],{"class":5231},"                        transform",[129,31491,185],{"class":135},[129,31493,31494],{"class":139},"transforms.Compose([transforms.Resize(",[129,31496,31497],{"class":5231},"size",[129,31499,185],{"class":135},[129,31501,31502],{"class":188},"224",[129,31504,31505],{"class":139},"),transforms.ToTensor()]),\n",[129,31507,31508,31511,31513,31515],{"class":131,"line":1688},[129,31509,31510],{"class":5231},"                        download",[129,31512,185],{"class":135},[129,31514,31477],{"class":188},[129,31516,146],{"class":139},[129,31518,31519],{"class":131,"line":1693},[129,31520,2414],{"emptyLinePlaceholder":56},[129,31522,31523],{"class":131,"line":1707},[129,31524,31525],{"class":198},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[129,31527,31528,31531,31533,31536,31539,31541],{"class":131,"line":1712},[129,31529,31530],{"class":139},"train_loader",[129,31532,185],{"class":135},[129,31534,31535],{"class":139},"Data.DataLoader(",[129,31537,31538],{"class":5231},"dataset",[129,31540,185],{"class":135},[129,31542,31543],{"class":139},"train_data,\n",[129,31545,31546,31549,31551,31553],{"class":131,"line":1741},[129,31547,31548],{"class":5231},"                             batch_size",[129,31550,185],{"class":135},[129,31552,343],{"class":188},[129,31554,31467],{"class":139},[129,31556,31557],{"class":131,"line":1746},[129,31558,31559],{"class":198},"                             # 数据是否打乱\n",[129,31561,31562,31565,31567,31569],{"class":131,"line":1763},[129,31563,31564],{"class":5231},"                             shuffle",[129,31566,185],{"class":135},[129,31568,31477],{"class":188},[129,31570,31467],{"class":139},[129,31572,31573],{"class":131,"line":1768},[129,31574,31575],{"class":198},"                             # 规定加载数据的进程\n",[129,31577,31578,31581,31583,31585],{"class":131,"line":1773},[129,31579,31580],{"class":5231},"                             num_workers",[129,31582,185],{"class":135},[129,31584,331],{"class":188},[129,31586,146],{"class":139},[129,31588,31589],{"class":131,"line":1778},[129,31590,2414],{"emptyLinePlaceholder":56},[129,31592,31593],{"class":131,"line":1792},[129,31594,31595],{"class":198},"# 获得一个batch的数据\n",[129,31597,31598,31600,31603,31605,31608],{"class":131,"line":1797},[129,31599,3039],{"class":135},[129,31601,31602],{"class":139}," step,(b_x,b_y) ",[129,31604,26044],{"class":135},[129,31606,31607],{"class":188}," enumerate",[129,31609,31610],{"class":139},"(train_loader):\n",[129,31612,31613,31615,31618,31620,31622],{"class":131,"line":2591},[129,31614,3115],{"class":135},[129,31616,31617],{"class":139}," step ",[129,31619,1099],{"class":135},[129,31621,4107],{"class":188},[129,31623,3753],{"class":139},[129,31625,31626],{"class":131,"line":2605},[129,31627,31628],{"class":135},"        break\n",[129,31630,31631],{"class":131,"line":2613},[129,31632,31633],{"class":198},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[129,31635,31636,31639,31641,31644],{"class":131,"line":2618},[129,31637,31638],{"class":139},"batch_x",[129,31640,185],{"class":135},[129,31642,31643],{"class":139},"b_x.squeeze().numpy()  ",[129,31645,31646],{"class":198},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[129,31648,31649,31652,31654,31657],{"class":131,"line":2624},[129,31650,31651],{"class":139},"batch_y",[129,31653,185],{"class":135},[129,31655,31656],{"class":139},"b_y.numpy()   ",[129,31658,31659],{"class":198},"#将张量转换成功numpy数组\n",[129,31661,31662,31665,31667,31670],{"class":131,"line":2630},[129,31663,31664],{"class":139},"class_label",[129,31666,185],{"class":135},[129,31668,31669],{"class":139},"train_data.classes  ",[129,31671,31672],{"class":198},"#训练集标签\n",[129,31674,31675],{"class":131,"line":2635},[129,31676,31677],{"class":198},"# print(class_label)\n",[129,31679,31680],{"class":131,"line":7963},[129,31681,2414],{"emptyLinePlaceholder":56},[129,31683,31684],{"class":131,"line":7987},[129,31685,31686],{"class":198},"# 可视化一个batch的图像\n",[129,31688,31689,31692,31695,31697,31699,31701,31703,31705],{"class":131,"line":7992},[129,31690,31691],{"class":139},"plt.figure(",[129,31693,31694],{"class":5231},"figsize",[129,31696,185],{"class":135},[129,31698,140],{"class":139},[129,31700,637],{"class":188},[129,31702,517],{"class":139},[129,31704,458],{"class":188},[129,31706,30498],{"class":139},[129,31708,31709,31711,31714,31716,31719,31721],{"class":131,"line":7998},[129,31710,3039],{"class":135},[129,31712,31713],{"class":139}," ii ",[129,31715,26044],{"class":135},[129,31717,31718],{"class":139}," np.arange(",[129,31720,7373],{"class":188},[129,31722,31723],{"class":139},"(batch_y)):\n",[129,31725,31726,31729,31731,31733,31735,31738,31740,31742],{"class":131,"line":8025},[129,31727,31728],{"class":139},"    plt.subplot(",[129,31730,432],{"class":188},[129,31732,517],{"class":139},[129,31734,740],{"class":188},[129,31736,31737],{"class":139},",ii ",[129,31739,620],{"class":135},[129,31741,25119],{"class":188},[129,31743,146],{"class":139},[129,31745,31746,31749,31752,31754],{"class":131,"line":8030},[129,31747,31748],{"class":139},"    plt.imshow(batch_x[ii,:,:],",[129,31750,31751],{"class":5231},"cmap",[129,31753,185],{"class":135},[129,31755,31756],{"class":139},"plt.cm.gray)\n",[129,31758,31759,31762,31764,31766,31768],{"class":131,"line":8036},[129,31760,31761],{"class":139},"    plt.title(class_label[batch_y[ii]],",[129,31763,31497],{"class":5231},[129,31765,185],{"class":135},[129,31767,585],{"class":188},[129,31769,146],{"class":139},[129,31771,31772,31775,31778],{"class":131,"line":8048},[129,31773,31774],{"class":139},"    plt.axis(",[129,31776,31777],{"class":244},"\"off\"",[129,31779,146],{"class":139},[129,31781,31782,31785,31788,31790,31793],{"class":131,"line":8060},[129,31783,31784],{"class":139},"    plt.subplots_adjust(",[129,31786,31787],{"class":5231},"wspace",[129,31789,185],{"class":135},[129,31791,31792],{"class":188},"0.05",[129,31794,146],{"class":139},[129,31796,31797],{"class":131,"line":8072},[129,31798,31799],{"class":139},"plt.show()\n",[14,31801,31802],{},"用matplotlib进行展示的过程可以后续再补",[14,31804,31805],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31807,31808],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31810,31811],{},"模型训练：",[120,31813,31815],{"className":30379,"code":31814,"language":30381,"meta":42,"style":42},"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",[126,31816,31817,31824,31831,31835,31847,31853,31864,31874,31884,31894,31904,31909,31921,31931,31935,31939,31944,31955,31968,31979,31996,32007,32046,32062,32074,32085,32090,32101,32117,32128,32139,32150,32157,32161,32166,32171,32175,32180,32190,32211,32215,32219,32224,32229,32234,32254,32258,32263,32273,32277,32282,32291,32296,32301,32306,32316,32320,32324,32329,32334,32344,32349,32359,32364,32373,32378,32387,32392,32401,32405,32410,32420,32424,32428,32433,32448,32476,32491,32495,32500,32505,32514,32519,32528,32533,32542,32547,32556,32561,32570,32575,32584,32589,32602,32607,32617,32622,32632,32638,32644,32650,32656,32667,32673,32693,32699,32710,32716,32722,32728,32734,32740,32746,32752,32772,32778,32794,32800,32814,32820,32835,32841,32850,32856,32865,32871,32877,32886,32892,32903,32909,32928,32934,32945,32951,32971,32987,32993,33007,33013,33019,33030,33036,33042,33052,33058,33069,33075,33085,33090,33096,33145,33192,33197,33203,33222,33228,33248,33254,33260,33270,33275,33281,33297,33342,33348,33354,33360,33371,33377,33383,33389,33407,33421,33430,33439,33448,33457,33463,33469,33477,33482,33488,33499,33505,33525,33531,33537,33543,33560,33566,33572,33578,33584,33590,33617,33641,33647,33653,33659,33670,33681,33687,33704,33727,33750,33756,33761,33770,33780,33786,33791,33797,33810,33816,33827,33838,33857],{"__ignoreMap":42},[129,31818,31819,31821],{"class":131,"line":132},[129,31820,30393],{"class":135},[129,31822,31823],{"class":139}," copy\n",[129,31825,31826,31828],{"class":131,"line":51},[129,31827,30393],{"class":135},[129,31829,31830],{"class":139}," time\n",[129,31832,31833],{"class":131,"line":1194},[129,31834,2414],{"emptyLinePlaceholder":56},[129,31836,31837,31839,31842,31844],{"class":131,"line":1209},[129,31838,30393],{"class":135},[129,31840,31841],{"class":139}," pandas ",[129,31843,31384],{"class":135},[129,31845,31846],{"class":139}," pd\n",[129,31848,31849,31851],{"class":131,"line":1215},[129,31850,30393],{"class":135},[129,31852,30396],{"class":139},[129,31854,31855,31857,31859,31861],{"class":131,"line":1229},[129,31856,30738],{"class":135},[129,31858,31416],{"class":139},[129,31860,30393],{"class":135},[129,31862,31863],{"class":139}," Dataset\n",[129,31865,31866,31868,31870,31872],{"class":131,"line":1235},[129,31867,30738],{"class":135},[129,31869,31369],{"class":139},[129,31871,30393],{"class":135},[129,31873,31374],{"class":139},[129,31875,31876,31878,31880,31882],{"class":131,"line":1326},[129,31877,30738],{"class":135},[129,31879,31399],{"class":139},[129,31881,30393],{"class":135},[129,31883,31404],{"class":139},[129,31885,31886,31888,31890,31892],{"class":131,"line":1332},[129,31887,30393],{"class":135},[129,31889,31416],{"class":139},[129,31891,31384],{"class":135},[129,31893,31421],{"class":139},[129,31895,31896,31898,31900,31902],{"class":131,"line":1344},[129,31897,30393],{"class":135},[129,31899,31433],{"class":139},[129,31901,31384],{"class":135},[129,31903,31438],{"class":139},[129,31905,31906],{"class":131,"line":1626},[129,31907,31908],{"class":198},"# 导入模型\n",[129,31910,31911,31913,31916,31918],{"class":131,"line":1631},[129,31912,30738],{"class":135},[129,31914,31915],{"class":139}," model ",[129,31917,30393],{"class":135},[129,31919,31920],{"class":139}," LeNet\n",[129,31922,31923,31925,31927,31929],{"class":131,"line":1637},[129,31924,30738],{"class":135},[129,31926,30741],{"class":139},[129,31928,30393],{"class":135},[129,31930,30746],{"class":139},[129,31932,31933],{"class":131,"line":1642},[129,31934,2414],{"emptyLinePlaceholder":56},[129,31936,31937],{"class":131,"line":1656},[129,31938,2414],{"emptyLinePlaceholder":56},[129,31940,31941],{"class":131,"line":1661},[129,31942,31943],{"class":198},"# 处理训练集与验证集函数--->划分数据集\n",[129,31945,31946,31949,31952],{"class":131,"line":1667},[129,31947,31948],{"class":135},"def",[129,31950,31951],{"class":1977}," train_val_data_process",[129,31953,31954],{"class":139},"():\n",[129,31956,31957,31960,31962,31964,31966],{"class":131,"line":1688},[129,31958,31959],{"class":139},"    train_data",[129,31961,185],{"class":135},[129,31963,31456],{"class":139},[129,31965,31464],{"class":244},[129,31967,31467],{"class":139},[129,31969,31970,31973,31975,31977],{"class":131,"line":1693},[129,31971,31972],{"class":5231},"                            train",[129,31974,185],{"class":135},[129,31976,31477],{"class":188},[129,31978,31467],{"class":139},[129,31980,31981,31984,31986,31988,31990,31992,31994],{"class":131,"line":1707},[129,31982,31983],{"class":5231},"                            transform",[129,31985,185],{"class":135},[129,31987,31494],{"class":139},[129,31989,31497],{"class":5231},[129,31991,185],{"class":135},[129,31993,1040],{"class":188},[129,31995,31505],{"class":139},[129,31997,31998,32001,32003,32005],{"class":131,"line":1712},[129,31999,32000],{"class":5231},"                            download",[129,32002,185],{"class":135},[129,32004,31477],{"class":188},[129,32006,146],{"class":139},[129,32008,32009,32012,32014,32017,32020,32022,32025,32027,32029,32032,32034,32036,32039,32041,32043],{"class":131,"line":1741},[129,32010,32011],{"class":139},"    train_data,val_data",[129,32013,185],{"class":135},[129,32015,32016],{"class":139},"Data.random_split(train_data,[",[129,32018,32019],{"class":188},"round",[129,32021,140],{"class":139},[129,32023,32024],{"class":188},"0.8",[129,32026,594],{"class":135},[129,32028,7373],{"class":188},[129,32030,32031],{"class":139},"(train_data)),",[129,32033,32019],{"class":188},[129,32035,140],{"class":139},[129,32037,32038],{"class":188},"0.2",[129,32040,594],{"class":135},[129,32042,7373],{"class":188},[129,32044,32045],{"class":139},"(train_data))])\n",[129,32047,32048,32051,32053,32056,32058,32060],{"class":131,"line":1746},[129,32049,32050],{"class":139},"    train_dataloader ",[129,32052,185],{"class":135},[129,32054,32055],{"class":139}," Data.DataLoader(",[129,32057,31538],{"class":5231},[129,32059,185],{"class":135},[129,32061,31543],{"class":139},[129,32063,32064,32067,32069,32072],{"class":131,"line":1763},[129,32065,32066],{"class":5231},"                                       batch_size",[129,32068,185],{"class":135},[129,32070,32071],{"class":188},"128",[129,32073,31467],{"class":139},[129,32075,32076,32079,32081,32083],{"class":131,"line":1768},[129,32077,32078],{"class":5231},"                                       shuffle",[129,32080,185],{"class":135},[129,32082,31477],{"class":188},[129,32084,31467],{"class":139},[129,32086,32087],{"class":131,"line":1773},[129,32088,32089],{"class":198},"                                       # 规定8个进程\n",[129,32091,32092,32095,32097,32099],{"class":131,"line":1778},[129,32093,32094],{"class":5231},"                                       num_workers",[129,32096,185],{"class":135},[129,32098,534],{"class":188},[129,32100,146],{"class":139},[129,32102,32103,32106,32108,32110,32112,32114],{"class":131,"line":1792},[129,32104,32105],{"class":139},"    val_dataloader",[129,32107,185],{"class":135},[129,32109,31535],{"class":139},[129,32111,31538],{"class":5231},[129,32113,185],{"class":135},[129,32115,32116],{"class":139},"val_data,\n",[129,32118,32119,32122,32124,32126],{"class":131,"line":1797},[129,32120,32121],{"class":5231},"                                   batch_size",[129,32123,185],{"class":135},[129,32125,32071],{"class":188},[129,32127,31467],{"class":139},[129,32129,32130,32133,32135,32137],{"class":131,"line":2591},[129,32131,32132],{"class":5231},"                                   shuffle",[129,32134,185],{"class":135},[129,32136,31477],{"class":188},[129,32138,31467],{"class":139},[129,32140,32141,32144,32146,32148],{"class":131,"line":2605},[129,32142,32143],{"class":5231},"                                   num_workers",[129,32145,185],{"class":135},[129,32147,534],{"class":188},[129,32149,146],{"class":139},[129,32151,32152,32154],{"class":131,"line":2613},[129,32153,4104],{"class":135},[129,32155,32156],{"class":139}," train_dataloader,val_dataloader\n",[129,32158,32159],{"class":131,"line":2618},[129,32160,2414],{"emptyLinePlaceholder":56},[129,32162,32163],{"class":131,"line":2624},[129,32164,32165],{"class":198},"# 验证是否出错\n",[129,32167,32168],{"class":131,"line":2630},[129,32169,32170],{"class":198},"# train_val_data_process()\n",[129,32172,32173],{"class":131,"line":2635},[129,32174,2414],{"emptyLinePlaceholder":56},[129,32176,32177],{"class":131,"line":7963},[129,32178,32179],{"class":198},"# 定义模型训练函数\n",[129,32181,32182,32184,32187],{"class":131,"line":7987},[129,32183,31948],{"class":135},[129,32185,32186],{"class":1977}," train_model_process",[129,32188,32189],{"class":139},"(model,train_dataloader,val_dataloader,num_epochs):\n",[129,32191,32192,32194,32196,32198,32200,32202,32204,32206,32209],{"class":131,"line":7992},[129,32193,31238],{"class":139},[129,32195,185],{"class":135},[129,32197,30452],{"class":139},[129,32199,31245],{"class":244},[129,32201,1718],{"class":135},[129,32203,31250],{"class":139},[129,32205,1715],{"class":135},[129,32207,32208],{"class":244}," 'cpu'",[129,32210,146],{"class":139},[129,32212,32213],{"class":131,"line":7998},[129,32214,2414],{"emptyLinePlaceholder":56},[129,32216,32217],{"class":131,"line":8025},[129,32218,2414],{"emptyLinePlaceholder":56},[129,32220,32221],{"class":131,"line":8030},[129,32222,32223],{"class":198},"    # 定义优化器\n",[129,32225,32226],{"class":131,"line":8036},[129,32227,32228],{"class":198},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[129,32230,32231],{"class":131,"line":8048},[129,32232,32233],{"class":198},"    # lr为学习率\n",[129,32235,32236,32239,32241,32244,32247,32249,32252],{"class":131,"line":8060},[129,32237,32238],{"class":139},"    optimizer",[129,32240,185],{"class":135},[129,32242,32243],{"class":139},"torch.optim.Adam(model.parameters(),",[129,32245,32246],{"class":5231},"lr",[129,32248,185],{"class":135},[129,32250,32251],{"class":188},"0.001",[129,32253,146],{"class":139},[129,32255,32256],{"class":131,"line":8072},[129,32257,2414],{"emptyLinePlaceholder":56},[129,32259,32260],{"class":131,"line":9731},[129,32261,32262],{"class":198},"    # 定义损失函数使用交叉熵损失函数\n",[129,32264,32265,32268,32270],{"class":131,"line":9756},[129,32266,32267],{"class":139},"    criterion",[129,32269,185],{"class":135},[129,32271,32272],{"class":139},"nn.CrossEntropyLoss()\n",[129,32274,32275],{"class":131,"line":9779},[129,32276,2414],{"emptyLinePlaceholder":56},[129,32278,32279],{"class":131,"line":9803},[129,32280,32281],{"class":198},"    # 将模型放到GPU中进行训练\n",[129,32283,32284,32286,32288],{"class":131,"line":9808},[129,32285,31290],{"class":139},[129,32287,185],{"class":135},[129,32289,32290],{"class":139},"model.to(device)\n",[129,32292,32293],{"class":131,"line":9813},[129,32294,32295],{"class":198},"    # 复制当前模型的参数\n",[129,32297,32298],{"class":131,"line":9818},[129,32299,32300],{"class":198},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[129,32302,32303],{"class":131,"line":9827},[129,32304,32305],{"class":198},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[129,32307,32308,32311,32313],{"class":131,"line":9832},[129,32309,32310],{"class":139},"    best_model_wts",[129,32312,185],{"class":135},[129,32314,32315],{"class":139},"copy.deepcopy(model.state_dict())\n",[129,32317,32318],{"class":131,"line":9838},[129,32319,2414],{"emptyLinePlaceholder":56},[129,32321,32322],{"class":131,"line":9859},[129,32323,2414],{"emptyLinePlaceholder":56},[129,32325,32326],{"class":131,"line":9865},[129,32327,32328],{"class":198},"    # 初始化参数\n",[129,32330,32331],{"class":131,"line":9879},[129,32332,32333],{"class":198},"    # 最高准确度\n",[129,32335,32336,32339,32341],{"class":131,"line":9885},[129,32337,32338],{"class":139},"    best_acc",[129,32340,185],{"class":135},[129,32342,32343],{"class":188},"0.0\n",[129,32345,32346],{"class":131,"line":9912},[129,32347,32348],{"class":198},"    # 训练集损失列表\n",[129,32350,32351,32354,32356],{"class":131,"line":9921},[129,32352,32353],{"class":139},"    train_loss_all",[129,32355,185],{"class":135},[129,32357,32358],{"class":139},"[]\n",[129,32360,32361],{"class":131,"line":9927},[129,32362,32363],{"class":198},"    # 验证集函数列表\n",[129,32365,32366,32369,32371],{"class":131,"line":9935},[129,32367,32368],{"class":139},"    val_loss_all",[129,32370,185],{"class":135},[129,32372,32358],{"class":139},[129,32374,32375],{"class":131,"line":9940},[129,32376,32377],{"class":198},"    # 训练集准确度列表\n",[129,32379,32380,32383,32385],{"class":131,"line":16619},[129,32381,32382],{"class":139},"    train_acc_all",[129,32384,185],{"class":135},[129,32386,32358],{"class":139},[129,32388,32389],{"class":131,"line":16625},[129,32390,32391],{"class":198},"    # 验证集准确度列表\n",[129,32393,32394,32397,32399],{"class":131,"line":16648},[129,32395,32396],{"class":139},"    val_acc_all",[129,32398,185],{"class":135},[129,32400,32358],{"class":139},[129,32402,32403],{"class":131,"line":16654},[129,32404,2414],{"emptyLinePlaceholder":56},[129,32406,32407],{"class":131,"line":16677},[129,32408,32409],{"class":198},"    # 保存当前时间--->方便看每轮训练的时间\n",[129,32411,32412,32415,32417],{"class":131,"line":16691},[129,32413,32414],{"class":139},"    since",[129,32416,185],{"class":135},[129,32418,32419],{"class":139},"time.time()\n",[129,32421,32422],{"class":131,"line":16711},[129,32423,2414],{"emptyLinePlaceholder":56},[129,32425,32426],{"class":131,"line":16717},[129,32427,2414],{"emptyLinePlaceholder":56},[129,32429,32430],{"class":131,"line":16728},[129,32431,32432],{"class":198},"    # 准备工作完成--->开始训练模型\n",[129,32434,32435,32437,32440,32442,32445],{"class":131,"line":16751},[129,32436,3215],{"class":135},[129,32438,32439],{"class":139}," epoch ",[129,32441,26044],{"class":135},[129,32443,32444],{"class":188}," range",[129,32446,32447],{"class":139},"(num_epochs):\n",[129,32449,32450,32453,32455,32458,32461,32463,32465,32467,32470,32472,32474],{"class":131,"line":16773},[129,32451,32452],{"class":188},"        print",[129,32454,140],{"class":139},[129,32456,32457],{"class":244},"\"Epoch ",[129,32459,32460],{"class":188},"{}",[129,32462,723],{"class":244},[129,32464,32460],{"class":188},[129,32466,390],{"class":244},[129,32468,32469],{"class":139},".format(epoch,num_epochs",[129,32471,671],{"class":135},[129,32473,357],{"class":188},[129,32475,30498],{"class":139},[129,32477,32478,32480,32482,32485,32487,32489],{"class":131,"line":16778},[129,32479,32452],{"class":188},[129,32481,140],{"class":139},[129,32483,32484],{"class":244},"\"-\"",[129,32486,594],{"class":135},[129,32488,585],{"class":188},[129,32490,146],{"class":139},[129,32492,32493],{"class":131,"line":16784},[129,32494,2414],{"emptyLinePlaceholder":56},[129,32496,32497],{"class":131,"line":16798},[129,32498,32499],{"class":198},"        # 初始化参数\n",[129,32501,32502],{"class":131,"line":16811},[129,32503,32504],{"class":198},"        # 训练集损失函数\n",[129,32506,32507,32510,32512],{"class":131,"line":16816},[129,32508,32509],{"class":139},"        train_loss",[129,32511,185],{"class":135},[129,32513,32343],{"class":188},[129,32515,32516],{"class":131,"line":16830},[129,32517,32518],{"class":198},"        # 训练集准确度\n",[129,32520,32521,32524,32526],{"class":131,"line":16835},[129,32522,32523],{"class":139},"        train_corrects",[129,32525,185],{"class":135},[129,32527,3099],{"class":188},[129,32529,32530],{"class":131,"line":16841},[129,32531,32532],{"class":198},"        # 验证集损失函数\n",[129,32534,32535,32538,32540],{"class":131,"line":16846},[129,32536,32537],{"class":139},"        val_loss",[129,32539,185],{"class":135},[129,32541,32343],{"class":188},[129,32543,32544],{"class":131,"line":16860},[129,32545,32546],{"class":198},"        # 验证集准确度\n",[129,32548,32549,32552,32554],{"class":131,"line":16865},[129,32550,32551],{"class":139},"        val_corrects",[129,32553,185],{"class":135},[129,32555,3099],{"class":188},[129,32557,32558],{"class":131,"line":16870},[129,32559,32560],{"class":198},"        # 训练集样本数量\n",[129,32562,32563,32566,32568],{"class":131,"line":16884},[129,32564,32565],{"class":139},"        train_num",[129,32567,185],{"class":135},[129,32569,3099],{"class":188},[129,32571,32572],{"class":131,"line":16896},[129,32573,32574],{"class":198},"        # 验证集样本数量\n",[129,32576,32577,32580,32582],{"class":131,"line":16901},[129,32578,32579],{"class":139},"        val_num",[129,32581,185],{"class":135},[129,32583,3099],{"class":188},[129,32585,32586],{"class":131,"line":16914},[129,32587,32588],{"class":198},"        # 将数据放到设备,并开始训练\n",[129,32590,32591,32593,32595,32597,32599],{"class":131,"line":16919},[129,32592,3417],{"class":135},[129,32594,31602],{"class":139},[129,32596,26044],{"class":135},[129,32598,31607],{"class":188},[129,32600,32601],{"class":139},"(train_dataloader):\n",[129,32603,32604],{"class":131,"line":16924},[129,32605,32606],{"class":198},"            # 将特征放入到训练设备\n",[129,32608,32609,32612,32614],{"class":131,"line":16929},[129,32610,32611],{"class":139},"            b_x",[129,32613,185],{"class":135},[129,32615,32616],{"class":139},"b_x.to(device)\n",[129,32618,32619],{"class":131,"line":16942},[129,32620,32621],{"class":198},"            # 将标签放入到训练设备当中\n",[129,32623,32624,32627,32629],{"class":131,"line":16947},[129,32625,32626],{"class":139},"            b_y",[129,32628,185],{"class":135},[129,32630,32631],{"class":139},"b_y.to(device)\n",[129,32633,32635],{"class":131,"line":32634},98,[129,32636,32637],{"class":198},"            # 设置模型为训练模式\n",[129,32639,32641],{"class":131,"line":32640},99,[129,32642,32643],{"class":139},"            model.train()\n",[129,32645,32647],{"class":131,"line":32646},100,[129,32648,32649],{"class":198},"            # 将数据放到模型当中,开始前向传播\n",[129,32651,32653],{"class":131,"line":32652},101,[129,32654,32655],{"class":198},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[129,32657,32659,32662,32664],{"class":131,"line":32658},102,[129,32660,32661],{"class":139},"            output",[129,32663,185],{"class":135},[129,32665,32666],{"class":139},"model(b_x)\n",[129,32668,32670],{"class":131,"line":32669},103,[129,32671,32672],{"class":198},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[129,32674,32676,32679,32681,32684,32687,32689,32691],{"class":131,"line":32675},104,[129,32677,32678],{"class":139},"            pre_lab",[129,32680,185],{"class":135},[129,32682,32683],{"class":139},"torch.argmax(output,",[129,32685,32686],{"class":5231},"dim",[129,32688,185],{"class":135},[129,32690,357],{"class":188},[129,32692,146],{"class":139},[129,32694,32696],{"class":131,"line":32695},105,[129,32697,32698],{"class":198},"            # 计算每一个batch的损失函数\n",[129,32700,32702,32705,32707],{"class":131,"line":32701},106,[129,32703,32704],{"class":139},"            loss",[129,32706,185],{"class":135},[129,32708,32709],{"class":139},"criterion(output,b_y)\n",[129,32711,32713],{"class":131,"line":32712},107,[129,32714,32715],{"class":198},"            # 将梯度初始化为0\n",[129,32717,32719],{"class":131,"line":32718},108,[129,32720,32721],{"class":139},"            optimizer.zero_grad()\n",[129,32723,32725],{"class":131,"line":32724},109,[129,32726,32727],{"class":198},"            # 梯度置为0后再进行反向传播\n",[129,32729,32731],{"class":131,"line":32730},110,[129,32732,32733],{"class":139},"            loss.backward()\n",[129,32735,32737],{"class":131,"line":32736},111,[129,32738,32739],{"class":198},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[129,32741,32743],{"class":131,"line":32742},112,[129,32744,32745],{"class":139},"            optimizer.step()\n",[129,32747,32749],{"class":131,"line":32748},113,[129,32750,32751],{"class":198},"            # loss.item()指的是batch的平均损失\n",[129,32753,32755,32758,32760,32763,32765,32768,32770],{"class":131,"line":32754},114,[129,32756,32757],{"class":139},"            train_loss",[129,32759,9492],{"class":135},[129,32761,32762],{"class":139},"loss.item()",[129,32764,594],{"class":135},[129,32766,32767],{"class":139},"b_x.size(",[129,32769,331],{"class":188},[129,32771,146],{"class":139},[129,32773,32775],{"class":131,"line":32774},115,[129,32776,32777],{"class":198},"            # 计算每个批次中正确预测的数量\n",[129,32779,32781,32784,32786,32789,32791],{"class":131,"line":32780},116,[129,32782,32783],{"class":139},"            train_corrects",[129,32785,9492],{"class":135},[129,32787,32788],{"class":139},"torch.sum(pre_lab",[129,32790,2963],{"class":135},[129,32792,32793],{"class":139},"b_y.data)\n",[129,32795,32797],{"class":131,"line":32796},117,[129,32798,32799],{"class":198},"            # 计算目前为止一共处理了多少样本\n",[129,32801,32803,32806,32808,32810,32812],{"class":131,"line":32802},118,[129,32804,32805],{"class":139},"            train_num",[129,32807,9492],{"class":135},[129,32809,32767],{"class":139},[129,32811,331],{"class":188},[129,32813,146],{"class":139},[129,32815,32817],{"class":131,"line":32816},119,[129,32818,32819],{"class":198},"        # 验证数据\n",[129,32821,32823,32825,32828,32830,32832],{"class":131,"line":32822},120,[129,32824,3417],{"class":135},[129,32826,32827],{"class":139}," step ,(b_x,b_y) ",[129,32829,26044],{"class":135},[129,32831,31607],{"class":188},[129,32833,32834],{"class":139},"(val_dataloader):\n",[129,32836,32838],{"class":131,"line":32837},121,[129,32839,32840],{"class":198},"            # 将特征放到验证设备当中\n",[129,32842,32844,32846,32848],{"class":131,"line":32843},122,[129,32845,32611],{"class":139},[129,32847,185],{"class":135},[129,32849,32616],{"class":139},[129,32851,32853],{"class":131,"line":32852},123,[129,32854,32855],{"class":198},"            # 将标签放到放到训练设备当中\n",[129,32857,32859,32861,32863],{"class":131,"line":32858},124,[129,32860,32626],{"class":139},[129,32862,185],{"class":135},[129,32864,32631],{"class":139},[129,32866,32868],{"class":131,"line":32867},125,[129,32869,32870],{"class":198},"            # 开启验证模式，设置模型为评估模式\n",[129,32872,32874],{"class":131,"line":32873},126,[129,32875,32876],{"class":139},"            model.eval()\n",[129,32878,32880,32883],{"class":131,"line":32879},127,[129,32881,32882],{"class":135},"            with",[129,32884,32885],{"class":139}," torch.no_grad():\n",[129,32887,32889],{"class":131,"line":32888},128,[129,32890,32891],{"class":198},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[129,32893,32895,32898,32900],{"class":131,"line":32894},129,[129,32896,32897],{"class":139},"                output ",[129,32899,185],{"class":135},[129,32901,32902],{"class":139}," model(b_x)\n",[129,32904,32906],{"class":131,"line":32905},130,[129,32907,32908],{"class":198},"                # 查找每一行中最大值对应的下标\n",[129,32910,32912,32915,32917,32920,32922,32924,32926],{"class":131,"line":32911},131,[129,32913,32914],{"class":139},"                pre_lab ",[129,32916,185],{"class":135},[129,32918,32919],{"class":139}," torch.argmax(output, ",[129,32921,32686],{"class":5231},[129,32923,185],{"class":135},[129,32925,357],{"class":188},[129,32927,146],{"class":139},[129,32929,32931],{"class":131,"line":32930},132,[129,32932,32933],{"class":198},"                # 计算验证集上的当前 batch 损失\n",[129,32935,32937,32940,32942],{"class":131,"line":32936},133,[129,32938,32939],{"class":139},"                val_batch_loss ",[129,32941,185],{"class":135},[129,32943,32944],{"class":139}," criterion(output, b_y)\n",[129,32946,32948],{"class":131,"line":32947},134,[129,32949,32950],{"class":198},"                # 对损失函数进行累加（按样本数加权）\n",[129,32952,32954,32957,32959,32962,32964,32967,32969],{"class":131,"line":32953},135,[129,32955,32956],{"class":139},"                val_loss ",[129,32958,9492],{"class":135},[129,32960,32961],{"class":139}," val_batch_loss.item() ",[129,32963,594],{"class":135},[129,32965,32966],{"class":139}," b_x.size(",[129,32968,331],{"class":188},[129,32970,146],{"class":139},[129,32972,32974,32977,32979,32982,32984],{"class":131,"line":32973},136,[129,32975,32976],{"class":139},"                val_corrects ",[129,32978,9492],{"class":135},[129,32980,32981],{"class":139}," torch.sum(pre_lab ",[129,32983,2963],{"class":135},[129,32985,32986],{"class":139}," b_y.data)\n",[129,32988,32990],{"class":131,"line":32989},137,[129,32991,32992],{"class":198},"                # 当前用于验证的样本数量\n",[129,32994,32996,32999,33001,33003,33005],{"class":131,"line":32995},138,[129,32997,32998],{"class":139},"            val_num ",[129,33000,9492],{"class":135},[129,33002,32966],{"class":139},[129,33004,331],{"class":188},[129,33006,146],{"class":139},[129,33008,33010],{"class":131,"line":33009},139,[129,33011,33012],{"class":198},"        # 计算并保存每一次迭代的loss值和准确率\n",[129,33014,33016],{"class":131,"line":33015},140,[129,33017,33018],{"class":198},"        # 计算并保存训练集的loss值\n",[129,33020,33022,33025,33027],{"class":131,"line":33021},141,[129,33023,33024],{"class":139},"        train_loss_all.append(train_loss",[129,33026,723],{"class":135},[129,33028,33029],{"class":139},"train_num)\n",[129,33031,33033],{"class":131,"line":33032},142,[129,33034,33035],{"class":198},"        # 取双精度\n",[129,33037,33039],{"class":131,"line":33038},143,[129,33040,33041],{"class":198},"        # 计算并保存训练集的准确率\n",[129,33043,33045,33048,33050],{"class":131,"line":33044},144,[129,33046,33047],{"class":139},"        train_acc_all.append(train_corrects.double().item()",[129,33049,723],{"class":135},[129,33051,33029],{"class":139},[129,33053,33055],{"class":131,"line":33054},145,[129,33056,33057],{"class":198},"        # 计算并保存验证集的loss值\n",[129,33059,33061,33064,33066],{"class":131,"line":33060},146,[129,33062,33063],{"class":139},"        val_loss_all.append(val_loss",[129,33065,723],{"class":135},[129,33067,33068],{"class":139},"val_num)\n",[129,33070,33072],{"class":131,"line":33071},147,[129,33073,33074],{"class":198},"        # 计算并保存验证集的准确率\n",[129,33076,33078,33081,33083],{"class":131,"line":33077},148,[129,33079,33080],{"class":139},"        val_acc_all.append(val_corrects.double().item()",[129,33082,723],{"class":135},[129,33084,33068],{"class":139},[129,33086,33088],{"class":131,"line":33087},149,[129,33089,2414],{"emptyLinePlaceholder":56},[129,33091,33093],{"class":131,"line":33092},150,[129,33094,33095],{"class":198},"        # 打印训练一轮的loss值和准确率\n",[129,33097,33099,33101,33103,33105,33107,33110,33112,33115,33117,33120,33122,33124,33126,33128,33131,33133,33135,33138,33140,33142],{"class":131,"line":33098},151,[129,33100,32452],{"class":188},[129,33102,140],{"class":139},[129,33104,3606],{"class":244},[129,33106,32460],{"class":188},[129,33108,33109],{"class":244},"train loss:",[129,33111,1035],{"class":188},[129,33113,33114],{"class":135},":.4f",[129,33116,1085],{"class":188},[129,33118,33119],{"class":244}," train acc:",[129,33121,1035],{"class":188},[129,33123,33114],{"class":135},[129,33125,1085],{"class":188},[129,33127,3606],{"class":244},[129,33129,33130],{"class":139},".format(epoch,train_loss_all[",[129,33132,671],{"class":135},[129,33134,357],{"class":188},[129,33136,33137],{"class":139},"],train_acc_all[",[129,33139,671],{"class":135},[129,33141,357],{"class":188},[129,33143,33144],{"class":139},"]))\n",[129,33146,33148,33150,33152,33154,33156,33159,33161,33163,33165,33168,33170,33172,33174,33176,33179,33181,33183,33186,33188,33190],{"class":131,"line":33147},152,[129,33149,32452],{"class":188},[129,33151,140],{"class":139},[129,33153,3606],{"class":244},[129,33155,32460],{"class":188},[129,33157,33158],{"class":244},"val loss:",[129,33160,1035],{"class":188},[129,33162,33114],{"class":135},[129,33164,1085],{"class":188},[129,33166,33167],{"class":244}," val acc:",[129,33169,1035],{"class":188},[129,33171,33114],{"class":135},[129,33173,1085],{"class":188},[129,33175,3606],{"class":244},[129,33177,33178],{"class":139},".format(epoch,val_loss_all[",[129,33180,671],{"class":135},[129,33182,357],{"class":188},[129,33184,33185],{"class":139},"],val_acc_all[",[129,33187,671],{"class":135},[129,33189,357],{"class":188},[129,33191,33144],{"class":139},[129,33193,33195],{"class":131,"line":33194},153,[129,33196,2414],{"emptyLinePlaceholder":56},[129,33198,33200],{"class":131,"line":33199},154,[129,33201,33202],{"class":198},"        # 判断准确度--->保存最优模型\n",[129,33204,33206,33208,33211,33213,33215,33217,33219],{"class":131,"line":33205},155,[129,33207,2511],{"class":135},[129,33209,33210],{"class":139}," val_acc_all[",[129,33212,671],{"class":135},[129,33214,357],{"class":188},[129,33216,1079],{"class":139},[129,33218,1099],{"class":135},[129,33220,33221],{"class":139},"best_acc:\n",[129,33223,33225],{"class":131,"line":33224},156,[129,33226,33227],{"class":198},"            # 保存当前模型准确度\n",[129,33229,33231,33234,33236,33238,33241,33243,33245],{"class":131,"line":33230},157,[129,33232,33233],{"class":139},"            best_acc:",[129,33235,179],{"class":188},[129,33237,185],{"class":135},[129,33239,33240],{"class":139},"val_acc_all[",[129,33242,671],{"class":135},[129,33244,357],{"class":188},[129,33246,33247],{"class":139},"]\n",[129,33249,33251],{"class":131,"line":33250},158,[129,33252,33253],{"class":198},"            # 保存当前的准确度\n",[129,33255,33257],{"class":131,"line":33256},159,[129,33258,33259],{"class":198},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[129,33261,33263,33266,33268],{"class":131,"line":33262},160,[129,33264,33265],{"class":139},"            best_model_wts",[129,33267,185],{"class":135},[129,33269,32315],{"class":139},[129,33271,33273],{"class":131,"line":33272},161,[129,33274,2414],{"emptyLinePlaceholder":56},[129,33276,33278],{"class":131,"line":33277},162,[129,33279,33280],{"class":198},"        # 计算耗时\n",[129,33282,33284,33287,33289,33292,33294],{"class":131,"line":33283},163,[129,33285,33286],{"class":139},"        time_use",[129,33288,185],{"class":135},[129,33290,33291],{"class":139},"time.time()",[129,33293,671],{"class":135},[129,33295,33296],{"class":139},"since\n",[129,33298,33300,33302,33304,33307,33309,33312,33314,33316,33318,33320,33322,33325,33328,33331,33333,33336,33338,33340],{"class":131,"line":33299},164,[129,33301,32452],{"class":188},[129,33303,140],{"class":139},[129,33305,33306],{"class":244},"'训练和验证耗费的时间",[129,33308,1035],{"class":188},[129,33310,33311],{"class":135},":.0f",[129,33313,1085],{"class":188},[129,33315,683],{"class":244},[129,33317,1035],{"class":188},[129,33319,33311],{"class":135},[129,33321,1085],{"class":188},[129,33323,33324],{"class":244},"s'",[129,33326,33327],{"class":139},".format(time_use",[129,33329,33330],{"class":135},"\u002F\u002F",[129,33332,1046],{"class":188},[129,33334,33335],{"class":139},",time_use",[129,33337,467],{"class":135},[129,33339,1046],{"class":188},[129,33341,30498],{"class":139},[129,33343,33345],{"class":131,"line":33344},165,[129,33346,33347],{"class":198},"    # 选择最优参数\n",[129,33349,33351],{"class":131,"line":33350},166,[129,33352,33353],{"class":198},"    # 加载最高准确率下的模型参数\n",[129,33355,33357],{"class":131,"line":33356},167,[129,33358,33359],{"class":198},"    # model.load_state_dict(best_model_wts)\n",[129,33361,33363,33366,33369],{"class":131,"line":33362},168,[129,33364,33365],{"class":139},"    torch.save(model.state_dict(best_model_wts), ",[129,33367,33368],{"class":244},"'.\u002Fbest_model.pth'",[129,33370,146],{"class":139},[129,33372,33374],{"class":131,"line":33373},169,[129,33375,33376],{"class":198},"    # 或者写成\n",[129,33378,33380],{"class":131,"line":33379},170,[129,33381,33382],{"class":198},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[129,33384,33386],{"class":131,"line":33385},171,[129,33387,33388],{"class":198},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[129,33390,33392,33395,33397,33400,33403,33405],{"class":131,"line":33391},172,[129,33393,33394],{"class":139},"    train_process",[129,33396,185],{"class":135},[129,33398,33399],{"class":139},"pd.DataFrame(",[129,33401,33402],{"class":5231},"data",[129,33404,185],{"class":135},[129,33406,1560],{"class":139},[129,33408,33410,33413,33415,33418],{"class":131,"line":33409},173,[129,33411,33412],{"class":244},"        \"epoch\"",[129,33414,998],{"class":139},[129,33416,33417],{"class":188},"range",[129,33419,33420],{"class":139},"(num_epochs),\n",[129,33422,33424,33427],{"class":131,"line":33423},174,[129,33425,33426],{"class":244},"        \"train_loss_all\"",[129,33428,33429],{"class":139},":train_loss_all,\n",[129,33431,33433,33436],{"class":131,"line":33432},175,[129,33434,33435],{"class":244},"        \"val_loss_all\"",[129,33437,33438],{"class":139},":val_loss_all,\n",[129,33440,33442,33445],{"class":131,"line":33441},176,[129,33443,33444],{"class":244},"        \"train_acc_all\"",[129,33446,33447],{"class":139},":train_acc_all,\n",[129,33449,33451,33454],{"class":131,"line":33450},177,[129,33452,33453],{"class":244},"        \"val_acc_all\"",[129,33455,33456],{"class":139},":val_acc_all\n",[129,33458,33460],{"class":131,"line":33459},178,[129,33461,33462],{"class":139},"    })\n",[129,33464,33466],{"class":131,"line":33465},179,[129,33467,33468],{"class":198},"    # 返回训练保存的过程\n",[129,33470,33472,33474],{"class":131,"line":33471},180,[129,33473,4104],{"class":135},[129,33475,33476],{"class":139}," train_process\n",[129,33478,33480],{"class":131,"line":33479},181,[129,33481,2414],{"emptyLinePlaceholder":56},[129,33483,33485],{"class":131,"line":33484},182,[129,33486,33487],{"class":198},"# 将loss值和精度按照图片的形式展示出来\n",[129,33489,33491,33493,33496],{"class":131,"line":33490},183,[129,33492,31948],{"class":135},[129,33494,33495],{"class":1977}," matplot_acc_loss",[129,33497,33498],{"class":139},"(train_process):\n",[129,33500,33502],{"class":131,"line":33501},184,[129,33503,33504],{"class":198},"    # 设置图的大小\n",[129,33506,33508,33511,33513,33515,33517,33519,33521,33523],{"class":131,"line":33507},185,[129,33509,33510],{"class":139},"    plt.figure(",[129,33512,31694],{"class":5231},[129,33514,185],{"class":135},[129,33516,140],{"class":139},[129,33518,637],{"class":188},[129,33520,517],{"class":139},[129,33522,432],{"class":188},[129,33524,30498],{"class":139},[129,33526,33528],{"class":131,"line":33527},186,[129,33529,33530],{"class":198},"    # 设置图中有几张图\n",[129,33532,33534],{"class":131,"line":33533},187,[129,33535,33536],{"class":198},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[129,33538,33540],{"class":131,"line":33539},188,[129,33541,33542],{"class":198},"    # ①loss图\n",[129,33544,33546,33548,33550,33552,33554,33556,33558],{"class":131,"line":33545},189,[129,33547,31728],{"class":139},[129,33549,357],{"class":188},[129,33551,517],{"class":139},[129,33553,217],{"class":188},[129,33555,517],{"class":139},[129,33557,357],{"class":188},[129,33559,146],{"class":139},[129,33561,33563],{"class":131,"line":33562},190,[129,33564,33565],{"class":198},"    # 补充:\n",[129,33567,33569],{"class":131,"line":33568},191,[129,33570,33571],{"class":198},"    # plt.subplot(nrows, ncols, index)\n",[129,33573,33575],{"class":131,"line":33574},192,[129,33576,33577],{"class":198},"    # nrows：行数\n",[129,33579,33581],{"class":131,"line":33580},193,[129,33582,33583],{"class":198},"    # ncols：列数\n",[129,33585,33587],{"class":131,"line":33586},194,[129,33588,33589],{"class":198},"    # index：目前选中第几个子图（从1开始）\n",[129,33591,33593,33596,33599,33602,33605,33607,33610,33612,33615],{"class":131,"line":33592},195,[129,33594,33595],{"class":139},"    plt.plot(train_process[",[129,33597,33598],{"class":244},"\"epoch\"",[129,33600,33601],{"class":139},"],train_process.train_loss_all,",[129,33603,33604],{"class":244},"'ro-'",[129,33606,517],{"class":139},[129,33608,33609],{"class":5231},"label",[129,33611,185],{"class":135},[129,33613,33614],{"class":244},"'train loss'",[129,33616,146],{"class":139},[129,33618,33620,33622,33624,33627,33630,33632,33634,33636,33639],{"class":131,"line":33619},196,[129,33621,33595],{"class":139},[129,33623,33598],{"class":244},[129,33625,33626],{"class":139},"],train_process.val_loss_all,",[129,33628,33629],{"class":244},"'bs--'",[129,33631,517],{"class":139},[129,33633,33609],{"class":5231},[129,33635,185],{"class":135},[129,33637,33638],{"class":244},"'val loss'",[129,33640,146],{"class":139},[129,33642,33644],{"class":131,"line":33643},197,[129,33645,33646],{"class":198},"    # 添加一个图例\n",[129,33648,33650],{"class":131,"line":33649},198,[129,33651,33652],{"class":139},"    plt.legend()\n",[129,33654,33656],{"class":131,"line":33655},199,[129,33657,33658],{"class":198},"    # 给轴添加标签\n",[129,33660,33662,33665,33668],{"class":131,"line":33661},200,[129,33663,33664],{"class":139},"    plt.xlabel(",[129,33666,33667],{"class":244},"'epoch'",[129,33669,146],{"class":139},[129,33671,33673,33676,33679],{"class":131,"line":33672},201,[129,33674,33675],{"class":139},"    plt.ylabel(",[129,33677,33678],{"class":244},"'loss'",[129,33680,146],{"class":139},[129,33682,33684],{"class":131,"line":33683},202,[129,33685,33686],{"class":198},"    # ②准确度图\n",[129,33688,33690,33692,33694,33696,33698,33700,33702],{"class":131,"line":33689},203,[129,33691,31728],{"class":139},[129,33693,357],{"class":188},[129,33695,517],{"class":139},[129,33697,217],{"class":188},[129,33699,517],{"class":139},[129,33701,217],{"class":188},[129,33703,146],{"class":139},[129,33705,33707,33709,33711,33714,33716,33718,33720,33722,33725],{"class":131,"line":33706},204,[129,33708,33595],{"class":139},[129,33710,33598],{"class":244},[129,33712,33713],{"class":139},"],train_process.train_acc_all,",[129,33715,33604],{"class":244},[129,33717,517],{"class":139},[129,33719,33609],{"class":5231},[129,33721,185],{"class":135},[129,33723,33724],{"class":244},"'train acc'",[129,33726,146],{"class":139},[129,33728,33730,33732,33734,33737,33739,33741,33743,33745,33748],{"class":131,"line":33729},205,[129,33731,33595],{"class":139},[129,33733,33598],{"class":244},[129,33735,33736],{"class":139},"],train_process.val_acc_all,",[129,33738,33629],{"class":244},[129,33740,517],{"class":139},[129,33742,33609],{"class":5231},[129,33744,185],{"class":135},[129,33746,33747],{"class":244},"'val acc'",[129,33749,146],{"class":139},[129,33751,33753],{"class":131,"line":33752},206,[129,33754,33755],{"class":198},"    # 添加图例\n",[129,33757,33759],{"class":131,"line":33758},207,[129,33760,33652],{"class":139},[129,33762,33764,33766,33768],{"class":131,"line":33763},208,[129,33765,33664],{"class":139},[129,33767,33598],{"class":244},[129,33769,146],{"class":139},[129,33771,33773,33775,33778],{"class":131,"line":33772},209,[129,33774,33675],{"class":139},[129,33776,33777],{"class":244},"\"acc\"",[129,33779,146],{"class":139},[129,33781,33783],{"class":131,"line":33782},210,[129,33784,33785],{"class":139},"    plt.show()\n",[129,33787,33789],{"class":131,"line":33788},211,[129,33790,2414],{"emptyLinePlaceholder":56},[129,33792,33794],{"class":131,"line":33793},212,[129,33795,33796],{"class":198},"# 正式开始训练:\n",[129,33798,33800,33802,33804,33806,33808],{"class":131,"line":33799},213,[129,33801,1545],{"class":135},[129,33803,31221],{"class":188},[129,33805,2963],{"class":135},[129,33807,31226],{"class":244},[129,33809,3753],{"class":139},[129,33811,33813],{"class":131,"line":33812},214,[129,33814,33815],{"class":198},"    # 将模型实例化\n",[129,33817,33819,33822,33824],{"class":131,"line":33818},215,[129,33820,33821],{"class":139},"    LeNet",[129,33823,185],{"class":135},[129,33825,33826],{"class":139},"LeNet()\n",[129,33828,33830,33833,33835],{"class":131,"line":33829},216,[129,33831,33832],{"class":139},"    train_dataloader,val_dataloader",[129,33834,185],{"class":135},[129,33836,33837],{"class":139},"train_val_data_process()\n",[129,33839,33841,33843,33845,33848,33851,33853,33855],{"class":131,"line":33840},217,[129,33842,33394],{"class":139},[129,33844,185],{"class":135},[129,33846,33847],{"class":139},"train_model_process(LeNet,train_dataloader,val_dataloader,",[129,33849,33850],{"class":5231},"num_epochs",[129,33852,185],{"class":135},[129,33854,839],{"class":188},[129,33856,146],{"class":139},[129,33858,33860],{"class":131,"line":33859},218,[129,33861,33862],{"class":139},"    matplot_acc_loss(train_process)\n",[14,33864,33865],{},"画图的补充点学习：",[14,33867,33868],{},[40,33869],{"alt":42,"src":33870},"\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",[83,33872,33873],{"start":1194},[86,33874,33875],{},"测试",[120,33877,33879],{"className":30379,"code":33878,"language":30381,"meta":42,"style":42},"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",[126,33880,33881,33887,33897,33909,33919,33924,33934,33944,33948,33953,33962,33979,33991,34008,34019,34035,34040,34051,34062,34073,34080,34084,34089,34099,34104,34121,34129,34133,34138,34147,34156,34160,34165,34170,34175,34182,34187,34199,34209,34219,34224,34228,34233,34242,34247,34263,34268,34273,34278,34292,34297,34311,34315,34320,34335,34340,34352,34356,34361,34373,34378,34386,34391,34396,34406,34411,34420,34425,34430,34434,34439,34444,34460,34468,34473,34478,34537,34543,34548,34559,34567,34575,34579,34584,34588,34593,34601,34606,34622,34627,34637,34647],{"__ignoreMap":42},[129,33882,33883,33885],{"class":131,"line":132},[129,33884,30393],{"class":135},[129,33886,30396],{"class":139},[129,33888,33889,33891,33893,33895],{"class":131,"line":51},[129,33890,30393],{"class":135},[129,33892,31416],{"class":139},[129,33894,31384],{"class":135},[129,33896,31421],{"class":139},[129,33898,33899,33901,33904,33906],{"class":131,"line":1194},[129,33900,30738],{"class":135},[129,33902,33903],{"class":139}," jupyter_client.consoleapp ",[129,33905,30393],{"class":135},[129,33907,33908],{"class":139}," classes\n",[129,33910,33911,33913,33915,33917],{"class":131,"line":1209},[129,33912,30738],{"class":135},[129,33914,31399],{"class":139},[129,33916,30393],{"class":135},[129,33918,31404],{"class":139},[129,33920,33921],{"class":131,"line":1215},[129,33922,33923],{"class":198},"# 导入数据集\n",[129,33925,33926,33928,33930,33932],{"class":131,"line":1229},[129,33927,30738],{"class":135},[129,33929,31369],{"class":139},[129,33931,30393],{"class":135},[129,33933,31374],{"class":139},[129,33935,33936,33938,33940,33942],{"class":131,"line":1235},[129,33937,30738],{"class":135},[129,33939,31915],{"class":139},[129,33941,30393],{"class":135},[129,33943,31920],{"class":139},[129,33945,33946],{"class":131,"line":1326},[129,33947,2414],{"emptyLinePlaceholder":56},[129,33949,33950],{"class":131,"line":1332},[129,33951,33952],{"class":198},"# 测试数据处理\n",[129,33954,33955,33957,33960],{"class":131,"line":1344},[129,33956,31948],{"class":135},[129,33958,33959],{"class":1977}," test_data_process",[129,33961,31954],{"class":139},[129,33963,33964,33967,33969,33971,33973,33975,33977],{"class":131,"line":1626},[129,33965,33966],{"class":139},"    test_data",[129,33968,185],{"class":135},[129,33970,31456],{"class":139},[129,33972,31459],{"class":5231},[129,33974,185],{"class":135},[129,33976,31464],{"class":244},[129,33978,31467],{"class":139},[129,33980,33981,33984,33986,33989],{"class":131,"line":1631},[129,33982,33983],{"class":5231},"                           train",[129,33985,185],{"class":135},[129,33987,33988],{"class":188},"False",[129,33990,31467],{"class":139},[129,33992,33993,33996,33998,34000,34002,34004,34006],{"class":131,"line":1637},[129,33994,33995],{"class":5231},"                           transform",[129,33997,185],{"class":135},[129,33999,31494],{"class":139},[129,34001,31497],{"class":5231},[129,34003,185],{"class":135},[129,34005,1040],{"class":188},[129,34007,31505],{"class":139},[129,34009,34010,34013,34015,34017],{"class":131,"line":1642},[129,34011,34012],{"class":5231},"                           download",[129,34014,185],{"class":135},[129,34016,31477],{"class":188},[129,34018,146],{"class":139},[129,34020,34021,34024,34026,34028,34030,34032],{"class":131,"line":1656},[129,34022,34023],{"class":139},"    test_dataloader",[129,34025,185],{"class":135},[129,34027,31535],{"class":139},[129,34029,31538],{"class":5231},[129,34031,185],{"class":135},[129,34033,34034],{"class":139},"test_data,\n",[129,34036,34037],{"class":131,"line":1661},[129,34038,34039],{"class":198},"                                    # 这里是一张一张进行测试\n",[129,34041,34042,34045,34047,34049],{"class":131,"line":1667},[129,34043,34044],{"class":5231},"                                    batch_size",[129,34046,185],{"class":135},[129,34048,357],{"class":188},[129,34050,31467],{"class":139},[129,34052,34053,34056,34058,34060],{"class":131,"line":1688},[129,34054,34055],{"class":5231},"                                    shuffle",[129,34057,185],{"class":135},[129,34059,31477],{"class":188},[129,34061,31467],{"class":139},[129,34063,34064,34067,34069,34071],{"class":131,"line":1693},[129,34065,34066],{"class":5231},"                                    num_workers",[129,34068,185],{"class":135},[129,34070,331],{"class":188},[129,34072,146],{"class":139},[129,34074,34075,34077],{"class":131,"line":1707},[129,34076,4104],{"class":135},[129,34078,34079],{"class":139}," test_dataloader\n",[129,34081,34082],{"class":131,"line":1712},[129,34083,2414],{"emptyLinePlaceholder":56},[129,34085,34086],{"class":131,"line":1741},[129,34087,34088],{"class":198},"# 定义模型测试函数\n",[129,34090,34091,34093,34096],{"class":131,"line":1746},[129,34092,31948],{"class":135},[129,34094,34095],{"class":1977}," test_model_process",[129,34097,34098],{"class":139},"(model,test_dataloader):\n",[129,34100,34101],{"class":131,"line":1763},[129,34102,34103],{"class":198},"    # 将模型放到设备当中，先进行判断\n",[129,34105,34106,34108,34110,34112,34114,34116,34118],{"class":131,"line":1768},[129,34107,31238],{"class":139},[129,34109,185],{"class":135},[129,34111,31245],{"class":244},[129,34113,1718],{"class":135},[129,34115,31250],{"class":139},[129,34117,1715],{"class":135},[129,34119,34120],{"class":244}," \"cpu\"\n",[129,34122,34123,34125,34127],{"class":131,"line":1773},[129,34124,31290],{"class":139},[129,34126,185],{"class":135},[129,34128,32290],{"class":139},[129,34130,34131],{"class":131,"line":1778},[129,34132,2414],{"emptyLinePlaceholder":56},[129,34134,34135],{"class":131,"line":1792},[129,34136,34137],{"class":198},"    # 设置初始化参数\n",[129,34139,34140,34143,34145],{"class":131,"line":1797},[129,34141,34142],{"class":139},"    test_corrects",[129,34144,185],{"class":135},[129,34146,32343],{"class":188},[129,34148,34149,34152,34154],{"class":131,"line":2591},[129,34150,34151],{"class":139},"    test_num",[129,34153,185],{"class":135},[129,34155,3099],{"class":188},[129,34157,34158],{"class":131,"line":2605},[129,34159,2414],{"emptyLinePlaceholder":56},[129,34161,34162],{"class":131,"line":2613},[129,34163,34164],{"class":198},"    # 进行模型测试\n",[129,34166,34167],{"class":131,"line":2618},[129,34168,34169],{"class":198},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[129,34171,34172],{"class":131,"line":2624},[129,34173,34174],{"class":198},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[129,34176,34177,34180],{"class":131,"line":2630},[129,34178,34179],{"class":135},"    with",[129,34181,32885],{"class":139},[129,34183,34184],{"class":131,"line":2635},[129,34185,34186],{"class":198},"        # 从数据中进行\n",[129,34188,34189,34191,34194,34196],{"class":131,"line":7963},[129,34190,3417],{"class":135},[129,34192,34193],{"class":139}," test_data_x,test_data_y ",[129,34195,26044],{"class":135},[129,34197,34198],{"class":139}," test_dataloader:\n",[129,34200,34201,34204,34206],{"class":131,"line":7987},[129,34202,34203],{"class":139},"            test_data_x",[129,34205,185],{"class":135},[129,34207,34208],{"class":139},"test_data_x.to(device)\n",[129,34210,34211,34214,34216],{"class":131,"line":7992},[129,34212,34213],{"class":139},"            test_data_y",[129,34215,185],{"class":135},[129,34217,34218],{"class":139},"test_data_y.to(device)\n",[129,34220,34221],{"class":131,"line":7998},[129,34222,34223],{"class":198},"            # 设置为验证模式\n",[129,34225,34226],{"class":131,"line":8025},[129,34227,32876],{"class":139},[129,34229,34230],{"class":131,"line":8030},[129,34231,34232],{"class":198},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[129,34234,34235,34237,34239],{"class":131,"line":8036},[129,34236,32661],{"class":139},[129,34238,185],{"class":135},[129,34240,34241],{"class":139},"model(test_data_x)\n",[129,34243,34244],{"class":131,"line":8048},[129,34245,34246],{"class":198},"            # 查找每一行中最大值对应的下标\n",[129,34248,34249,34251,34253,34255,34257,34259,34261],{"class":131,"line":8060},[129,34250,32678],{"class":139},[129,34252,185],{"class":135},[129,34254,32683],{"class":139},[129,34256,32686],{"class":5231},[129,34258,185],{"class":135},[129,34260,357],{"class":188},[129,34262,146],{"class":139},[129,34264,34265],{"class":131,"line":8072},[129,34266,34267],{"class":198},"            # 计算正确率\n",[129,34269,34270],{"class":131,"line":9731},[129,34271,34272],{"class":198},"            # .data表示是一个不带梯度信息的tensor\n",[129,34274,34275],{"class":131,"line":9756},[129,34276,34277],{"class":198},"            # 如果预测正确，则准确度test_corrects加1\n",[129,34279,34280,34283,34285,34287,34289],{"class":131,"line":9779},[129,34281,34282],{"class":139},"            test_corrects",[129,34284,9492],{"class":135},[129,34286,32788],{"class":139},[129,34288,2963],{"class":135},[129,34290,34291],{"class":139},"test_data_y.data)\n",[129,34293,34294],{"class":131,"line":9803},[129,34295,34296],{"class":198},"            # 将所有的测试样本进行累计\n",[129,34298,34299,34302,34304,34307,34309],{"class":131,"line":9808},[129,34300,34301],{"class":139},"            test_num",[129,34303,9492],{"class":135},[129,34305,34306],{"class":139},"test_data_x.size(",[129,34308,331],{"class":188},[129,34310,146],{"class":139},[129,34312,34313],{"class":131,"line":9813},[129,34314,2414],{"emptyLinePlaceholder":56},[129,34316,34317],{"class":131,"line":9818},[129,34318,34319],{"class":198},"        # 计算准确度\n",[129,34321,34322,34325,34327,34330,34332],{"class":131,"line":9827},[129,34323,34324],{"class":139},"        test_acc",[129,34326,185],{"class":135},[129,34328,34329],{"class":139},"test_corrects.double().item()",[129,34331,723],{"class":135},[129,34333,34334],{"class":139},"test_num\n",[129,34336,34337],{"class":131,"line":9832},[129,34338,34339],{"class":198},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[129,34341,34342,34344,34346,34349],{"class":131,"line":9838},[129,34343,32452],{"class":188},[129,34345,140],{"class":139},[129,34347,34348],{"class":244},"\"测试的准确率：\"",[129,34350,34351],{"class":139},",test_acc)\n",[129,34353,34354],{"class":131,"line":9859},[129,34355,2414],{"emptyLinePlaceholder":56},[129,34357,34358],{"class":131,"line":9865},[129,34359,34360],{"class":198},"# 实现模型的测试功能\n",[129,34362,34363,34365,34367,34369,34371],{"class":131,"line":9879},[129,34364,1545],{"class":135},[129,34366,31221],{"class":188},[129,34368,2963],{"class":135},[129,34370,31226],{"class":244},[129,34372,3753],{"class":139},[129,34374,34375],{"class":131,"line":9885},[129,34376,34377],{"class":198},"    # 加载模型\n",[129,34379,34380,34382,34384],{"class":131,"line":9912},[129,34381,31290],{"class":139},[129,34383,185],{"class":135},[129,34385,33826],{"class":139},[129,34387,34388],{"class":131,"line":9921},[129,34389,34390],{"class":198},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[129,34392,34393],{"class":131,"line":9927},[129,34394,34395],{"class":198},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[129,34397,34398,34401,34404],{"class":131,"line":9935},[129,34399,34400],{"class":139},"    model.load_state_dict(torch.load(",[129,34402,34403],{"class":244},"'best_model.pth'",[129,34405,30498],{"class":139},[129,34407,34408],{"class":131,"line":9940},[129,34409,34410],{"class":198},"    # 数据加载\n",[129,34412,34413,34415,34417],{"class":131,"line":16619},[129,34414,34023],{"class":139},[129,34416,185],{"class":135},[129,34418,34419],{"class":139},"test_data_process()\n",[129,34421,34422],{"class":131,"line":16625},[129,34423,34424],{"class":198},"    # 加载模型测试的函数\n",[129,34426,34427],{"class":131,"line":16648},[129,34428,34429],{"class":139},"    test_model_process(model,test_dataloader)\n",[129,34431,34432],{"class":131,"line":16654},[129,34433,2414],{"emptyLinePlaceholder":56},[129,34435,34436],{"class":131,"line":16677},[129,34437,34438],{"class":198},"    # 验证集推理实现：\n",[129,34440,34441],{"class":131,"line":16691},[129,34442,34443],{"class":198},"    # 加载数据加载的更详细一些\n",[129,34445,34446,34448,34450,34452,34454,34456,34458],{"class":131,"line":16711},[129,34447,31238],{"class":139},[129,34449,185],{"class":135},[129,34451,31245],{"class":244},[129,34453,1718],{"class":135},[129,34455,31250],{"class":139},[129,34457,1715],{"class":135},[129,34459,34120],{"class":244},[129,34461,34462,34464,34466],{"class":131,"line":16717},[129,34463,31290],{"class":139},[129,34465,185],{"class":135},[129,34467,32290],{"class":139},[129,34469,34470],{"class":131,"line":16728},[129,34471,34472],{"class":198},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[129,34474,34475],{"class":131,"line":16751},[129,34476,34477],{"class":198},"    # 顺序不可改变\n",[129,34479,34480,34483,34485,34487,34490,34492,34495,34497,34500,34502,34505,34507,34510,34512,34515,34517,34520,34522,34525,34527,34530,34532,34535],{"class":131,"line":16773},[129,34481,34482],{"class":139},"    classes",[129,34484,185],{"class":135},[129,34486,1029],{"class":139},[129,34488,34489],{"class":244},"'T-shirt\u002Ftop'",[129,34491,517],{"class":139},[129,34493,34494],{"class":244},"'Trouser'",[129,34496,517],{"class":139},[129,34498,34499],{"class":244},"'Pullover'",[129,34501,517],{"class":139},[129,34503,34504],{"class":244},"'Dress'",[129,34506,517],{"class":139},[129,34508,34509],{"class":244},"'Coat'",[129,34511,517],{"class":139},[129,34513,34514],{"class":244},"'Sandal'",[129,34516,517],{"class":139},[129,34518,34519],{"class":244},"'Shirt'",[129,34521,517],{"class":139},[129,34523,34524],{"class":244},"'Sneaker'",[129,34526,517],{"class":139},[129,34528,34529],{"class":244},"'Bag'",[129,34531,517],{"class":139},[129,34533,34534],{"class":244},"'Ankle boot'",[129,34536,33247],{"class":139},[129,34538,34539,34541],{"class":131,"line":16778},[129,34540,34179],{"class":135},[129,34542,32885],{"class":139},[129,34544,34545],{"class":131,"line":16784},[129,34546,34547],{"class":198},"        # 将数据和标签都放到设备当中\n",[129,34549,34550,34552,34555,34557],{"class":131,"line":16798},[129,34551,3417],{"class":135},[129,34553,34554],{"class":139}," b_x,b_y ",[129,34556,26044],{"class":135},[129,34558,34198],{"class":139},[129,34560,34561,34563,34565],{"class":131,"line":16811},[129,34562,32611],{"class":139},[129,34564,185],{"class":135},[129,34566,32616],{"class":139},[129,34568,34569,34571,34573],{"class":131,"line":16816},[129,34570,32626],{"class":139},[129,34572,185],{"class":135},[129,34574,32631],{"class":139},[129,34576,34577],{"class":131,"line":16830},[129,34578,2414],{"emptyLinePlaceholder":56},[129,34580,34581],{"class":131,"line":16835},[129,34582,34583],{"class":198},"            # 设置模型为验证模式\n",[129,34585,34586],{"class":131,"line":16841},[129,34587,32876],{"class":139},[129,34589,34590],{"class":131,"line":16846},[129,34591,34592],{"class":198},"            # 模型推理结果\n",[129,34594,34595,34597,34599],{"class":131,"line":16860},[129,34596,32661],{"class":139},[129,34598,185],{"class":135},[129,34600,32666],{"class":139},[129,34602,34603],{"class":131,"line":16865},[129,34604,34605],{"class":198},"            # 获取最大下标，最大下标就是类别号\n",[129,34607,34608,34610,34612,34614,34616,34618,34620],{"class":131,"line":16870},[129,34609,32678],{"class":139},[129,34611,185],{"class":135},[129,34613,32683],{"class":139},[129,34615,32686],{"class":5231},[129,34617,185],{"class":135},[129,34619,357],{"class":188},[129,34621,146],{"class":139},[129,34623,34624],{"class":131,"line":16884},[129,34625,34626],{"class":198},"            # 取出张量中的数值\n",[129,34628,34629,34632,34634],{"class":131,"line":16896},[129,34630,34631],{"class":139},"            result",[129,34633,185],{"class":135},[129,34635,34636],{"class":139},"pre_lab.item()\n",[129,34638,34639,34642,34644],{"class":131,"line":16901},[129,34640,34641],{"class":139},"            label",[129,34643,185],{"class":135},[129,34645,34646],{"class":139},"b_y.item()\n",[129,34648,34649,34652,34654,34657,34660,34663,34665,34668],{"class":131,"line":16914},[129,34650,34651],{"class":188},"            print",[129,34653,140],{"class":139},[129,34655,34656],{"class":244},"\"预测值：\"",[129,34658,34659],{"class":139},",classes[result],",[129,34661,34662],{"class":244},"\"------\"",[129,34664,517],{"class":139},[129,34666,34667],{"class":244},"\"真实值：\"",[129,34669,34670],{"class":139},",classes[label])\n",[14,34672,34673],{},"（2）AlexNet",[83,34675,34676],{},[86,34677,34678],{},"神经网络构建",[120,34680,34682],{"className":30379,"code":34681,"language":30381,"meta":42,"style":42},"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",[126,34683,34684,34690,34700,34710,34722,34726,34743,34751,34766,34778,34820,34847,34890,34916,34960,35003,35046,35073,35077,35087,35092,35120,35139,35158,35162,35167,35175,35190,35200,35214,35224,35239,35254,35269,35280,35284,35289,35299,35314,35319,35333,35348,35360,35365,35376,35381,35387,35392,35404,35424,35429,35438],{"__ignoreMap":42},[129,34685,34686,34688],{"class":131,"line":132},[129,34687,30393],{"class":135},[129,34689,30396],{"class":139},[129,34691,34692,34694,34696,34698],{"class":131,"line":51},[129,34693,30738],{"class":135},[129,34695,30741],{"class":139},[129,34697,30393],{"class":135},[129,34699,30746],{"class":139},[129,34701,34702,34704,34706,34708],{"class":131,"line":1194},[129,34703,30738],{"class":135},[129,34705,30758],{"class":139},[129,34707,30393],{"class":135},[129,34709,30763],{"class":139},[129,34711,34712,34714,34717,34719],{"class":131,"line":1209},[129,34713,30393],{"class":135},[129,34715,34716],{"class":139}," torch.nn.functional ",[129,34718,31384],{"class":135},[129,34720,34721],{"class":139}," F\n",[129,34723,34724],{"class":131,"line":1215},[129,34725,2414],{"emptyLinePlaceholder":56},[129,34727,34728,34730,34733,34735,34737,34739,34741],{"class":131,"line":1229},[129,34729,14709],{"class":135},[129,34731,34732],{"class":1977}," AlexNet",[129,34734,140],{"class":139},[129,34736,30779],{"class":1977},[129,34738,697],{"class":139},[129,34740,30784],{"class":1977},[129,34742,30787],{"class":139},[129,34744,34745,34747,34749],{"class":131,"line":1235},[129,34746,30802],{"class":135},[129,34748,30805],{"class":188},[129,34750,30808],{"class":139},[129,34752,34753,34755,34758,34760,34762,34764],{"class":131,"line":1326},[129,34754,30818],{"class":188},[129,34756,34757],{"class":139},"(AlexNet,",[129,34759,30824],{"class":188},[129,34761,30827],{"class":139},[129,34763,30830],{"class":188},[129,34765,1990],{"class":139},[129,34767,34768,34770,34773,34775],{"class":131,"line":1332},[129,34769,30846],{"class":188},[129,34771,34772],{"class":139},".ReLu",[129,34774,185],{"class":135},[129,34776,34777],{"class":139},"nn.ReLU()\n",[129,34779,34780,34782,34784,34786,34788,34790,34792,34794,34796,34798,34800,34802,34804,34806,34808,34810,34812,34814,34816,34818],{"class":131,"line":1344},[129,34781,30846],{"class":188},[129,34783,30849],{"class":139},[129,34785,185],{"class":135},[129,34787,30854],{"class":139},[129,34789,30857],{"class":5231},[129,34791,185],{"class":135},[129,34793,357],{"class":188},[129,34795,517],{"class":139},[129,34797,30866],{"class":5231},[129,34799,185],{"class":135},[129,34801,349],{"class":188},[129,34803,517],{"class":139},[129,34805,30875],{"class":5231},[129,34807,185],{"class":135},[129,34809,611],{"class":188},[129,34811,517],{"class":139},[129,34813,30930],{"class":5231},[129,34815,185],{"class":135},[129,34817,432],{"class":188},[129,34819,146],{"class":139},[129,34821,34822,34824,34826,34828,34831,34833,34835,34837,34839,34841,34843,34845],{"class":131,"line":1626},[129,34823,30846],{"class":188},[129,34825,30914],{"class":139},[129,34827,185],{"class":135},[129,34829,34830],{"class":139},"nn.MaxPool2d(",[129,34832,30875],{"class":5231},[129,34834,185],{"class":135},[129,34836,211],{"class":188},[129,34838,517],{"class":139},[129,34840,30930],{"class":5231},[129,34842,185],{"class":135},[129,34844,217],{"class":188},[129,34846,146],{"class":139},[129,34848,34849,34851,34853,34855,34857,34859,34861,34863,34865,34867,34869,34872,34874,34876,34878,34880,34882,34884,34886,34888],{"class":131,"line":1631},[129,34850,30846],{"class":188},[129,34852,30943],{"class":139},[129,34854,185],{"class":135},[129,34856,30854],{"class":139},[129,34858,30857],{"class":5231},[129,34860,185],{"class":135},[129,34862,349],{"class":188},[129,34864,517],{"class":139},[129,34866,30866],{"class":5231},[129,34868,185],{"class":135},[129,34870,34871],{"class":188},"256",[129,34873,517],{"class":139},[129,34875,30875],{"class":5231},[129,34877,185],{"class":135},[129,34879,458],{"class":188},[129,34881,517],{"class":139},[129,34883,30884],{"class":5231},[129,34885,185],{"class":135},[129,34887,217],{"class":188},[129,34889,146],{"class":139},[129,34891,34892,34894,34896,34898,34900,34902,34904,34906,34908,34910,34912,34914],{"class":131,"line":1637},[129,34893,30846],{"class":188},[129,34895,30978],{"class":139},[129,34897,185],{"class":135},[129,34899,34830],{"class":139},[129,34901,30875],{"class":5231},[129,34903,185],{"class":135},[129,34905,211],{"class":188},[129,34907,517],{"class":139},[129,34909,30930],{"class":5231},[129,34911,185],{"class":135},[129,34913,217],{"class":188},[129,34915,146],{"class":139},[129,34917,34918,34920,34923,34925,34927,34929,34931,34933,34935,34937,34939,34942,34944,34946,34948,34950,34952,34954,34956,34958],{"class":131,"line":1642},[129,34919,30846],{"class":188},[129,34921,34922],{"class":139},".c5",[129,34924,185],{"class":135},[129,34926,30854],{"class":139},[129,34928,30857],{"class":5231},[129,34930,185],{"class":135},[129,34932,34871],{"class":188},[129,34934,517],{"class":139},[129,34936,30866],{"class":5231},[129,34938,185],{"class":135},[129,34940,34941],{"class":188},"384",[129,34943,517],{"class":139},[129,34945,30875],{"class":5231},[129,34947,185],{"class":135},[129,34949,211],{"class":188},[129,34951,517],{"class":139},[129,34953,30884],{"class":5231},[129,34955,185],{"class":135},[129,34957,357],{"class":188},[129,34959,146],{"class":139},[129,34961,34962,34964,34967,34969,34971,34973,34975,34977,34979,34981,34983,34985,34987,34989,34991,34993,34995,34997,34999,35001],{"class":131,"line":1656},[129,34963,30846],{"class":188},[129,34965,34966],{"class":139},".c6",[129,34968,185],{"class":135},[129,34970,30854],{"class":139},[129,34972,30857],{"class":5231},[129,34974,185],{"class":135},[129,34976,34941],{"class":188},[129,34978,517],{"class":139},[129,34980,30866],{"class":5231},[129,34982,185],{"class":135},[129,34984,34941],{"class":188},[129,34986,517],{"class":139},[129,34988,30875],{"class":5231},[129,34990,185],{"class":135},[129,34992,211],{"class":188},[129,34994,517],{"class":139},[129,34996,30884],{"class":5231},[129,34998,185],{"class":135},[129,35000,357],{"class":188},[129,35002,146],{"class":139},[129,35004,35005,35007,35010,35012,35014,35016,35018,35020,35022,35024,35026,35028,35030,35032,35034,35036,35038,35040,35042,35044],{"class":131,"line":1661},[129,35006,30846],{"class":188},[129,35008,35009],{"class":139},".c7",[129,35011,185],{"class":135},[129,35013,30854],{"class":139},[129,35015,30857],{"class":5231},[129,35017,185],{"class":135},[129,35019,34941],{"class":188},[129,35021,517],{"class":139},[129,35023,30866],{"class":5231},[129,35025,185],{"class":135},[129,35027,34871],{"class":188},[129,35029,517],{"class":139},[129,35031,30875],{"class":5231},[129,35033,185],{"class":135},[129,35035,211],{"class":188},[129,35037,517],{"class":139},[129,35039,30884],{"class":5231},[129,35041,185],{"class":135},[129,35043,357],{"class":188},[129,35045,146],{"class":139},[129,35047,35048,35050,35053,35055,35057,35059,35061,35063,35065,35067,35069,35071],{"class":131,"line":1667},[129,35049,30846],{"class":188},[129,35051,35052],{"class":139},".s8",[129,35054,185],{"class":135},[129,35056,34830],{"class":139},[129,35058,30875],{"class":5231},[129,35060,185],{"class":135},[129,35062,211],{"class":188},[129,35064,517],{"class":139},[129,35066,30930],{"class":5231},[129,35068,185],{"class":135},[129,35070,217],{"class":188},[129,35072,146],{"class":139},[129,35074,35075],{"class":131,"line":1688},[129,35076,31003],{"class":198},[129,35078,35079,35081,35083,35085],{"class":131,"line":1693},[129,35080,30846],{"class":188},[129,35082,31010],{"class":139},[129,35084,185],{"class":135},[129,35086,31015],{"class":139},[129,35088,35089],{"class":131,"line":1707},[129,35090,35091],{"class":198},"       # 定义全连接层\n",[129,35093,35094,35096,35099,35101,35103,35105,35107,35109,35111,35113,35115,35118],{"class":131,"line":1712},[129,35095,30846],{"class":188},[129,35097,35098],{"class":139},".f1",[129,35100,185],{"class":135},[129,35102,31032],{"class":139},[129,35104,483],{"class":188},[129,35106,594],{"class":135},[129,35108,483],{"class":188},[129,35110,594],{"class":135},[129,35112,34871],{"class":188},[129,35114,517],{"class":139},[129,35116,35117],{"class":188},"4096",[129,35119,146],{"class":139},[129,35121,35122,35124,35127,35129,35131,35133,35135,35137],{"class":131,"line":1741},[129,35123,30846],{"class":188},[129,35125,35126],{"class":139},".f2",[129,35128,185],{"class":135},[129,35130,31032],{"class":139},[129,35132,35117],{"class":188},[129,35134,517],{"class":139},[129,35136,35117],{"class":188},[129,35138,146],{"class":139},[129,35140,35141,35143,35146,35148,35150,35152,35154,35156],{"class":131,"line":1746},[129,35142,30846],{"class":188},[129,35144,35145],{"class":139},".f3",[129,35147,185],{"class":135},[129,35149,31032],{"class":139},[129,35151,35117],{"class":188},[129,35153,517],{"class":139},[129,35155,585],{"class":188},[129,35157,146],{"class":139},[129,35159,35160],{"class":131,"line":1763},[129,35161,2414],{"emptyLinePlaceholder":56},[129,35163,35164],{"class":131,"line":1768},[129,35165,35166],{"class":198},"    # 定义前向传播\n",[129,35168,35169,35171,35173],{"class":131,"line":1773},[129,35170,30802],{"class":135},[129,35172,31094],{"class":1977},[129,35174,31097],{"class":139},[129,35176,35177,35179,35181,35183,35186,35188],{"class":131,"line":1778},[129,35178,31102],{"class":139},[129,35180,185],{"class":135},[129,35182,30824],{"class":188},[129,35184,35185],{"class":139},".ReLu(",[129,35187,30824],{"class":188},[129,35189,31114],{"class":139},[129,35191,35192,35194,35196,35198],{"class":131,"line":1792},[129,35193,31102],{"class":139},[129,35195,185],{"class":135},[129,35197,30824],{"class":188},[129,35199,31125],{"class":139},[129,35201,35202,35204,35206,35208,35210,35212],{"class":131,"line":1797},[129,35203,31102],{"class":139},[129,35205,185],{"class":135},[129,35207,30824],{"class":188},[129,35209,35185],{"class":139},[129,35211,30824],{"class":188},[129,35213,31140],{"class":139},[129,35215,35216,35218,35220,35222],{"class":131,"line":2591},[129,35217,31102],{"class":139},[129,35219,185],{"class":135},[129,35221,30824],{"class":188},[129,35223,31151],{"class":139},[129,35225,35226,35228,35230,35232,35234,35236],{"class":131,"line":2605},[129,35227,31102],{"class":139},[129,35229,185],{"class":135},[129,35231,30824],{"class":188},[129,35233,35185],{"class":139},[129,35235,30824],{"class":188},[129,35237,35238],{"class":139},".c5(x))\n",[129,35240,35241,35243,35245,35247,35249,35251],{"class":131,"line":2613},[129,35242,31102],{"class":139},[129,35244,185],{"class":135},[129,35246,30824],{"class":188},[129,35248,35185],{"class":139},[129,35250,30824],{"class":188},[129,35252,35253],{"class":139},".c6(x))\n",[129,35255,35256,35258,35260,35262,35264,35266],{"class":131,"line":2618},[129,35257,31102],{"class":139},[129,35259,185],{"class":135},[129,35261,30824],{"class":188},[129,35263,35185],{"class":139},[129,35265,30824],{"class":188},[129,35267,35268],{"class":139},".c7(x))\n",[129,35270,35271,35273,35275,35277],{"class":131,"line":2624},[129,35272,31102],{"class":139},[129,35274,185],{"class":135},[129,35276,30824],{"class":188},[129,35278,35279],{"class":139},".s8(x)\n",[129,35281,35282],{"class":131,"line":2630},[129,35283,2414],{"emptyLinePlaceholder":56},[129,35285,35286],{"class":131,"line":2635},[129,35287,35288],{"class":198},"        # 展平加线性全连接层\n",[129,35290,35291,35293,35295,35297],{"class":131,"line":7963},[129,35292,31102],{"class":139},[129,35294,185],{"class":135},[129,35296,30824],{"class":188},[129,35298,31162],{"class":139},[129,35300,35301,35303,35305,35307,35309,35311],{"class":131,"line":7987},[129,35302,31102],{"class":139},[129,35304,185],{"class":135},[129,35306,30824],{"class":188},[129,35308,35185],{"class":139},[129,35310,30824],{"class":188},[129,35312,35313],{"class":139},".f1(x))\n",[129,35315,35316],{"class":131,"line":7992},[129,35317,35318],{"class":198},"        # 还需要dropout对神经元随机进行失活\n",[129,35320,35321,35323,35325,35328,35331],{"class":131,"line":7998},[129,35322,31102],{"class":139},[129,35324,185],{"class":135},[129,35326,35327],{"class":139},"F.dropout(x,",[129,35329,35330],{"class":188},"0.5",[129,35332,146],{"class":139},[129,35334,35335,35337,35339,35341,35343,35345],{"class":131,"line":8025},[129,35336,31102],{"class":139},[129,35338,185],{"class":135},[129,35340,30824],{"class":188},[129,35342,35185],{"class":139},[129,35344,30824],{"class":188},[129,35346,35347],{"class":139},".f2(x))\n",[129,35349,35350,35352,35354,35356,35358],{"class":131,"line":8030},[129,35351,31102],{"class":139},[129,35353,185],{"class":135},[129,35355,35327],{"class":139},[129,35357,35330],{"class":188},[129,35359,146],{"class":139},[129,35361,35362],{"class":131,"line":8036},[129,35363,35364],{"class":198},"        # 直接输出\n",[129,35366,35367,35369,35371,35373],{"class":131,"line":8048},[129,35368,31102],{"class":139},[129,35370,185],{"class":135},[129,35372,30824],{"class":188},[129,35374,35375],{"class":139},".f3(x)\n",[129,35377,35378],{"class":131,"line":8060},[129,35379,35380],{"class":198},"        # 前向传播输出\n",[129,35382,35383,35385],{"class":131,"line":8072},[129,35384,14767],{"class":135},[129,35386,31210],{"class":139},[129,35388,35389],{"class":131,"line":9731},[129,35390,35391],{"class":198},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[129,35393,35394,35396,35398,35400,35402],{"class":131,"line":9756},[129,35395,1545],{"class":135},[129,35397,31221],{"class":188},[129,35399,2963],{"class":135},[129,35401,31226],{"class":244},[129,35403,3753],{"class":139},[129,35405,35406,35408,35410,35412,35414,35416,35418,35420,35422],{"class":131,"line":9779},[129,35407,31238],{"class":139},[129,35409,185],{"class":135},[129,35411,30452],{"class":139},[129,35413,31245],{"class":244},[129,35415,1718],{"class":135},[129,35417,31250],{"class":139},[129,35419,1715],{"class":135},[129,35421,30477],{"class":244},[129,35423,146],{"class":139},[129,35425,35426],{"class":131,"line":9803},[129,35427,35428],{"class":198},"    # 模型实例化，然后将实例化的模型放到设备中\n",[129,35430,35431,35433,35435],{"class":131,"line":9808},[129,35432,31290],{"class":139},[129,35434,185],{"class":135},[129,35436,35437],{"class":139},"AlexNet().to(device)\n",[129,35439,35440,35442,35444,35446,35448,35451,35453,35455],{"class":131,"line":9813},[129,35441,31300],{"class":188},[129,35443,31303],{"class":139},[129,35445,357],{"class":188},[129,35447,517],{"class":139},[129,35449,35450],{"class":188},"227",[129,35452,517],{"class":139},[129,35454,35450],{"class":188},[129,35456,31316],{"class":139},[83,35458,35459],{"start":51},[86,35460,31329],{},[120,35462,35464],{"className":30379,"code":35463,"language":30381,"meta":42,"style":42},"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",[126,35465,35466,35472,35478,35488,35494,35504,35514,35524,35534,35544,35548,35559,35569,35573,35577,35581,35589,35601,35611,35627,35637,35669,35683,35693,35703,35707,35717,35731,35741,35751,35761,35767,35771,35775,35779,35783,35787,35795,35815,35819,35823,35827,35831,35835,35851,35855,35859,35867,35871,35875,35883,35887,35891,35895,35903,35907,35911,35915,35919,35927,35931,35939,35943,35951,35955,35963,35967,35975,35979,35983,35991,35995,35999,36003,36015,36039,36053,36057,36061,36065,36073,36077,36085,36089,36097,36101,36109,36113,36121,36125,36133,36137,36149,36153,36161,36165,36173,36177,36181,36185,36189,36197,36201,36217,36221,36229,36233,36237,36241,36245,36249,36253,36257,36273,36277,36289,36293,36305,36309,36321,36325,36333,36337,36345,36349,36353,36358,36364,36368,36377,36381,36398,36402,36411,36415,36433,36446,36451,36464,36468,36472,36480,36484,36488,36496,36500,36508,36512,36520,36524,36528,36570,36612,36616,36620,36636,36640,36656,36660,36664,36672,36676,36680,36692,36730,36735,36740,36749,36753,36767,36777,36783,36789,36795,36801,36805,36809,36815,36819,36823,36831,36835,36853,36857,36861,36865,36881,36885,36889,36893,36897,36901,36921,36941,36945,36949,36953,36961,36969,36973,36989,37009,37029,37033,37037,37045,37053,37057,37061,37065,37077,37081,37091,37099,37116],{"__ignoreMap":42},[129,35467,35468,35470],{"class":131,"line":132},[129,35469,30393],{"class":135},[129,35471,31823],{"class":139},[129,35473,35474,35476],{"class":131,"line":51},[129,35475,30393],{"class":135},[129,35477,31830],{"class":139},[129,35479,35480,35482,35484,35486],{"class":131,"line":1194},[129,35481,30393],{"class":135},[129,35483,31841],{"class":139},[129,35485,31384],{"class":135},[129,35487,31846],{"class":139},[129,35489,35490,35492],{"class":131,"line":1209},[129,35491,30393],{"class":135},[129,35493,30396],{"class":139},[129,35495,35496,35498,35500,35502],{"class":131,"line":1215},[129,35497,30738],{"class":135},[129,35499,31416],{"class":139},[129,35501,30393],{"class":135},[129,35503,31863],{"class":139},[129,35505,35506,35508,35510,35512],{"class":131,"line":1229},[129,35507,30738],{"class":135},[129,35509,31369],{"class":139},[129,35511,30393],{"class":135},[129,35513,31374],{"class":139},[129,35515,35516,35518,35520,35522],{"class":131,"line":1235},[129,35517,30738],{"class":135},[129,35519,31399],{"class":139},[129,35521,30393],{"class":135},[129,35523,31404],{"class":139},[129,35525,35526,35528,35530,35532],{"class":131,"line":1326},[129,35527,30393],{"class":135},[129,35529,31416],{"class":139},[129,35531,31384],{"class":135},[129,35533,31421],{"class":139},[129,35535,35536,35538,35540,35542],{"class":131,"line":1332},[129,35537,30393],{"class":135},[129,35539,31433],{"class":139},[129,35541,31384],{"class":135},[129,35543,31438],{"class":139},[129,35545,35546],{"class":131,"line":1344},[129,35547,31908],{"class":198},[129,35549,35550,35552,35554,35556],{"class":131,"line":1626},[129,35551,30738],{"class":135},[129,35553,31915],{"class":139},[129,35555,30393],{"class":135},[129,35557,35558],{"class":139}," AlexNet\n",[129,35560,35561,35563,35565,35567],{"class":131,"line":1631},[129,35562,30738],{"class":135},[129,35564,30741],{"class":139},[129,35566,30393],{"class":135},[129,35568,30746],{"class":139},[129,35570,35571],{"class":131,"line":1637},[129,35572,2414],{"emptyLinePlaceholder":56},[129,35574,35575],{"class":131,"line":1642},[129,35576,2414],{"emptyLinePlaceholder":56},[129,35578,35579],{"class":131,"line":1656},[129,35580,31943],{"class":198},[129,35582,35583,35585,35587],{"class":131,"line":1661},[129,35584,31948],{"class":135},[129,35586,31951],{"class":1977},[129,35588,31954],{"class":139},[129,35590,35591,35593,35595,35597,35599],{"class":131,"line":1667},[129,35592,31959],{"class":139},[129,35594,185],{"class":135},[129,35596,31456],{"class":139},[129,35598,31464],{"class":244},[129,35600,31467],{"class":139},[129,35602,35603,35605,35607,35609],{"class":131,"line":1688},[129,35604,31972],{"class":5231},[129,35606,185],{"class":135},[129,35608,31477],{"class":188},[129,35610,31467],{"class":139},[129,35612,35613,35615,35617,35619,35621,35623,35625],{"class":131,"line":1693},[129,35614,31983],{"class":5231},[129,35616,185],{"class":135},[129,35618,31494],{"class":139},[129,35620,31497],{"class":5231},[129,35622,185],{"class":135},[129,35624,35450],{"class":188},[129,35626,31505],{"class":139},[129,35628,35629,35631,35633,35635],{"class":131,"line":1707},[129,35630,32000],{"class":5231},[129,35632,185],{"class":135},[129,35634,31477],{"class":188},[129,35636,146],{"class":139},[129,35638,35639,35641,35643,35645,35647,35649,35651,35653,35655,35657,35659,35661,35663,35665,35667],{"class":131,"line":1712},[129,35640,32011],{"class":139},[129,35642,185],{"class":135},[129,35644,32016],{"class":139},[129,35646,32019],{"class":188},[129,35648,140],{"class":139},[129,35650,32024],{"class":188},[129,35652,594],{"class":135},[129,35654,7373],{"class":188},[129,35656,32031],{"class":139},[129,35658,32019],{"class":188},[129,35660,140],{"class":139},[129,35662,32038],{"class":188},[129,35664,594],{"class":135},[129,35666,7373],{"class":188},[129,35668,32045],{"class":139},[129,35670,35671,35673,35675,35677,35679,35681],{"class":131,"line":1741},[129,35672,32050],{"class":139},[129,35674,185],{"class":135},[129,35676,32055],{"class":139},[129,35678,31538],{"class":5231},[129,35680,185],{"class":135},[129,35682,31543],{"class":139},[129,35684,35685,35687,35689,35691],{"class":131,"line":1746},[129,35686,32066],{"class":5231},[129,35688,185],{"class":135},[129,35690,32071],{"class":188},[129,35692,31467],{"class":139},[129,35694,35695,35697,35699,35701],{"class":131,"line":1763},[129,35696,32078],{"class":5231},[129,35698,185],{"class":135},[129,35700,31477],{"class":188},[129,35702,31467],{"class":139},[129,35704,35705],{"class":131,"line":1768},[129,35706,32089],{"class":198},[129,35708,35709,35711,35713,35715],{"class":131,"line":1773},[129,35710,32094],{"class":5231},[129,35712,185],{"class":135},[129,35714,534],{"class":188},[129,35716,146],{"class":139},[129,35718,35719,35721,35723,35725,35727,35729],{"class":131,"line":1778},[129,35720,32105],{"class":139},[129,35722,185],{"class":135},[129,35724,31535],{"class":139},[129,35726,31538],{"class":5231},[129,35728,185],{"class":135},[129,35730,32116],{"class":139},[129,35732,35733,35735,35737,35739],{"class":131,"line":1792},[129,35734,32121],{"class":5231},[129,35736,185],{"class":135},[129,35738,32071],{"class":188},[129,35740,31467],{"class":139},[129,35742,35743,35745,35747,35749],{"class":131,"line":1797},[129,35744,32132],{"class":5231},[129,35746,185],{"class":135},[129,35748,31477],{"class":188},[129,35750,31467],{"class":139},[129,35752,35753,35755,35757,35759],{"class":131,"line":2591},[129,35754,32143],{"class":5231},[129,35756,185],{"class":135},[129,35758,534],{"class":188},[129,35760,146],{"class":139},[129,35762,35763,35765],{"class":131,"line":2605},[129,35764,4104],{"class":135},[129,35766,32156],{"class":139},[129,35768,35769],{"class":131,"line":2613},[129,35770,2414],{"emptyLinePlaceholder":56},[129,35772,35773],{"class":131,"line":2618},[129,35774,32165],{"class":198},[129,35776,35777],{"class":131,"line":2624},[129,35778,32170],{"class":198},[129,35780,35781],{"class":131,"line":2630},[129,35782,2414],{"emptyLinePlaceholder":56},[129,35784,35785],{"class":131,"line":2635},[129,35786,32179],{"class":198},[129,35788,35789,35791,35793],{"class":131,"line":7963},[129,35790,31948],{"class":135},[129,35792,32186],{"class":1977},[129,35794,32189],{"class":139},[129,35796,35797,35799,35801,35803,35805,35807,35809,35811,35813],{"class":131,"line":7987},[129,35798,31238],{"class":139},[129,35800,185],{"class":135},[129,35802,30452],{"class":139},[129,35804,31245],{"class":244},[129,35806,1718],{"class":135},[129,35808,31250],{"class":139},[129,35810,1715],{"class":135},[129,35812,32208],{"class":244},[129,35814,146],{"class":139},[129,35816,35817],{"class":131,"line":7992},[129,35818,2414],{"emptyLinePlaceholder":56},[129,35820,35821],{"class":131,"line":7998},[129,35822,2414],{"emptyLinePlaceholder":56},[129,35824,35825],{"class":131,"line":8025},[129,35826,32223],{"class":198},[129,35828,35829],{"class":131,"line":8030},[129,35830,32228],{"class":198},[129,35832,35833],{"class":131,"line":8036},[129,35834,32233],{"class":198},[129,35836,35837,35839,35841,35843,35845,35847,35849],{"class":131,"line":8048},[129,35838,32238],{"class":139},[129,35840,185],{"class":135},[129,35842,32243],{"class":139},[129,35844,32246],{"class":5231},[129,35846,185],{"class":135},[129,35848,32251],{"class":188},[129,35850,146],{"class":139},[129,35852,35853],{"class":131,"line":8060},[129,35854,2414],{"emptyLinePlaceholder":56},[129,35856,35857],{"class":131,"line":8072},[129,35858,32262],{"class":198},[129,35860,35861,35863,35865],{"class":131,"line":9731},[129,35862,32267],{"class":139},[129,35864,185],{"class":135},[129,35866,32272],{"class":139},[129,35868,35869],{"class":131,"line":9756},[129,35870,2414],{"emptyLinePlaceholder":56},[129,35872,35873],{"class":131,"line":9779},[129,35874,32281],{"class":198},[129,35876,35877,35879,35881],{"class":131,"line":9803},[129,35878,31290],{"class":139},[129,35880,185],{"class":135},[129,35882,32290],{"class":139},[129,35884,35885],{"class":131,"line":9808},[129,35886,32295],{"class":198},[129,35888,35889],{"class":131,"line":9813},[129,35890,32300],{"class":198},[129,35892,35893],{"class":131,"line":9818},[129,35894,32305],{"class":198},[129,35896,35897,35899,35901],{"class":131,"line":9827},[129,35898,32310],{"class":139},[129,35900,185],{"class":135},[129,35902,32315],{"class":139},[129,35904,35905],{"class":131,"line":9832},[129,35906,2414],{"emptyLinePlaceholder":56},[129,35908,35909],{"class":131,"line":9838},[129,35910,2414],{"emptyLinePlaceholder":56},[129,35912,35913],{"class":131,"line":9859},[129,35914,32328],{"class":198},[129,35916,35917],{"class":131,"line":9865},[129,35918,32333],{"class":198},[129,35920,35921,35923,35925],{"class":131,"line":9879},[129,35922,32338],{"class":139},[129,35924,185],{"class":135},[129,35926,32343],{"class":188},[129,35928,35929],{"class":131,"line":9885},[129,35930,32348],{"class":198},[129,35932,35933,35935,35937],{"class":131,"line":9912},[129,35934,32353],{"class":139},[129,35936,185],{"class":135},[129,35938,32358],{"class":139},[129,35940,35941],{"class":131,"line":9921},[129,35942,32363],{"class":198},[129,35944,35945,35947,35949],{"class":131,"line":9927},[129,35946,32368],{"class":139},[129,35948,185],{"class":135},[129,35950,32358],{"class":139},[129,35952,35953],{"class":131,"line":9935},[129,35954,32377],{"class":198},[129,35956,35957,35959,35961],{"class":131,"line":9940},[129,35958,32382],{"class":139},[129,35960,185],{"class":135},[129,35962,32358],{"class":139},[129,35964,35965],{"class":131,"line":16619},[129,35966,32391],{"class":198},[129,35968,35969,35971,35973],{"class":131,"line":16625},[129,35970,32396],{"class":139},[129,35972,185],{"class":135},[129,35974,32358],{"class":139},[129,35976,35977],{"class":131,"line":16648},[129,35978,2414],{"emptyLinePlaceholder":56},[129,35980,35981],{"class":131,"line":16654},[129,35982,32409],{"class":198},[129,35984,35985,35987,35989],{"class":131,"line":16677},[129,35986,32414],{"class":139},[129,35988,185],{"class":135},[129,35990,32419],{"class":139},[129,35992,35993],{"class":131,"line":16691},[129,35994,2414],{"emptyLinePlaceholder":56},[129,35996,35997],{"class":131,"line":16711},[129,35998,2414],{"emptyLinePlaceholder":56},[129,36000,36001],{"class":131,"line":16717},[129,36002,32432],{"class":198},[129,36004,36005,36007,36009,36011,36013],{"class":131,"line":16728},[129,36006,3215],{"class":135},[129,36008,32439],{"class":139},[129,36010,26044],{"class":135},[129,36012,32444],{"class":188},[129,36014,32447],{"class":139},[129,36016,36017,36019,36021,36023,36025,36027,36029,36031,36033,36035,36037],{"class":131,"line":16751},[129,36018,32452],{"class":188},[129,36020,140],{"class":139},[129,36022,32457],{"class":244},[129,36024,32460],{"class":188},[129,36026,723],{"class":244},[129,36028,32460],{"class":188},[129,36030,390],{"class":244},[129,36032,32469],{"class":139},[129,36034,671],{"class":135},[129,36036,357],{"class":188},[129,36038,30498],{"class":139},[129,36040,36041,36043,36045,36047,36049,36051],{"class":131,"line":16773},[129,36042,32452],{"class":188},[129,36044,140],{"class":139},[129,36046,32484],{"class":244},[129,36048,594],{"class":135},[129,36050,585],{"class":188},[129,36052,146],{"class":139},[129,36054,36055],{"class":131,"line":16778},[129,36056,2414],{"emptyLinePlaceholder":56},[129,36058,36059],{"class":131,"line":16784},[129,36060,32499],{"class":198},[129,36062,36063],{"class":131,"line":16798},[129,36064,32504],{"class":198},[129,36066,36067,36069,36071],{"class":131,"line":16811},[129,36068,32509],{"class":139},[129,36070,185],{"class":135},[129,36072,32343],{"class":188},[129,36074,36075],{"class":131,"line":16816},[129,36076,32518],{"class":198},[129,36078,36079,36081,36083],{"class":131,"line":16830},[129,36080,32523],{"class":139},[129,36082,185],{"class":135},[129,36084,3099],{"class":188},[129,36086,36087],{"class":131,"line":16835},[129,36088,32532],{"class":198},[129,36090,36091,36093,36095],{"class":131,"line":16841},[129,36092,32537],{"class":139},[129,36094,185],{"class":135},[129,36096,32343],{"class":188},[129,36098,36099],{"class":131,"line":16846},[129,36100,32546],{"class":198},[129,36102,36103,36105,36107],{"class":131,"line":16860},[129,36104,32551],{"class":139},[129,36106,185],{"class":135},[129,36108,3099],{"class":188},[129,36110,36111],{"class":131,"line":16865},[129,36112,32560],{"class":198},[129,36114,36115,36117,36119],{"class":131,"line":16870},[129,36116,32565],{"class":139},[129,36118,185],{"class":135},[129,36120,3099],{"class":188},[129,36122,36123],{"class":131,"line":16884},[129,36124,32574],{"class":198},[129,36126,36127,36129,36131],{"class":131,"line":16896},[129,36128,32579],{"class":139},[129,36130,185],{"class":135},[129,36132,3099],{"class":188},[129,36134,36135],{"class":131,"line":16901},[129,36136,32588],{"class":198},[129,36138,36139,36141,36143,36145,36147],{"class":131,"line":16914},[129,36140,3417],{"class":135},[129,36142,31602],{"class":139},[129,36144,26044],{"class":135},[129,36146,31607],{"class":188},[129,36148,32601],{"class":139},[129,36150,36151],{"class":131,"line":16919},[129,36152,32606],{"class":198},[129,36154,36155,36157,36159],{"class":131,"line":16924},[129,36156,32611],{"class":139},[129,36158,185],{"class":135},[129,36160,32616],{"class":139},[129,36162,36163],{"class":131,"line":16929},[129,36164,32621],{"class":198},[129,36166,36167,36169,36171],{"class":131,"line":16942},[129,36168,32626],{"class":139},[129,36170,185],{"class":135},[129,36172,32631],{"class":139},[129,36174,36175],{"class":131,"line":16947},[129,36176,32637],{"class":198},[129,36178,36179],{"class":131,"line":32634},[129,36180,32643],{"class":139},[129,36182,36183],{"class":131,"line":32640},[129,36184,32649],{"class":198},[129,36186,36187],{"class":131,"line":32646},[129,36188,32655],{"class":198},[129,36190,36191,36193,36195],{"class":131,"line":32652},[129,36192,32661],{"class":139},[129,36194,185],{"class":135},[129,36196,32666],{"class":139},[129,36198,36199],{"class":131,"line":32658},[129,36200,32672],{"class":198},[129,36202,36203,36205,36207,36209,36211,36213,36215],{"class":131,"line":32669},[129,36204,32678],{"class":139},[129,36206,185],{"class":135},[129,36208,32683],{"class":139},[129,36210,32686],{"class":5231},[129,36212,185],{"class":135},[129,36214,357],{"class":188},[129,36216,146],{"class":139},[129,36218,36219],{"class":131,"line":32675},[129,36220,32698],{"class":198},[129,36222,36223,36225,36227],{"class":131,"line":32695},[129,36224,32704],{"class":139},[129,36226,185],{"class":135},[129,36228,32709],{"class":139},[129,36230,36231],{"class":131,"line":32701},[129,36232,32715],{"class":198},[129,36234,36235],{"class":131,"line":32712},[129,36236,32721],{"class":139},[129,36238,36239],{"class":131,"line":32718},[129,36240,32727],{"class":198},[129,36242,36243],{"class":131,"line":32724},[129,36244,32733],{"class":139},[129,36246,36247],{"class":131,"line":32730},[129,36248,32739],{"class":198},[129,36250,36251],{"class":131,"line":32736},[129,36252,32745],{"class":139},[129,36254,36255],{"class":131,"line":32742},[129,36256,32751],{"class":198},[129,36258,36259,36261,36263,36265,36267,36269,36271],{"class":131,"line":32748},[129,36260,32757],{"class":139},[129,36262,9492],{"class":135},[129,36264,32762],{"class":139},[129,36266,594],{"class":135},[129,36268,32767],{"class":139},[129,36270,331],{"class":188},[129,36272,146],{"class":139},[129,36274,36275],{"class":131,"line":32754},[129,36276,32777],{"class":198},[129,36278,36279,36281,36283,36285,36287],{"class":131,"line":32774},[129,36280,32783],{"class":139},[129,36282,9492],{"class":135},[129,36284,32788],{"class":139},[129,36286,2963],{"class":135},[129,36288,32793],{"class":139},[129,36290,36291],{"class":131,"line":32780},[129,36292,32799],{"class":198},[129,36294,36295,36297,36299,36301,36303],{"class":131,"line":32796},[129,36296,32805],{"class":139},[129,36298,9492],{"class":135},[129,36300,32767],{"class":139},[129,36302,331],{"class":188},[129,36304,146],{"class":139},[129,36306,36307],{"class":131,"line":32802},[129,36308,32819],{"class":198},[129,36310,36311,36313,36315,36317,36319],{"class":131,"line":32816},[129,36312,3417],{"class":135},[129,36314,32827],{"class":139},[129,36316,26044],{"class":135},[129,36318,31607],{"class":188},[129,36320,32834],{"class":139},[129,36322,36323],{"class":131,"line":32822},[129,36324,32840],{"class":198},[129,36326,36327,36329,36331],{"class":131,"line":32837},[129,36328,32611],{"class":139},[129,36330,185],{"class":135},[129,36332,32616],{"class":139},[129,36334,36335],{"class":131,"line":32843},[129,36336,32855],{"class":198},[129,36338,36339,36341,36343],{"class":131,"line":32852},[129,36340,32626],{"class":139},[129,36342,185],{"class":135},[129,36344,32631],{"class":139},[129,36346,36347],{"class":131,"line":32858},[129,36348,32870],{"class":198},[129,36350,36351],{"class":131,"line":32867},[129,36352,32876],{"class":139},[129,36354,36355],{"class":131,"line":32873},[129,36356,36357],{"class":198},"            # 验证时不计算梯度以节省内存\u002F计算\n",[129,36359,36360,36362],{"class":131,"line":32879},[129,36361,32882],{"class":135},[129,36363,32885],{"class":139},[129,36365,36366],{"class":131,"line":32888},[129,36367,32891],{"class":198},[129,36369,36370,36373,36375],{"class":131,"line":32894},[129,36371,36372],{"class":139},"                output",[129,36374,185],{"class":135},[129,36376,32666],{"class":139},[129,36378,36379],{"class":131,"line":32905},[129,36380,32908],{"class":198},[129,36382,36383,36386,36388,36390,36392,36394,36396],{"class":131,"line":32911},[129,36384,36385],{"class":139},"                pre_lab",[129,36387,185],{"class":135},[129,36389,32683],{"class":139},[129,36391,32686],{"class":5231},[129,36393,185],{"class":135},[129,36395,357],{"class":188},[129,36397,146],{"class":139},[129,36399,36400],{"class":131,"line":32930},[129,36401,32933],{"class":198},[129,36403,36404,36407,36409],{"class":131,"line":32936},[129,36405,36406],{"class":139},"                val_batch_loss",[129,36408,185],{"class":135},[129,36410,32709],{"class":139},[129,36412,36413],{"class":131,"line":32947},[129,36414,32950],{"class":198},[129,36416,36417,36420,36422,36425,36427,36429,36431],{"class":131,"line":32953},[129,36418,36419],{"class":139},"                val_loss",[129,36421,9492],{"class":135},[129,36423,36424],{"class":139},"val_batch_loss.item()",[129,36426,594],{"class":135},[129,36428,32767],{"class":139},[129,36430,331],{"class":188},[129,36432,146],{"class":139},[129,36434,36435,36438,36440,36442,36444],{"class":131,"line":32973},[129,36436,36437],{"class":139},"                val_corrects",[129,36439,9492],{"class":135},[129,36441,32788],{"class":139},[129,36443,2963],{"class":135},[129,36445,32793],{"class":139},[129,36447,36448],{"class":131,"line":32989},[129,36449,36450],{"class":198},"            # 当前用于验证的样本数量\n",[129,36452,36453,36456,36458,36460,36462],{"class":131,"line":32995},[129,36454,36455],{"class":139},"            val_num",[129,36457,9492],{"class":135},[129,36459,32767],{"class":139},[129,36461,331],{"class":188},[129,36463,146],{"class":139},[129,36465,36466],{"class":131,"line":33009},[129,36467,33012],{"class":198},[129,36469,36470],{"class":131,"line":33015},[129,36471,33018],{"class":198},[129,36473,36474,36476,36478],{"class":131,"line":33021},[129,36475,33024],{"class":139},[129,36477,723],{"class":135},[129,36479,33029],{"class":139},[129,36481,36482],{"class":131,"line":33032},[129,36483,33035],{"class":198},[129,36485,36486],{"class":131,"line":33038},[129,36487,33041],{"class":198},[129,36489,36490,36492,36494],{"class":131,"line":33044},[129,36491,33047],{"class":139},[129,36493,723],{"class":135},[129,36495,33029],{"class":139},[129,36497,36498],{"class":131,"line":33054},[129,36499,33057],{"class":198},[129,36501,36502,36504,36506],{"class":131,"line":33060},[129,36503,33063],{"class":139},[129,36505,723],{"class":135},[129,36507,33068],{"class":139},[129,36509,36510],{"class":131,"line":33071},[129,36511,33074],{"class":198},[129,36513,36514,36516,36518],{"class":131,"line":33077},[129,36515,33080],{"class":139},[129,36517,723],{"class":135},[129,36519,33068],{"class":139},[129,36521,36522],{"class":131,"line":33087},[129,36523,2414],{"emptyLinePlaceholder":56},[129,36525,36526],{"class":131,"line":33092},[129,36527,33095],{"class":198},[129,36529,36530,36532,36534,36536,36538,36540,36542,36544,36546,36548,36550,36552,36554,36556,36558,36560,36562,36564,36566,36568],{"class":131,"line":33098},[129,36531,32452],{"class":188},[129,36533,140],{"class":139},[129,36535,3606],{"class":244},[129,36537,32460],{"class":188},[129,36539,33109],{"class":244},[129,36541,1035],{"class":188},[129,36543,33114],{"class":135},[129,36545,1085],{"class":188},[129,36547,33119],{"class":244},[129,36549,1035],{"class":188},[129,36551,33114],{"class":135},[129,36553,1085],{"class":188},[129,36555,3606],{"class":244},[129,36557,33130],{"class":139},[129,36559,671],{"class":135},[129,36561,357],{"class":188},[129,36563,33137],{"class":139},[129,36565,671],{"class":135},[129,36567,357],{"class":188},[129,36569,33144],{"class":139},[129,36571,36572,36574,36576,36578,36580,36582,36584,36586,36588,36590,36592,36594,36596,36598,36600,36602,36604,36606,36608,36610],{"class":131,"line":33147},[129,36573,32452],{"class":188},[129,36575,140],{"class":139},[129,36577,3606],{"class":244},[129,36579,32460],{"class":188},[129,36581,33158],{"class":244},[129,36583,1035],{"class":188},[129,36585,33114],{"class":135},[129,36587,1085],{"class":188},[129,36589,33167],{"class":244},[129,36591,1035],{"class":188},[129,36593,33114],{"class":135},[129,36595,1085],{"class":188},[129,36597,3606],{"class":244},[129,36599,33178],{"class":139},[129,36601,671],{"class":135},[129,36603,357],{"class":188},[129,36605,33185],{"class":139},[129,36607,671],{"class":135},[129,36609,357],{"class":188},[129,36611,33144],{"class":139},[129,36613,36614],{"class":131,"line":33194},[129,36615,2414],{"emptyLinePlaceholder":56},[129,36617,36618],{"class":131,"line":33199},[129,36619,33202],{"class":198},[129,36621,36622,36624,36626,36628,36630,36632,36634],{"class":131,"line":33205},[129,36623,2511],{"class":135},[129,36625,33210],{"class":139},[129,36627,671],{"class":135},[129,36629,357],{"class":188},[129,36631,1079],{"class":139},[129,36633,1099],{"class":135},[129,36635,33221],{"class":139},[129,36637,36638],{"class":131,"line":33224},[129,36639,33227],{"class":198},[129,36641,36642,36644,36646,36648,36650,36652,36654],{"class":131,"line":33230},[129,36643,33233],{"class":139},[129,36645,179],{"class":188},[129,36647,185],{"class":135},[129,36649,33240],{"class":139},[129,36651,671],{"class":135},[129,36653,357],{"class":188},[129,36655,33247],{"class":139},[129,36657,36658],{"class":131,"line":33250},[129,36659,33253],{"class":198},[129,36661,36662],{"class":131,"line":33256},[129,36663,33259],{"class":198},[129,36665,36666,36668,36670],{"class":131,"line":33262},[129,36667,33265],{"class":139},[129,36669,185],{"class":135},[129,36671,32315],{"class":139},[129,36673,36674],{"class":131,"line":33272},[129,36675,2414],{"emptyLinePlaceholder":56},[129,36677,36678],{"class":131,"line":33277},[129,36679,33280],{"class":198},[129,36681,36682,36684,36686,36688,36690],{"class":131,"line":33283},[129,36683,33286],{"class":139},[129,36685,185],{"class":135},[129,36687,33291],{"class":139},[129,36689,671],{"class":135},[129,36691,33296],{"class":139},[129,36693,36694,36696,36698,36700,36702,36704,36706,36708,36710,36712,36714,36716,36718,36720,36722,36724,36726,36728],{"class":131,"line":33299},[129,36695,32452],{"class":188},[129,36697,140],{"class":139},[129,36699,33306],{"class":244},[129,36701,1035],{"class":188},[129,36703,33311],{"class":135},[129,36705,1085],{"class":188},[129,36707,683],{"class":244},[129,36709,1035],{"class":188},[129,36711,33311],{"class":135},[129,36713,1085],{"class":188},[129,36715,33324],{"class":244},[129,36717,33327],{"class":139},[129,36719,33330],{"class":135},[129,36721,1046],{"class":188},[129,36723,33335],{"class":139},[129,36725,467],{"class":135},[129,36727,1046],{"class":188},[129,36729,30498],{"class":139},[129,36731,36732],{"class":131,"line":33344},[129,36733,36734],{"class":198},"    # 选择最优参数并保存\n",[129,36736,36737],{"class":131,"line":33350},[129,36738,36739],{"class":198},"    # 保存最佳模型权重字典\n",[129,36741,36742,36745,36747],{"class":131,"line":33356},[129,36743,36744],{"class":139},"    torch.save(best_model_wts,",[129,36746,33368],{"class":244},[129,36748,146],{"class":139},[129,36750,36751],{"class":131,"line":33362},[129,36752,33388],{"class":198},[129,36754,36755,36757,36759,36761,36763,36765],{"class":131,"line":33373},[129,36756,33394],{"class":139},[129,36758,185],{"class":135},[129,36760,33399],{"class":139},[129,36762,33402],{"class":5231},[129,36764,185],{"class":135},[129,36766,1560],{"class":139},[129,36768,36769,36771,36773,36775],{"class":131,"line":33379},[129,36770,33412],{"class":244},[129,36772,998],{"class":139},[129,36774,33417],{"class":188},[129,36776,33420],{"class":139},[129,36778,36779,36781],{"class":131,"line":33385},[129,36780,33426],{"class":244},[129,36782,33429],{"class":139},[129,36784,36785,36787],{"class":131,"line":33391},[129,36786,33435],{"class":244},[129,36788,33438],{"class":139},[129,36790,36791,36793],{"class":131,"line":33409},[129,36792,33444],{"class":244},[129,36794,33447],{"class":139},[129,36796,36797,36799],{"class":131,"line":33423},[129,36798,33453],{"class":244},[129,36800,33456],{"class":139},[129,36802,36803],{"class":131,"line":33432},[129,36804,33462],{"class":139},[129,36806,36807],{"class":131,"line":33441},[129,36808,33468],{"class":198},[129,36810,36811,36813],{"class":131,"line":33450},[129,36812,4104],{"class":135},[129,36814,33476],{"class":139},[129,36816,36817],{"class":131,"line":33459},[129,36818,2414],{"emptyLinePlaceholder":56},[129,36820,36821],{"class":131,"line":33465},[129,36822,33487],{"class":198},[129,36824,36825,36827,36829],{"class":131,"line":33471},[129,36826,31948],{"class":135},[129,36828,33495],{"class":1977},[129,36830,33498],{"class":139},[129,36832,36833],{"class":131,"line":33479},[129,36834,33504],{"class":198},[129,36836,36837,36839,36841,36843,36845,36847,36849,36851],{"class":131,"line":33484},[129,36838,33510],{"class":139},[129,36840,31694],{"class":5231},[129,36842,185],{"class":135},[129,36844,140],{"class":139},[129,36846,637],{"class":188},[129,36848,517],{"class":139},[129,36850,432],{"class":188},[129,36852,30498],{"class":139},[129,36854,36855],{"class":131,"line":33490},[129,36856,33530],{"class":198},[129,36858,36859],{"class":131,"line":33501},[129,36860,33536],{"class":198},[129,36862,36863],{"class":131,"line":33507},[129,36864,33542],{"class":198},[129,36866,36867,36869,36871,36873,36875,36877,36879],{"class":131,"line":33527},[129,36868,31728],{"class":139},[129,36870,357],{"class":188},[129,36872,517],{"class":139},[129,36874,217],{"class":188},[129,36876,517],{"class":139},[129,36878,357],{"class":188},[129,36880,146],{"class":139},[129,36882,36883],{"class":131,"line":33533},[129,36884,33565],{"class":198},[129,36886,36887],{"class":131,"line":33539},[129,36888,33571],{"class":198},[129,36890,36891],{"class":131,"line":33545},[129,36892,33577],{"class":198},[129,36894,36895],{"class":131,"line":33562},[129,36896,33583],{"class":198},[129,36898,36899],{"class":131,"line":33568},[129,36900,33589],{"class":198},[129,36902,36903,36905,36907,36909,36911,36913,36915,36917,36919],{"class":131,"line":33574},[129,36904,33595],{"class":139},[129,36906,33598],{"class":244},[129,36908,33601],{"class":139},[129,36910,33604],{"class":244},[129,36912,517],{"class":139},[129,36914,33609],{"class":5231},[129,36916,185],{"class":135},[129,36918,33614],{"class":244},[129,36920,146],{"class":139},[129,36922,36923,36925,36927,36929,36931,36933,36935,36937,36939],{"class":131,"line":33580},[129,36924,33595],{"class":139},[129,36926,33598],{"class":244},[129,36928,33626],{"class":139},[129,36930,33629],{"class":244},[129,36932,517],{"class":139},[129,36934,33609],{"class":5231},[129,36936,185],{"class":135},[129,36938,33638],{"class":244},[129,36940,146],{"class":139},[129,36942,36943],{"class":131,"line":33586},[129,36944,33646],{"class":198},[129,36946,36947],{"class":131,"line":33592},[129,36948,33652],{"class":139},[129,36950,36951],{"class":131,"line":33619},[129,36952,33658],{"class":198},[129,36954,36955,36957,36959],{"class":131,"line":33643},[129,36956,33664],{"class":139},[129,36958,33667],{"class":244},[129,36960,146],{"class":139},[129,36962,36963,36965,36967],{"class":131,"line":33649},[129,36964,33675],{"class":139},[129,36966,33678],{"class":244},[129,36968,146],{"class":139},[129,36970,36971],{"class":131,"line":33655},[129,36972,33686],{"class":198},[129,36974,36975,36977,36979,36981,36983,36985,36987],{"class":131,"line":33661},[129,36976,31728],{"class":139},[129,36978,357],{"class":188},[129,36980,517],{"class":139},[129,36982,217],{"class":188},[129,36984,517],{"class":139},[129,36986,217],{"class":188},[129,36988,146],{"class":139},[129,36990,36991,36993,36995,36997,36999,37001,37003,37005,37007],{"class":131,"line":33672},[129,36992,33595],{"class":139},[129,36994,33598],{"class":244},[129,36996,33713],{"class":139},[129,36998,33604],{"class":244},[129,37000,517],{"class":139},[129,37002,33609],{"class":5231},[129,37004,185],{"class":135},[129,37006,33724],{"class":244},[129,37008,146],{"class":139},[129,37010,37011,37013,37015,37017,37019,37021,37023,37025,37027],{"class":131,"line":33683},[129,37012,33595],{"class":139},[129,37014,33598],{"class":244},[129,37016,33736],{"class":139},[129,37018,33629],{"class":244},[129,37020,517],{"class":139},[129,37022,33609],{"class":5231},[129,37024,185],{"class":135},[129,37026,33747],{"class":244},[129,37028,146],{"class":139},[129,37030,37031],{"class":131,"line":33689},[129,37032,33755],{"class":198},[129,37034,37035],{"class":131,"line":33706},[129,37036,33652],{"class":139},[129,37038,37039,37041,37043],{"class":131,"line":33729},[129,37040,33664],{"class":139},[129,37042,33598],{"class":244},[129,37044,146],{"class":139},[129,37046,37047,37049,37051],{"class":131,"line":33752},[129,37048,33675],{"class":139},[129,37050,33777],{"class":244},[129,37052,146],{"class":139},[129,37054,37055],{"class":131,"line":33758},[129,37056,33785],{"class":139},[129,37058,37059],{"class":131,"line":33763},[129,37060,2414],{"emptyLinePlaceholder":56},[129,37062,37063],{"class":131,"line":33772},[129,37064,33796],{"class":198},[129,37066,37067,37069,37071,37073,37075],{"class":131,"line":33782},[129,37068,1545],{"class":135},[129,37070,31221],{"class":188},[129,37072,2963],{"class":135},[129,37074,31226],{"class":244},[129,37076,3753],{"class":139},[129,37078,37079],{"class":131,"line":33788},[129,37080,33815],{"class":198},[129,37082,37083,37086,37088],{"class":131,"line":33793},[129,37084,37085],{"class":139},"    AlexNet",[129,37087,185],{"class":135},[129,37089,37090],{"class":139},"AlexNet()\n",[129,37092,37093,37095,37097],{"class":131,"line":33799},[129,37094,33832],{"class":139},[129,37096,185],{"class":135},[129,37098,33837],{"class":139},[129,37100,37101,37103,37105,37108,37110,37112,37114],{"class":131,"line":33812},[129,37102,33394],{"class":139},[129,37104,185],{"class":135},[129,37106,37107],{"class":139},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[129,37109,33850],{"class":5231},[129,37111,185],{"class":135},[129,37113,839],{"class":188},[129,37115,146],{"class":139},[129,37117,37118],{"class":131,"line":33818},[129,37119,33862],{"class":139},[83,37121,37122],{"start":1194},[86,37123,33875],{},[120,37125,37127],{"className":30379,"code":37126,"language":30381,"meta":42,"style":42},"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",[126,37128,37129,37135,37145,37155,37165,37169,37179,37189,37200,37204,37208,37212,37220,37236,37246,37262,37272,37286,37290,37300,37310,37320,37326,37330,37334,37342,37346,37362,37370,37374,37378,37386,37394,37398,37402,37406,37410,37416,37420,37430,37438,37446,37450,37454,37458,37466,37470,37486,37490,37494,37498,37510,37514,37526,37530,37534,37546,37550,37560,37564,37568,37580,37584,37592,37596,37600,37608,37612,37620,37624,37628,37632,37636,37640,37656,37664,37668,37672,37720,37726,37730,37740,37748,37756,37760,37764,37768,37772,37780,37784,37800,37804,37812,37820],{"__ignoreMap":42},[129,37130,37131,37133],{"class":131,"line":132},[129,37132,30393],{"class":135},[129,37134,30396],{"class":139},[129,37136,37137,37139,37141,37143],{"class":131,"line":51},[129,37138,30393],{"class":135},[129,37140,31416],{"class":139},[129,37142,31384],{"class":135},[129,37144,31421],{"class":139},[129,37146,37147,37149,37151,37153],{"class":131,"line":1194},[129,37148,30738],{"class":135},[129,37150,33903],{"class":139},[129,37152,30393],{"class":135},[129,37154,33908],{"class":139},[129,37156,37157,37159,37161,37163],{"class":131,"line":1209},[129,37158,30738],{"class":135},[129,37160,31399],{"class":139},[129,37162,30393],{"class":135},[129,37164,31404],{"class":139},[129,37166,37167],{"class":131,"line":1215},[129,37168,33923],{"class":198},[129,37170,37171,37173,37175,37177],{"class":131,"line":1229},[129,37172,30738],{"class":135},[129,37174,31369],{"class":139},[129,37176,30393],{"class":135},[129,37178,31374],{"class":139},[129,37180,37181,37183,37185,37187],{"class":131,"line":1235},[129,37182,30738],{"class":135},[129,37184,31915],{"class":139},[129,37186,30393],{"class":135},[129,37188,35558],{"class":139},[129,37190,37191,37193,37196,37198],{"class":131,"line":1326},[129,37192,30738],{"class":135},[129,37194,37195],{"class":139}," 练习.AlexNet.model ",[129,37197,30393],{"class":135},[129,37199,35558],{"class":139},[129,37201,37202],{"class":131,"line":1332},[129,37203,2414],{"emptyLinePlaceholder":56},[129,37205,37206],{"class":131,"line":1344},[129,37207,2414],{"emptyLinePlaceholder":56},[129,37209,37210],{"class":131,"line":1626},[129,37211,33952],{"class":198},[129,37213,37214,37216,37218],{"class":131,"line":1631},[129,37215,31948],{"class":135},[129,37217,33959],{"class":1977},[129,37219,31954],{"class":139},[129,37221,37222,37224,37226,37228,37230,37232,37234],{"class":131,"line":1637},[129,37223,33966],{"class":139},[129,37225,185],{"class":135},[129,37227,31456],{"class":139},[129,37229,31459],{"class":5231},[129,37231,185],{"class":135},[129,37233,31464],{"class":244},[129,37235,31467],{"class":139},[129,37237,37238,37240,37242,37244],{"class":131,"line":1642},[129,37239,33983],{"class":5231},[129,37241,185],{"class":135},[129,37243,33988],{"class":188},[129,37245,31467],{"class":139},[129,37247,37248,37250,37252,37254,37256,37258,37260],{"class":131,"line":1656},[129,37249,33995],{"class":5231},[129,37251,185],{"class":135},[129,37253,31494],{"class":139},[129,37255,31497],{"class":5231},[129,37257,185],{"class":135},[129,37259,35450],{"class":188},[129,37261,31505],{"class":139},[129,37263,37264,37266,37268,37270],{"class":131,"line":1661},[129,37265,34012],{"class":5231},[129,37267,185],{"class":135},[129,37269,31477],{"class":188},[129,37271,146],{"class":139},[129,37273,37274,37276,37278,37280,37282,37284],{"class":131,"line":1667},[129,37275,34023],{"class":139},[129,37277,185],{"class":135},[129,37279,31535],{"class":139},[129,37281,31538],{"class":5231},[129,37283,185],{"class":135},[129,37285,34034],{"class":139},[129,37287,37288],{"class":131,"line":1688},[129,37289,34039],{"class":198},[129,37291,37292,37294,37296,37298],{"class":131,"line":1693},[129,37293,34044],{"class":5231},[129,37295,185],{"class":135},[129,37297,357],{"class":188},[129,37299,31467],{"class":139},[129,37301,37302,37304,37306,37308],{"class":131,"line":1707},[129,37303,34055],{"class":5231},[129,37305,185],{"class":135},[129,37307,31477],{"class":188},[129,37309,31467],{"class":139},[129,37311,37312,37314,37316,37318],{"class":131,"line":1712},[129,37313,34066],{"class":5231},[129,37315,185],{"class":135},[129,37317,331],{"class":188},[129,37319,146],{"class":139},[129,37321,37322,37324],{"class":131,"line":1741},[129,37323,4104],{"class":135},[129,37325,34079],{"class":139},[129,37327,37328],{"class":131,"line":1746},[129,37329,2414],{"emptyLinePlaceholder":56},[129,37331,37332],{"class":131,"line":1763},[129,37333,34088],{"class":198},[129,37335,37336,37338,37340],{"class":131,"line":1768},[129,37337,31948],{"class":135},[129,37339,34095],{"class":1977},[129,37341,34098],{"class":139},[129,37343,37344],{"class":131,"line":1773},[129,37345,34103],{"class":198},[129,37347,37348,37350,37352,37354,37356,37358,37360],{"class":131,"line":1778},[129,37349,31238],{"class":139},[129,37351,185],{"class":135},[129,37353,31245],{"class":244},[129,37355,1718],{"class":135},[129,37357,31250],{"class":139},[129,37359,1715],{"class":135},[129,37361,34120],{"class":244},[129,37363,37364,37366,37368],{"class":131,"line":1792},[129,37365,31290],{"class":139},[129,37367,185],{"class":135},[129,37369,32290],{"class":139},[129,37371,37372],{"class":131,"line":1797},[129,37373,2414],{"emptyLinePlaceholder":56},[129,37375,37376],{"class":131,"line":2591},[129,37377,34137],{"class":198},[129,37379,37380,37382,37384],{"class":131,"line":2605},[129,37381,34142],{"class":139},[129,37383,185],{"class":135},[129,37385,32343],{"class":188},[129,37387,37388,37390,37392],{"class":131,"line":2613},[129,37389,34151],{"class":139},[129,37391,185],{"class":135},[129,37393,3099],{"class":188},[129,37395,37396],{"class":131,"line":2618},[129,37397,2414],{"emptyLinePlaceholder":56},[129,37399,37400],{"class":131,"line":2624},[129,37401,34164],{"class":198},[129,37403,37404],{"class":131,"line":2630},[129,37405,34169],{"class":198},[129,37407,37408],{"class":131,"line":2635},[129,37409,34174],{"class":198},[129,37411,37412,37414],{"class":131,"line":7963},[129,37413,34179],{"class":135},[129,37415,32885],{"class":139},[129,37417,37418],{"class":131,"line":7987},[129,37419,34186],{"class":198},[129,37421,37422,37424,37426,37428],{"class":131,"line":7992},[129,37423,3417],{"class":135},[129,37425,34193],{"class":139},[129,37427,26044],{"class":135},[129,37429,34198],{"class":139},[129,37431,37432,37434,37436],{"class":131,"line":7998},[129,37433,34203],{"class":139},[129,37435,185],{"class":135},[129,37437,34208],{"class":139},[129,37439,37440,37442,37444],{"class":131,"line":8025},[129,37441,34213],{"class":139},[129,37443,185],{"class":135},[129,37445,34218],{"class":139},[129,37447,37448],{"class":131,"line":8030},[129,37449,34223],{"class":198},[129,37451,37452],{"class":131,"line":8036},[129,37453,32876],{"class":139},[129,37455,37456],{"class":131,"line":8048},[129,37457,34232],{"class":198},[129,37459,37460,37462,37464],{"class":131,"line":8060},[129,37461,32661],{"class":139},[129,37463,185],{"class":135},[129,37465,34241],{"class":139},[129,37467,37468],{"class":131,"line":8072},[129,37469,34246],{"class":198},[129,37471,37472,37474,37476,37478,37480,37482,37484],{"class":131,"line":9731},[129,37473,32678],{"class":139},[129,37475,185],{"class":135},[129,37477,32683],{"class":139},[129,37479,32686],{"class":5231},[129,37481,185],{"class":135},[129,37483,357],{"class":188},[129,37485,146],{"class":139},[129,37487,37488],{"class":131,"line":9756},[129,37489,34267],{"class":198},[129,37491,37492],{"class":131,"line":9779},[129,37493,34272],{"class":198},[129,37495,37496],{"class":131,"line":9803},[129,37497,34277],{"class":198},[129,37499,37500,37502,37504,37506,37508],{"class":131,"line":9808},[129,37501,34282],{"class":139},[129,37503,9492],{"class":135},[129,37505,32788],{"class":139},[129,37507,2963],{"class":135},[129,37509,34291],{"class":139},[129,37511,37512],{"class":131,"line":9813},[129,37513,34296],{"class":198},[129,37515,37516,37518,37520,37522,37524],{"class":131,"line":9818},[129,37517,34301],{"class":139},[129,37519,9492],{"class":135},[129,37521,34306],{"class":139},[129,37523,331],{"class":188},[129,37525,146],{"class":139},[129,37527,37528],{"class":131,"line":9827},[129,37529,2414],{"emptyLinePlaceholder":56},[129,37531,37532],{"class":131,"line":9832},[129,37533,34319],{"class":198},[129,37535,37536,37538,37540,37542,37544],{"class":131,"line":9838},[129,37537,34324],{"class":139},[129,37539,185],{"class":135},[129,37541,34329],{"class":139},[129,37543,723],{"class":135},[129,37545,34334],{"class":139},[129,37547,37548],{"class":131,"line":9859},[129,37549,34339],{"class":198},[129,37551,37552,37554,37556,37558],{"class":131,"line":9865},[129,37553,32452],{"class":188},[129,37555,140],{"class":139},[129,37557,34348],{"class":244},[129,37559,34351],{"class":139},[129,37561,37562],{"class":131,"line":9879},[129,37563,2414],{"emptyLinePlaceholder":56},[129,37565,37566],{"class":131,"line":9885},[129,37567,34360],{"class":198},[129,37569,37570,37572,37574,37576,37578],{"class":131,"line":9912},[129,37571,1545],{"class":135},[129,37573,31221],{"class":188},[129,37575,2963],{"class":135},[129,37577,31226],{"class":244},[129,37579,3753],{"class":139},[129,37581,37582],{"class":131,"line":9921},[129,37583,34377],{"class":198},[129,37585,37586,37588,37590],{"class":131,"line":9927},[129,37587,31290],{"class":139},[129,37589,185],{"class":135},[129,37591,37090],{"class":139},[129,37593,37594],{"class":131,"line":9935},[129,37595,34390],{"class":198},[129,37597,37598],{"class":131,"line":9940},[129,37599,34395],{"class":198},[129,37601,37602,37604,37606],{"class":131,"line":16619},[129,37603,34400],{"class":139},[129,37605,34403],{"class":244},[129,37607,30498],{"class":139},[129,37609,37610],{"class":131,"line":16625},[129,37611,34410],{"class":198},[129,37613,37614,37616,37618],{"class":131,"line":16648},[129,37615,34023],{"class":139},[129,37617,185],{"class":135},[129,37619,34419],{"class":139},[129,37621,37622],{"class":131,"line":16654},[129,37623,34424],{"class":198},[129,37625,37626],{"class":131,"line":16677},[129,37627,34429],{"class":139},[129,37629,37630],{"class":131,"line":16691},[129,37631,2414],{"emptyLinePlaceholder":56},[129,37633,37634],{"class":131,"line":16711},[129,37635,34438],{"class":198},[129,37637,37638],{"class":131,"line":16717},[129,37639,34443],{"class":198},[129,37641,37642,37644,37646,37648,37650,37652,37654],{"class":131,"line":16728},[129,37643,31238],{"class":139},[129,37645,185],{"class":135},[129,37647,31245],{"class":244},[129,37649,1718],{"class":135},[129,37651,31250],{"class":139},[129,37653,1715],{"class":135},[129,37655,34120],{"class":244},[129,37657,37658,37660,37662],{"class":131,"line":16751},[129,37659,31290],{"class":139},[129,37661,185],{"class":135},[129,37663,32290],{"class":139},[129,37665,37666],{"class":131,"line":16773},[129,37667,34472],{"class":198},[129,37669,37670],{"class":131,"line":16778},[129,37671,34477],{"class":198},[129,37673,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696,37698,37700,37702,37704,37706,37708,37710,37712,37714,37716,37718],{"class":131,"line":16784},[129,37675,34482],{"class":139},[129,37677,185],{"class":135},[129,37679,1029],{"class":139},[129,37681,34489],{"class":244},[129,37683,517],{"class":139},[129,37685,34494],{"class":244},[129,37687,517],{"class":139},[129,37689,34499],{"class":244},[129,37691,517],{"class":139},[129,37693,34504],{"class":244},[129,37695,517],{"class":139},[129,37697,34509],{"class":244},[129,37699,517],{"class":139},[129,37701,34514],{"class":244},[129,37703,517],{"class":139},[129,37705,34519],{"class":244},[129,37707,517],{"class":139},[129,37709,34524],{"class":244},[129,37711,517],{"class":139},[129,37713,34529],{"class":244},[129,37715,517],{"class":139},[129,37717,34534],{"class":244},[129,37719,33247],{"class":139},[129,37721,37722,37724],{"class":131,"line":16798},[129,37723,34179],{"class":135},[129,37725,32885],{"class":139},[129,37727,37728],{"class":131,"line":16811},[129,37729,34547],{"class":198},[129,37731,37732,37734,37736,37738],{"class":131,"line":16816},[129,37733,3417],{"class":135},[129,37735,34554],{"class":139},[129,37737,26044],{"class":135},[129,37739,34198],{"class":139},[129,37741,37742,37744,37746],{"class":131,"line":16830},[129,37743,32611],{"class":139},[129,37745,185],{"class":135},[129,37747,32616],{"class":139},[129,37749,37750,37752,37754],{"class":131,"line":16835},[129,37751,32626],{"class":139},[129,37753,185],{"class":135},[129,37755,32631],{"class":139},[129,37757,37758],{"class":131,"line":16841},[129,37759,2414],{"emptyLinePlaceholder":56},[129,37761,37762],{"class":131,"line":16846},[129,37763,34583],{"class":198},[129,37765,37766],{"class":131,"line":16860},[129,37767,32876],{"class":139},[129,37769,37770],{"class":131,"line":16865},[129,37771,34592],{"class":198},[129,37773,37774,37776,37778],{"class":131,"line":16870},[129,37775,32661],{"class":139},[129,37777,185],{"class":135},[129,37779,32666],{"class":139},[129,37781,37782],{"class":131,"line":16884},[129,37783,34605],{"class":198},[129,37785,37786,37788,37790,37792,37794,37796,37798],{"class":131,"line":16896},[129,37787,32678],{"class":139},[129,37789,185],{"class":135},[129,37791,32683],{"class":139},[129,37793,32686],{"class":5231},[129,37795,185],{"class":135},[129,37797,357],{"class":188},[129,37799,146],{"class":139},[129,37801,37802],{"class":131,"line":16901},[129,37803,34626],{"class":198},[129,37805,37806,37808,37810],{"class":131,"line":16914},[129,37807,34631],{"class":139},[129,37809,185],{"class":135},[129,37811,34636],{"class":139},[129,37813,37814,37816,37818],{"class":131,"line":16919},[129,37815,34641],{"class":139},[129,37817,185],{"class":135},[129,37819,34646],{"class":139},[129,37821,37822,37824,37826,37828,37830,37832,37834,37836],{"class":131,"line":16924},[129,37823,34651],{"class":188},[129,37825,140],{"class":139},[129,37827,34656],{"class":244},[129,37829,34659],{"class":139},[129,37831,34662],{"class":244},[129,37833,517],{"class":139},[129,37835,34667],{"class":244},[129,37837,34670],{"class":139},[100,37839,37841],{"id":37840},"_22vgg","2.2.VGG",[22013,37843,37845],{"id":37844},"_221原理","2.2.1.原理",[14,37847,37848],{},[40,37849],{"alt":42,"src":37850},"\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,37852,37853],{},[40,37854],{"alt":42,"src":37855},"\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,37857,37858],{},[40,37859],{"alt":42,"src":37860},"\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,37862,37863],{},"参数详细描述：",[14,37865,37866],{},[40,37867],{"alt":42,"src":37868},"\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,37870,37871],{},[40,37872],{"alt":42,"src":37873},"\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,37875,37876],{},[40,37877],{"alt":42,"src":37878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,37880,37881],{},[40,37882],{"alt":42,"src":37883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[14,37885,37886],{},[40,37887],{"alt":42,"src":37888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-022.png",[22013,37890,37892],{"id":37891},"_222代码实现","2.2.2.代码实现",[83,37894,37895],{},[86,37896,37897],{},"网络搭建",[120,37899,37901],{"className":30379,"code":37900,"language":30381,"meta":42,"style":42},"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",[126,37902,37903,37909,37921,37931,37941,37945,37962,37970,37989,37994,37999,38011,38049,38054,38090,38094,38123,38128,38133,38144,38180,38184,38220,38224,38252,38256,38261,38272,38308,38312,38348,38352,38388,38392,38420,38424,38429,38440,38477,38481,38517,38521,38557,38561,38589,38593,38598,38609,38645,38649,38685,38689,38725,38729,38757,38761,38766,38777,38782,38787,38792,38813,38817,38829,38833,38845,38849,38853,38858,38863,38878,38883,38893,38898,38913,38918,38937,38942,38951,38956,38966,38971,38976,38990,38995,39009,39017,39021,39025,39033,39044,39055,39066,39077,39088,39099,39105,39109,39114,39127,39147,39153,39162],{"__ignoreMap":42},[129,37904,37905,37907],{"class":131,"line":132},[129,37906,30393],{"class":135},[129,37908,30396],{"class":139},[129,37910,37911,37913,37916,37918],{"class":131,"line":51},[129,37912,30738],{"class":135},[129,37914,37915],{"class":139}," sympy.core.sympify ",[129,37917,30393],{"class":135},[129,37919,37920],{"class":139}," kernS\n",[129,37922,37923,37925,37927,37929],{"class":131,"line":1194},[129,37924,30738],{"class":135},[129,37926,30741],{"class":139},[129,37928,30393],{"class":135},[129,37930,30746],{"class":139},[129,37932,37933,37935,37937,37939],{"class":131,"line":1209},[129,37934,30738],{"class":135},[129,37936,30758],{"class":139},[129,37938,30393],{"class":135},[129,37940,30763],{"class":139},[129,37942,37943],{"class":131,"line":1215},[129,37944,2414],{"emptyLinePlaceholder":56},[129,37946,37947,37949,37952,37954,37956,37958,37960],{"class":131,"line":1229},[129,37948,14709],{"class":135},[129,37950,37951],{"class":1977}," VGG16",[129,37953,140],{"class":139},[129,37955,30779],{"class":1977},[129,37957,697],{"class":139},[129,37959,30784],{"class":1977},[129,37961,30787],{"class":139},[129,37963,37964,37966,37968],{"class":131,"line":1235},[129,37965,30802],{"class":135},[129,37967,30805],{"class":188},[129,37969,30808],{"class":139},[129,37971,37972,37974,37976,37979,37981,37983,37985,37987],{"class":131,"line":1326},[129,37973,30818],{"class":188},[129,37975,140],{"class":139},[129,37977,37978],{"class":188},"VGG16",[129,37980,12450],{"class":139},[129,37982,30824],{"class":188},[129,37984,30827],{"class":139},[129,37986,30830],{"class":188},[129,37988,1990],{"class":139},[129,37990,37991],{"class":131,"line":1332},[129,37992,37993],{"class":198},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[129,37995,37996],{"class":131,"line":1344},[129,37997,37998],{"class":198},"        # 这里用的是灰度图\n",[129,38000,38001,38003,38006,38008],{"class":131,"line":1626},[129,38002,30846],{"class":188},[129,38004,38005],{"class":139},".block1",[129,38007,185],{"class":135},[129,38009,38010],{"class":139},"nn.Sequential(\n",[129,38012,38013,38016,38018,38020,38022,38024,38026,38028,38030,38032,38034,38036,38038,38040,38042,38044,38046],{"class":131,"line":1631},[129,38014,38015],{"class":139},"            nn.Conv2d(",[129,38017,30857],{"class":5231},[129,38019,185],{"class":135},[129,38021,357],{"class":188},[129,38023,517],{"class":139},[129,38025,30866],{"class":5231},[129,38027,185],{"class":135},[129,38029,343],{"class":188},[129,38031,517],{"class":139},[129,38033,30875],{"class":5231},[129,38035,185],{"class":135},[129,38037,211],{"class":188},[129,38039,517],{"class":139},[129,38041,30884],{"class":5231},[129,38043,185],{"class":135},[129,38045,357],{"class":188},[129,38047,38048],{"class":139},"),\n",[129,38050,38051],{"class":131,"line":1637},[129,38052,38053],{"class":139},"            nn.ReLU(),\n",[129,38055,38056,38058,38060,38062,38064,38066,38068,38070,38072,38074,38076,38078,38080,38082,38084,38086,38088],{"class":131,"line":1642},[129,38057,38015],{"class":139},[129,38059,30857],{"class":5231},[129,38061,185],{"class":135},[129,38063,343],{"class":188},[129,38065,517],{"class":139},[129,38067,30866],{"class":5231},[129,38069,185],{"class":135},[129,38071,343],{"class":188},[129,38073,517],{"class":139},[129,38075,30875],{"class":5231},[129,38077,185],{"class":135},[129,38079,211],{"class":188},[129,38081,517],{"class":139},[129,38083,30884],{"class":5231},[129,38085,185],{"class":135},[129,38087,357],{"class":188},[129,38089,38048],{"class":139},[129,38091,38092],{"class":131,"line":1656},[129,38093,38053],{"class":139},[129,38095,38096,38099,38101,38103,38105,38107,38109,38111,38113,38115,38117,38119,38121],{"class":131,"line":1661},[129,38097,38098],{"class":139},"            nn.MaxPool2d(",[129,38100,30875],{"class":5231},[129,38102,185],{"class":135},[129,38104,217],{"class":188},[129,38106,517],{"class":139},[129,38108,30930],{"class":5231},[129,38110,185],{"class":135},[129,38112,217],{"class":188},[129,38114,517],{"class":139},[129,38116,30884],{"class":5231},[129,38118,185],{"class":135},[129,38120,331],{"class":188},[129,38122,146],{"class":139},[129,38124,38125],{"class":131,"line":1667},[129,38126,38127],{"class":139},"        )\n",[129,38129,38130],{"class":131,"line":1688},[129,38131,38132],{"class":198},"        # 第二层\n",[129,38134,38135,38137,38140,38142],{"class":131,"line":1693},[129,38136,30846],{"class":188},[129,38138,38139],{"class":139},".block2",[129,38141,185],{"class":135},[129,38143,38010],{"class":139},[129,38145,38146,38148,38150,38152,38154,38156,38158,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178],{"class":131,"line":1707},[129,38147,38015],{"class":139},[129,38149,30857],{"class":5231},[129,38151,185],{"class":135},[129,38153,343],{"class":188},[129,38155,517],{"class":139},[129,38157,30866],{"class":5231},[129,38159,185],{"class":135},[129,38161,32071],{"class":188},[129,38163,517],{"class":139},[129,38165,30875],{"class":5231},[129,38167,185],{"class":135},[129,38169,211],{"class":188},[129,38171,517],{"class":139},[129,38173,30884],{"class":5231},[129,38175,185],{"class":135},[129,38177,357],{"class":188},[129,38179,38048],{"class":139},[129,38181,38182],{"class":131,"line":1712},[129,38183,38053],{"class":139},[129,38185,38186,38188,38190,38192,38194,38196,38198,38200,38202,38204,38206,38208,38210,38212,38214,38216,38218],{"class":131,"line":1741},[129,38187,38015],{"class":139},[129,38189,30857],{"class":5231},[129,38191,185],{"class":135},[129,38193,32071],{"class":188},[129,38195,517],{"class":139},[129,38197,30866],{"class":5231},[129,38199,185],{"class":135},[129,38201,32071],{"class":188},[129,38203,517],{"class":139},[129,38205,30875],{"class":5231},[129,38207,185],{"class":135},[129,38209,211],{"class":188},[129,38211,517],{"class":139},[129,38213,30884],{"class":5231},[129,38215,185],{"class":135},[129,38217,357],{"class":188},[129,38219,38048],{"class":139},[129,38221,38222],{"class":131,"line":1746},[129,38223,38053],{"class":139},[129,38225,38226,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246,38248,38250],{"class":131,"line":1763},[129,38227,38098],{"class":139},[129,38229,30875],{"class":5231},[129,38231,185],{"class":135},[129,38233,217],{"class":188},[129,38235,517],{"class":139},[129,38237,30930],{"class":5231},[129,38239,185],{"class":135},[129,38241,217],{"class":188},[129,38243,517],{"class":139},[129,38245,30884],{"class":5231},[129,38247,185],{"class":135},[129,38249,331],{"class":188},[129,38251,146],{"class":139},[129,38253,38254],{"class":131,"line":1768},[129,38255,38127],{"class":139},[129,38257,38258],{"class":131,"line":1773},[129,38259,38260],{"class":198},"        # 第三层\n",[129,38262,38263,38265,38268,38270],{"class":131,"line":1778},[129,38264,30846],{"class":188},[129,38266,38267],{"class":139},".block3",[129,38269,185],{"class":135},[129,38271,38010],{"class":139},[129,38273,38274,38276,38278,38280,38282,38284,38286,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306],{"class":131,"line":1792},[129,38275,38015],{"class":139},[129,38277,30857],{"class":5231},[129,38279,185],{"class":135},[129,38281,32071],{"class":188},[129,38283,517],{"class":139},[129,38285,30866],{"class":5231},[129,38287,185],{"class":135},[129,38289,34871],{"class":188},[129,38291,517],{"class":139},[129,38293,30875],{"class":5231},[129,38295,185],{"class":135},[129,38297,211],{"class":188},[129,38299,517],{"class":139},[129,38301,30884],{"class":5231},[129,38303,185],{"class":135},[129,38305,357],{"class":188},[129,38307,38048],{"class":139},[129,38309,38310],{"class":131,"line":1797},[129,38311,38053],{"class":139},[129,38313,38314,38316,38318,38320,38322,38324,38326,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346],{"class":131,"line":2591},[129,38315,38015],{"class":139},[129,38317,30857],{"class":5231},[129,38319,185],{"class":135},[129,38321,34871],{"class":188},[129,38323,517],{"class":139},[129,38325,30866],{"class":5231},[129,38327,185],{"class":135},[129,38329,34871],{"class":188},[129,38331,517],{"class":139},[129,38333,30875],{"class":5231},[129,38335,185],{"class":135},[129,38337,211],{"class":188},[129,38339,517],{"class":139},[129,38341,30884],{"class":5231},[129,38343,185],{"class":135},[129,38345,357],{"class":188},[129,38347,38048],{"class":139},[129,38349,38350],{"class":131,"line":2605},[129,38351,38053],{"class":139},[129,38353,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386],{"class":131,"line":2613},[129,38355,38015],{"class":139},[129,38357,30857],{"class":5231},[129,38359,185],{"class":135},[129,38361,34871],{"class":188},[129,38363,517],{"class":139},[129,38365,30866],{"class":5231},[129,38367,185],{"class":135},[129,38369,34871],{"class":188},[129,38371,517],{"class":139},[129,38373,30875],{"class":5231},[129,38375,185],{"class":135},[129,38377,211],{"class":188},[129,38379,517],{"class":139},[129,38381,30884],{"class":5231},[129,38383,185],{"class":135},[129,38385,357],{"class":188},[129,38387,38048],{"class":139},[129,38389,38390],{"class":131,"line":2618},[129,38391,38053],{"class":139},[129,38393,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414,38416,38418],{"class":131,"line":2624},[129,38395,38098],{"class":139},[129,38397,30875],{"class":5231},[129,38399,185],{"class":135},[129,38401,217],{"class":188},[129,38403,517],{"class":139},[129,38405,30930],{"class":5231},[129,38407,185],{"class":135},[129,38409,217],{"class":188},[129,38411,517],{"class":139},[129,38413,30884],{"class":5231},[129,38415,185],{"class":135},[129,38417,331],{"class":188},[129,38419,146],{"class":139},[129,38421,38422],{"class":131,"line":2630},[129,38423,38127],{"class":139},[129,38425,38426],{"class":131,"line":2635},[129,38427,38428],{"class":198},"        # 第四层\n",[129,38430,38431,38433,38436,38438],{"class":131,"line":7963},[129,38432,30846],{"class":188},[129,38434,38435],{"class":139},".block4",[129,38437,185],{"class":135},[129,38439,38010],{"class":139},[129,38441,38442,38444,38446,38448,38450,38452,38454,38456,38459,38461,38463,38465,38467,38469,38471,38473,38475],{"class":131,"line":7987},[129,38443,38015],{"class":139},[129,38445,30857],{"class":5231},[129,38447,185],{"class":135},[129,38449,34871],{"class":188},[129,38451,517],{"class":139},[129,38453,30866],{"class":5231},[129,38455,185],{"class":135},[129,38457,38458],{"class":188},"512",[129,38460,517],{"class":139},[129,38462,30875],{"class":5231},[129,38464,185],{"class":135},[129,38466,211],{"class":188},[129,38468,517],{"class":139},[129,38470,30884],{"class":5231},[129,38472,185],{"class":135},[129,38474,357],{"class":188},[129,38476,38048],{"class":139},[129,38478,38479],{"class":131,"line":7992},[129,38480,38053],{"class":139},[129,38482,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503,38505,38507,38509,38511,38513,38515],{"class":131,"line":7998},[129,38484,38015],{"class":139},[129,38486,30857],{"class":5231},[129,38488,185],{"class":135},[129,38490,38458],{"class":188},[129,38492,517],{"class":139},[129,38494,30866],{"class":5231},[129,38496,185],{"class":135},[129,38498,38458],{"class":188},[129,38500,517],{"class":139},[129,38502,30875],{"class":5231},[129,38504,185],{"class":135},[129,38506,211],{"class":188},[129,38508,517],{"class":139},[129,38510,30884],{"class":5231},[129,38512,185],{"class":135},[129,38514,357],{"class":188},[129,38516,38048],{"class":139},[129,38518,38519],{"class":131,"line":8025},[129,38520,38053],{"class":139},[129,38522,38523,38525,38527,38529,38531,38533,38535,38537,38539,38541,38543,38545,38547,38549,38551,38553,38555],{"class":131,"line":8030},[129,38524,38015],{"class":139},[129,38526,30857],{"class":5231},[129,38528,185],{"class":135},[129,38530,38458],{"class":188},[129,38532,517],{"class":139},[129,38534,30866],{"class":5231},[129,38536,185],{"class":135},[129,38538,38458],{"class":188},[129,38540,517],{"class":139},[129,38542,30875],{"class":5231},[129,38544,185],{"class":135},[129,38546,211],{"class":188},[129,38548,517],{"class":139},[129,38550,30884],{"class":5231},[129,38552,185],{"class":135},[129,38554,357],{"class":188},[129,38556,38048],{"class":139},[129,38558,38559],{"class":131,"line":8036},[129,38560,38053],{"class":139},[129,38562,38563,38565,38567,38569,38571,38573,38575,38577,38579,38581,38583,38585,38587],{"class":131,"line":8048},[129,38564,38098],{"class":139},[129,38566,30875],{"class":5231},[129,38568,185],{"class":135},[129,38570,217],{"class":188},[129,38572,517],{"class":139},[129,38574,30930],{"class":5231},[129,38576,185],{"class":135},[129,38578,217],{"class":188},[129,38580,517],{"class":139},[129,38582,30884],{"class":5231},[129,38584,185],{"class":135},[129,38586,331],{"class":188},[129,38588,146],{"class":139},[129,38590,38591],{"class":131,"line":8060},[129,38592,38127],{"class":139},[129,38594,38595],{"class":131,"line":8072},[129,38596,38597],{"class":198},"        # 第五层\n",[129,38599,38600,38602,38605,38607],{"class":131,"line":9731},[129,38601,30846],{"class":188},[129,38603,38604],{"class":139},".block5",[129,38606,185],{"class":135},[129,38608,38010],{"class":139},[129,38610,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633,38635,38637,38639,38641,38643],{"class":131,"line":9756},[129,38612,38015],{"class":139},[129,38614,30857],{"class":5231},[129,38616,185],{"class":135},[129,38618,38458],{"class":188},[129,38620,517],{"class":139},[129,38622,30866],{"class":5231},[129,38624,185],{"class":135},[129,38626,38458],{"class":188},[129,38628,517],{"class":139},[129,38630,30875],{"class":5231},[129,38632,185],{"class":135},[129,38634,211],{"class":188},[129,38636,517],{"class":139},[129,38638,30884],{"class":5231},[129,38640,185],{"class":135},[129,38642,357],{"class":188},[129,38644,38048],{"class":139},[129,38646,38647],{"class":131,"line":9779},[129,38648,38053],{"class":139},[129,38650,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683],{"class":131,"line":9803},[129,38652,38015],{"class":139},[129,38654,30857],{"class":5231},[129,38656,185],{"class":135},[129,38658,38458],{"class":188},[129,38660,517],{"class":139},[129,38662,30866],{"class":5231},[129,38664,185],{"class":135},[129,38666,38458],{"class":188},[129,38668,517],{"class":139},[129,38670,30875],{"class":5231},[129,38672,185],{"class":135},[129,38674,211],{"class":188},[129,38676,517],{"class":139},[129,38678,30884],{"class":5231},[129,38680,185],{"class":135},[129,38682,357],{"class":188},[129,38684,38048],{"class":139},[129,38686,38687],{"class":131,"line":9808},[129,38688,38053],{"class":139},[129,38690,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723],{"class":131,"line":9813},[129,38692,38015],{"class":139},[129,38694,30857],{"class":5231},[129,38696,185],{"class":135},[129,38698,38458],{"class":188},[129,38700,517],{"class":139},[129,38702,30866],{"class":5231},[129,38704,185],{"class":135},[129,38706,38458],{"class":188},[129,38708,517],{"class":139},[129,38710,30875],{"class":5231},[129,38712,185],{"class":135},[129,38714,211],{"class":188},[129,38716,517],{"class":139},[129,38718,30884],{"class":5231},[129,38720,185],{"class":135},[129,38722,357],{"class":188},[129,38724,38048],{"class":139},[129,38726,38727],{"class":131,"line":9818},[129,38728,38053],{"class":139},[129,38730,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755],{"class":131,"line":9827},[129,38732,38098],{"class":139},[129,38734,30875],{"class":5231},[129,38736,185],{"class":135},[129,38738,217],{"class":188},[129,38740,517],{"class":139},[129,38742,30930],{"class":5231},[129,38744,185],{"class":135},[129,38746,217],{"class":188},[129,38748,517],{"class":139},[129,38750,30884],{"class":5231},[129,38752,185],{"class":135},[129,38754,331],{"class":188},[129,38756,146],{"class":139},[129,38758,38759],{"class":131,"line":9832},[129,38760,38127],{"class":139},[129,38762,38763],{"class":131,"line":9838},[129,38764,38765],{"class":198},"        # 全连接层\n",[129,38767,38768,38770,38773,38775],{"class":131,"line":9859},[129,38769,30846],{"class":188},[129,38771,38772],{"class":139},".block6",[129,38774,185],{"class":135},[129,38776,38010],{"class":139},[129,38778,38779],{"class":131,"line":9865},[129,38780,38781],{"class":198},"            # 平展操作\n",[129,38783,38784],{"class":131,"line":9879},[129,38785,38786],{"class":198},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[129,38788,38789],{"class":131,"line":9885},[129,38790,38791],{"class":139},"            nn.Flatten(),\n",[129,38793,38794,38797,38799,38801,38803,38805,38807,38809,38811],{"class":131,"line":9912},[129,38795,38796],{"class":139},"            nn.Linear(",[129,38798,508],{"class":188},[129,38800,594],{"class":135},[129,38802,508],{"class":188},[129,38804,594],{"class":135},[129,38806,38458],{"class":188},[129,38808,517],{"class":139},[129,38810,34871],{"class":188},[129,38812,38048],{"class":139},[129,38814,38815],{"class":131,"line":9921},[129,38816,38053],{"class":139},[129,38818,38819,38821,38823,38825,38827],{"class":131,"line":9927},[129,38820,38796],{"class":139},[129,38822,34871],{"class":188},[129,38824,517],{"class":139},[129,38826,32071],{"class":188},[129,38828,38048],{"class":139},[129,38830,38831],{"class":131,"line":9935},[129,38832,38053],{"class":139},[129,38834,38835,38837,38839,38841,38843],{"class":131,"line":9940},[129,38836,38796],{"class":139},[129,38838,32071],{"class":188},[129,38840,517],{"class":139},[129,38842,585],{"class":188},[129,38844,146],{"class":139},[129,38846,38847],{"class":131,"line":16619},[129,38848,38127],{"class":139},[129,38850,38851],{"class":131,"line":16625},[129,38852,2414],{"emptyLinePlaceholder":56},[129,38854,38855],{"class":131,"line":16648},[129,38856,38857],{"class":198},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[129,38859,38860],{"class":131,"line":16654},[129,38861,38862],{"class":198},"        # 循环遍历模型\n",[129,38864,38865,38867,38870,38872,38875],{"class":131,"line":16677},[129,38866,3417],{"class":135},[129,38868,38869],{"class":139}," m ",[129,38871,26044],{"class":135},[129,38873,38874],{"class":188}," self",[129,38876,38877],{"class":139},".modules():\n",[129,38879,38880],{"class":131,"line":16691},[129,38881,38882],{"class":198},"            # print(m)\n",[129,38884,38885,38887,38890],{"class":131,"line":16711},[129,38886,4656],{"class":135},[129,38888,38889],{"class":188}," isinstance",[129,38891,38892],{"class":139},"(m,nn.Conv2d):\n",[129,38894,38895],{"class":131,"line":16717},[129,38896,38897],{"class":198},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[129,38899,38900,38903,38906,38908,38911],{"class":131,"line":16728},[129,38901,38902],{"class":139},"                nn.init.kaiming_normal_(m.weight,",[129,38904,38905],{"class":5231},"nonlinearity",[129,38907,185],{"class":135},[129,38909,38910],{"class":244},"'relu'",[129,38912,146],{"class":139},[129,38914,38915],{"class":131,"line":16751},[129,38916,38917],{"class":198},"                # 判断b参数是否存在\n",[129,38919,38920,38923,38926,38929,38932,38935],{"class":131,"line":16773},[129,38921,38922],{"class":135},"                if",[129,38924,38925],{"class":139}," m.bias ",[129,38927,38928],{"class":135},"is",[129,38930,38931],{"class":135}," not",[129,38933,38934],{"class":188}," None",[129,38936,3753],{"class":139},[129,38938,38939],{"class":131,"line":16778},[129,38940,38941],{"class":198},"                    # 如果参数不存在的化初始化b=0\n",[129,38943,38944,38947,38949],{"class":131,"line":16784},[129,38945,38946],{"class":139},"                    nn.init.constant_(m.bias,",[129,38948,331],{"class":188},[129,38950,146],{"class":139},[129,38952,38953],{"class":131,"line":16798},[129,38954,38955],{"class":198},"            # 全连接层初始化\n",[129,38957,38958,38961,38963],{"class":131,"line":16811},[129,38959,38960],{"class":135},"            elif",[129,38962,38889],{"class":188},[129,38964,38965],{"class":139},"(m,nn.Linear):\n",[129,38967,38968],{"class":131,"line":16816},[129,38969,38970],{"class":198},"                # 这个初始化方法是利用的是正太分布的方式\n",[129,38972,38973],{"class":131,"line":16830},[129,38974,38975],{"class":198},"                # 均值为0，方差为0.01\n",[129,38977,38978,38981,38983,38985,38988],{"class":131,"line":16835},[129,38979,38980],{"class":139},"                nn.init.normal_(m.weight,",[129,38982,331],{"class":188},[129,38984,517],{"class":139},[129,38986,38987],{"class":188},"0.01",[129,38989,146],{"class":139},[129,38991,38992],{"class":131,"line":16841},[129,38993,38994],{"class":198},"                # 初始化b参数\n",[129,38996,38997,38999,39001,39003,39005,39007],{"class":131,"line":16846},[129,38998,38922],{"class":135},[129,39000,38925],{"class":139},[129,39002,38928],{"class":135},[129,39004,38931],{"class":135},[129,39006,38934],{"class":188},[129,39008,3753],{"class":139},[129,39010,39011,39013,39015],{"class":131,"line":16860},[129,39012,38946],{"class":139},[129,39014,331],{"class":188},[129,39016,146],{"class":139},[129,39018,39019],{"class":131,"line":16865},[129,39020,2414],{"emptyLinePlaceholder":56},[129,39022,39023],{"class":131,"line":16870},[129,39024,35166],{"class":198},[129,39026,39027,39029,39031],{"class":131,"line":16884},[129,39028,30802],{"class":135},[129,39030,31094],{"class":1977},[129,39032,31097],{"class":139},[129,39034,39035,39037,39039,39041],{"class":131,"line":16896},[129,39036,31102],{"class":139},[129,39038,185],{"class":135},[129,39040,30824],{"class":188},[129,39042,39043],{"class":139},".block1(x)\n",[129,39045,39046,39048,39050,39052],{"class":131,"line":16901},[129,39047,31102],{"class":139},[129,39049,185],{"class":135},[129,39051,30824],{"class":188},[129,39053,39054],{"class":139},".block2(x)\n",[129,39056,39057,39059,39061,39063],{"class":131,"line":16914},[129,39058,31102],{"class":139},[129,39060,185],{"class":135},[129,39062,30824],{"class":188},[129,39064,39065],{"class":139},".block3(x)\n",[129,39067,39068,39070,39072,39074],{"class":131,"line":16919},[129,39069,31102],{"class":139},[129,39071,185],{"class":135},[129,39073,30824],{"class":188},[129,39075,39076],{"class":139},".block4(x)\n",[129,39078,39079,39081,39083,39085],{"class":131,"line":16924},[129,39080,31102],{"class":139},[129,39082,185],{"class":135},[129,39084,30824],{"class":188},[129,39086,39087],{"class":139},".block5(x)\n",[129,39089,39090,39092,39094,39096],{"class":131,"line":16929},[129,39091,31102],{"class":139},[129,39093,185],{"class":135},[129,39095,30824],{"class":188},[129,39097,39098],{"class":139},".block6(x)\n",[129,39100,39101,39103],{"class":131,"line":16942},[129,39102,14767],{"class":135},[129,39104,31210],{"class":139},[129,39106,39107],{"class":131,"line":16947},[129,39108,2414],{"emptyLinePlaceholder":56},[129,39110,39111],{"class":131,"line":32634},[129,39112,39113],{"class":198},"# 验证模型\n",[129,39115,39116,39118,39120,39122,39125],{"class":131,"line":32640},[129,39117,1545],{"class":135},[129,39119,31221],{"class":188},[129,39121,2963],{"class":135},[129,39123,39124],{"class":244},"'__main__'",[129,39126,3753],{"class":139},[129,39128,39129,39131,39133,39135,39137,39139,39141,39143,39145],{"class":131,"line":32646},[129,39130,31238],{"class":139},[129,39132,185],{"class":135},[129,39134,30452],{"class":139},[129,39136,31245],{"class":244},[129,39138,1718],{"class":135},[129,39140,31250],{"class":139},[129,39142,1715],{"class":135},[129,39144,30477],{"class":244},[129,39146,146],{"class":139},[129,39148,39149,39151],{"class":131,"line":32652},[129,39150,31300],{"class":188},[129,39152,30486],{"class":139},[129,39154,39155,39157,39159],{"class":131,"line":32658},[129,39156,31290],{"class":139},[129,39158,185],{"class":135},[129,39160,39161],{"class":139},"VGG16().to(device)\n",[129,39163,39164,39166,39168,39170,39172,39174,39176,39178],{"class":131,"line":32669},[129,39165,31300],{"class":188},[129,39167,31303],{"class":139},[129,39169,357],{"class":188},[129,39171,517],{"class":139},[129,39173,31502],{"class":188},[129,39175,517],{"class":139},[129,39177,31502],{"class":188},[129,39179,31316],{"class":139},[83,39181,39182],{"start":51},[86,39183,39184],{},"训练代码",[14,39186,39187],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39189,39190],{},"解决方式:",[14,39192,39193],{},"①权重初始化",[120,39195,39197],{"className":30379,"code":39196,"language":30381,"meta":42,"style":42},"# 权重初始化,保证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",[126,39198,39199,39204,39209,39221,39226,39234,39239,39252,39257,39271,39276,39285,39290,39299,39304,39309,39322,39327,39341],{"__ignoreMap":42},[129,39200,39201],{"class":131,"line":132},[129,39202,39203],{"class":198},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[129,39205,39206],{"class":131,"line":51},[129,39207,39208],{"class":198},"# 循环遍历模型\n",[129,39210,39211,39213,39215,39217,39219],{"class":131,"line":1194},[129,39212,3039],{"class":135},[129,39214,38869],{"class":139},[129,39216,26044],{"class":135},[129,39218,38874],{"class":188},[129,39220,38877],{"class":139},[129,39222,39223],{"class":131,"line":1209},[129,39224,39225],{"class":198},"    # print(m)\n",[129,39227,39228,39230,39232],{"class":131,"line":1215},[129,39229,3115],{"class":135},[129,39231,38889],{"class":188},[129,39233,38892],{"class":139},[129,39235,39236],{"class":131,"line":1229},[129,39237,39238],{"class":198},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[129,39240,39241,39244,39246,39248,39250],{"class":131,"line":1235},[129,39242,39243],{"class":139},"        nn.init.kaiming_normal_(m.weight,",[129,39245,38905],{"class":5231},[129,39247,185],{"class":135},[129,39249,38910],{"class":244},[129,39251,146],{"class":139},[129,39253,39254],{"class":131,"line":1326},[129,39255,39256],{"class":198},"        # 判断b参数是否存在\n",[129,39258,39259,39261,39263,39265,39267,39269],{"class":131,"line":1332},[129,39260,2511],{"class":135},[129,39262,38925],{"class":139},[129,39264,38928],{"class":135},[129,39266,38931],{"class":135},[129,39268,38934],{"class":188},[129,39270,3753],{"class":139},[129,39272,39273],{"class":131,"line":1344},[129,39274,39275],{"class":198},"            # 如果参数不存在的化初始化b=0\n",[129,39277,39278,39281,39283],{"class":131,"line":1626},[129,39279,39280],{"class":139},"            nn.init.constant_(m.bias,",[129,39282,331],{"class":188},[129,39284,146],{"class":139},[129,39286,39287],{"class":131,"line":1631},[129,39288,39289],{"class":198},"    # 全连接层初始化\n",[129,39291,39292,39295,39297],{"class":131,"line":1637},[129,39293,39294],{"class":135},"    elif",[129,39296,38889],{"class":188},[129,39298,38965],{"class":139},[129,39300,39301],{"class":131,"line":1642},[129,39302,39303],{"class":198},"        # 这个初始化方法是利用的是正太分布的方式\n",[129,39305,39306],{"class":131,"line":1656},[129,39307,39308],{"class":198},"        # 均值为0，方差为0.01\n",[129,39310,39311,39314,39316,39318,39320],{"class":131,"line":1661},[129,39312,39313],{"class":139},"        nn.init.normal_(m.weight,",[129,39315,331],{"class":188},[129,39317,517],{"class":139},[129,39319,38987],{"class":188},[129,39321,146],{"class":139},[129,39323,39324],{"class":131,"line":1667},[129,39325,39326],{"class":198},"        # 初始化b参数\n",[129,39328,39329,39331,39333,39335,39337,39339],{"class":131,"line":1688},[129,39330,2511],{"class":135},[129,39332,38925],{"class":139},[129,39334,38928],{"class":135},[129,39336,38931],{"class":135},[129,39338,38934],{"class":188},[129,39340,3753],{"class":139},[129,39342,39343,39345,39347],{"class":131,"line":1693},[129,39344,39280],{"class":139},[129,39346,331],{"class":188},[129,39348,146],{"class":139},[14,39350,39351],{},"②尽可能地增加批次",[14,39353,39354],{},"训练完整代码：",[120,39356,39357],{"className":30379,"code":37900,"language":30381,"meta":42,"style":42},[126,39358,39359,39365,39375,39385,39395,39399,39415,39423,39441,39445,39449,39459,39495,39499,39535,39539,39567,39571,39575,39585,39621,39625,39661,39665,39693,39697,39701,39711,39747,39751,39787,39791,39827,39831,39859,39863,39867,39877,39913,39917,39953,39957,39993,39997,40025,40029,40033,40043,40079,40083,40119,40123,40159,40163,40191,40195,40199,40209,40213,40217,40221,40241,40245,40257,40261,40273,40277,40281,40285,40289,40301,40305,40313,40317,40329,40333,40347,40351,40359,40363,40371,40375,40379,40391,40395,40409,40417,40421,40425,40433,40443,40453,40463,40473,40483,40493,40499,40503,40507,40519,40539,40545,40553],{"__ignoreMap":42},[129,39360,39361,39363],{"class":131,"line":132},[129,39362,30393],{"class":135},[129,39364,30396],{"class":139},[129,39366,39367,39369,39371,39373],{"class":131,"line":51},[129,39368,30738],{"class":135},[129,39370,37915],{"class":139},[129,39372,30393],{"class":135},[129,39374,37920],{"class":139},[129,39376,39377,39379,39381,39383],{"class":131,"line":1194},[129,39378,30738],{"class":135},[129,39380,30741],{"class":139},[129,39382,30393],{"class":135},[129,39384,30746],{"class":139},[129,39386,39387,39389,39391,39393],{"class":131,"line":1209},[129,39388,30738],{"class":135},[129,39390,30758],{"class":139},[129,39392,30393],{"class":135},[129,39394,30763],{"class":139},[129,39396,39397],{"class":131,"line":1215},[129,39398,2414],{"emptyLinePlaceholder":56},[129,39400,39401,39403,39405,39407,39409,39411,39413],{"class":131,"line":1229},[129,39402,14709],{"class":135},[129,39404,37951],{"class":1977},[129,39406,140],{"class":139},[129,39408,30779],{"class":1977},[129,39410,697],{"class":139},[129,39412,30784],{"class":1977},[129,39414,30787],{"class":139},[129,39416,39417,39419,39421],{"class":131,"line":1235},[129,39418,30802],{"class":135},[129,39420,30805],{"class":188},[129,39422,30808],{"class":139},[129,39424,39425,39427,39429,39431,39433,39435,39437,39439],{"class":131,"line":1326},[129,39426,30818],{"class":188},[129,39428,140],{"class":139},[129,39430,37978],{"class":188},[129,39432,12450],{"class":139},[129,39434,30824],{"class":188},[129,39436,30827],{"class":139},[129,39438,30830],{"class":188},[129,39440,1990],{"class":139},[129,39442,39443],{"class":131,"line":1332},[129,39444,37993],{"class":198},[129,39446,39447],{"class":131,"line":1344},[129,39448,37998],{"class":198},[129,39450,39451,39453,39455,39457],{"class":131,"line":1626},[129,39452,30846],{"class":188},[129,39454,38005],{"class":139},[129,39456,185],{"class":135},[129,39458,38010],{"class":139},[129,39460,39461,39463,39465,39467,39469,39471,39473,39475,39477,39479,39481,39483,39485,39487,39489,39491,39493],{"class":131,"line":1631},[129,39462,38015],{"class":139},[129,39464,30857],{"class":5231},[129,39466,185],{"class":135},[129,39468,357],{"class":188},[129,39470,517],{"class":139},[129,39472,30866],{"class":5231},[129,39474,185],{"class":135},[129,39476,343],{"class":188},[129,39478,517],{"class":139},[129,39480,30875],{"class":5231},[129,39482,185],{"class":135},[129,39484,211],{"class":188},[129,39486,517],{"class":139},[129,39488,30884],{"class":5231},[129,39490,185],{"class":135},[129,39492,357],{"class":188},[129,39494,38048],{"class":139},[129,39496,39497],{"class":131,"line":1637},[129,39498,38053],{"class":139},[129,39500,39501,39503,39505,39507,39509,39511,39513,39515,39517,39519,39521,39523,39525,39527,39529,39531,39533],{"class":131,"line":1642},[129,39502,38015],{"class":139},[129,39504,30857],{"class":5231},[129,39506,185],{"class":135},[129,39508,343],{"class":188},[129,39510,517],{"class":139},[129,39512,30866],{"class":5231},[129,39514,185],{"class":135},[129,39516,343],{"class":188},[129,39518,517],{"class":139},[129,39520,30875],{"class":5231},[129,39522,185],{"class":135},[129,39524,211],{"class":188},[129,39526,517],{"class":139},[129,39528,30884],{"class":5231},[129,39530,185],{"class":135},[129,39532,357],{"class":188},[129,39534,38048],{"class":139},[129,39536,39537],{"class":131,"line":1656},[129,39538,38053],{"class":139},[129,39540,39541,39543,39545,39547,39549,39551,39553,39555,39557,39559,39561,39563,39565],{"class":131,"line":1661},[129,39542,38098],{"class":139},[129,39544,30875],{"class":5231},[129,39546,185],{"class":135},[129,39548,217],{"class":188},[129,39550,517],{"class":139},[129,39552,30930],{"class":5231},[129,39554,185],{"class":135},[129,39556,217],{"class":188},[129,39558,517],{"class":139},[129,39560,30884],{"class":5231},[129,39562,185],{"class":135},[129,39564,331],{"class":188},[129,39566,146],{"class":139},[129,39568,39569],{"class":131,"line":1667},[129,39570,38127],{"class":139},[129,39572,39573],{"class":131,"line":1688},[129,39574,38132],{"class":198},[129,39576,39577,39579,39581,39583],{"class":131,"line":1693},[129,39578,30846],{"class":188},[129,39580,38139],{"class":139},[129,39582,185],{"class":135},[129,39584,38010],{"class":139},[129,39586,39587,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619],{"class":131,"line":1707},[129,39588,38015],{"class":139},[129,39590,30857],{"class":5231},[129,39592,185],{"class":135},[129,39594,343],{"class":188},[129,39596,517],{"class":139},[129,39598,30866],{"class":5231},[129,39600,185],{"class":135},[129,39602,32071],{"class":188},[129,39604,517],{"class":139},[129,39606,30875],{"class":5231},[129,39608,185],{"class":135},[129,39610,211],{"class":188},[129,39612,517],{"class":139},[129,39614,30884],{"class":5231},[129,39616,185],{"class":135},[129,39618,357],{"class":188},[129,39620,38048],{"class":139},[129,39622,39623],{"class":131,"line":1712},[129,39624,38053],{"class":139},[129,39626,39627,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659],{"class":131,"line":1741},[129,39628,38015],{"class":139},[129,39630,30857],{"class":5231},[129,39632,185],{"class":135},[129,39634,32071],{"class":188},[129,39636,517],{"class":139},[129,39638,30866],{"class":5231},[129,39640,185],{"class":135},[129,39642,32071],{"class":188},[129,39644,517],{"class":139},[129,39646,30875],{"class":5231},[129,39648,185],{"class":135},[129,39650,211],{"class":188},[129,39652,517],{"class":139},[129,39654,30884],{"class":5231},[129,39656,185],{"class":135},[129,39658,357],{"class":188},[129,39660,38048],{"class":139},[129,39662,39663],{"class":131,"line":1746},[129,39664,38053],{"class":139},[129,39666,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689,39691],{"class":131,"line":1763},[129,39668,38098],{"class":139},[129,39670,30875],{"class":5231},[129,39672,185],{"class":135},[129,39674,217],{"class":188},[129,39676,517],{"class":139},[129,39678,30930],{"class":5231},[129,39680,185],{"class":135},[129,39682,217],{"class":188},[129,39684,517],{"class":139},[129,39686,30884],{"class":5231},[129,39688,185],{"class":135},[129,39690,331],{"class":188},[129,39692,146],{"class":139},[129,39694,39695],{"class":131,"line":1768},[129,39696,38127],{"class":139},[129,39698,39699],{"class":131,"line":1773},[129,39700,38260],{"class":198},[129,39702,39703,39705,39707,39709],{"class":131,"line":1778},[129,39704,30846],{"class":188},[129,39706,38267],{"class":139},[129,39708,185],{"class":135},[129,39710,38010],{"class":139},[129,39712,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733,39735,39737,39739,39741,39743,39745],{"class":131,"line":1792},[129,39714,38015],{"class":139},[129,39716,30857],{"class":5231},[129,39718,185],{"class":135},[129,39720,32071],{"class":188},[129,39722,517],{"class":139},[129,39724,30866],{"class":5231},[129,39726,185],{"class":135},[129,39728,34871],{"class":188},[129,39730,517],{"class":139},[129,39732,30875],{"class":5231},[129,39734,185],{"class":135},[129,39736,211],{"class":188},[129,39738,517],{"class":139},[129,39740,30884],{"class":5231},[129,39742,185],{"class":135},[129,39744,357],{"class":188},[129,39746,38048],{"class":139},[129,39748,39749],{"class":131,"line":1797},[129,39750,38053],{"class":139},[129,39752,39753,39755,39757,39759,39761,39763,39765,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785],{"class":131,"line":2591},[129,39754,38015],{"class":139},[129,39756,30857],{"class":5231},[129,39758,185],{"class":135},[129,39760,34871],{"class":188},[129,39762,517],{"class":139},[129,39764,30866],{"class":5231},[129,39766,185],{"class":135},[129,39768,34871],{"class":188},[129,39770,517],{"class":139},[129,39772,30875],{"class":5231},[129,39774,185],{"class":135},[129,39776,211],{"class":188},[129,39778,517],{"class":139},[129,39780,30884],{"class":5231},[129,39782,185],{"class":135},[129,39784,357],{"class":188},[129,39786,38048],{"class":139},[129,39788,39789],{"class":131,"line":2605},[129,39790,38053],{"class":139},[129,39792,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825],{"class":131,"line":2613},[129,39794,38015],{"class":139},[129,39796,30857],{"class":5231},[129,39798,185],{"class":135},[129,39800,34871],{"class":188},[129,39802,517],{"class":139},[129,39804,30866],{"class":5231},[129,39806,185],{"class":135},[129,39808,34871],{"class":188},[129,39810,517],{"class":139},[129,39812,30875],{"class":5231},[129,39814,185],{"class":135},[129,39816,211],{"class":188},[129,39818,517],{"class":139},[129,39820,30884],{"class":5231},[129,39822,185],{"class":135},[129,39824,357],{"class":188},[129,39826,38048],{"class":139},[129,39828,39829],{"class":131,"line":2618},[129,39830,38053],{"class":139},[129,39832,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857],{"class":131,"line":2624},[129,39834,38098],{"class":139},[129,39836,30875],{"class":5231},[129,39838,185],{"class":135},[129,39840,217],{"class":188},[129,39842,517],{"class":139},[129,39844,30930],{"class":5231},[129,39846,185],{"class":135},[129,39848,217],{"class":188},[129,39850,517],{"class":139},[129,39852,30884],{"class":5231},[129,39854,185],{"class":135},[129,39856,331],{"class":188},[129,39858,146],{"class":139},[129,39860,39861],{"class":131,"line":2630},[129,39862,38127],{"class":139},[129,39864,39865],{"class":131,"line":2635},[129,39866,38428],{"class":198},[129,39868,39869,39871,39873,39875],{"class":131,"line":7963},[129,39870,30846],{"class":188},[129,39872,38435],{"class":139},[129,39874,185],{"class":135},[129,39876,38010],{"class":139},[129,39878,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911],{"class":131,"line":7987},[129,39880,38015],{"class":139},[129,39882,30857],{"class":5231},[129,39884,185],{"class":135},[129,39886,34871],{"class":188},[129,39888,517],{"class":139},[129,39890,30866],{"class":5231},[129,39892,185],{"class":135},[129,39894,38458],{"class":188},[129,39896,517],{"class":139},[129,39898,30875],{"class":5231},[129,39900,185],{"class":135},[129,39902,211],{"class":188},[129,39904,517],{"class":139},[129,39906,30884],{"class":5231},[129,39908,185],{"class":135},[129,39910,357],{"class":188},[129,39912,38048],{"class":139},[129,39914,39915],{"class":131,"line":7992},[129,39916,38053],{"class":139},[129,39918,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951],{"class":131,"line":7998},[129,39920,38015],{"class":139},[129,39922,30857],{"class":5231},[129,39924,185],{"class":135},[129,39926,38458],{"class":188},[129,39928,517],{"class":139},[129,39930,30866],{"class":5231},[129,39932,185],{"class":135},[129,39934,38458],{"class":188},[129,39936,517],{"class":139},[129,39938,30875],{"class":5231},[129,39940,185],{"class":135},[129,39942,211],{"class":188},[129,39944,517],{"class":139},[129,39946,30884],{"class":5231},[129,39948,185],{"class":135},[129,39950,357],{"class":188},[129,39952,38048],{"class":139},[129,39954,39955],{"class":131,"line":8025},[129,39956,38053],{"class":139},[129,39958,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991],{"class":131,"line":8030},[129,39960,38015],{"class":139},[129,39962,30857],{"class":5231},[129,39964,185],{"class":135},[129,39966,38458],{"class":188},[129,39968,517],{"class":139},[129,39970,30866],{"class":5231},[129,39972,185],{"class":135},[129,39974,38458],{"class":188},[129,39976,517],{"class":139},[129,39978,30875],{"class":5231},[129,39980,185],{"class":135},[129,39982,211],{"class":188},[129,39984,517],{"class":139},[129,39986,30884],{"class":5231},[129,39988,185],{"class":135},[129,39990,357],{"class":188},[129,39992,38048],{"class":139},[129,39994,39995],{"class":131,"line":8036},[129,39996,38053],{"class":139},[129,39998,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023],{"class":131,"line":8048},[129,40000,38098],{"class":139},[129,40002,30875],{"class":5231},[129,40004,185],{"class":135},[129,40006,217],{"class":188},[129,40008,517],{"class":139},[129,40010,30930],{"class":5231},[129,40012,185],{"class":135},[129,40014,217],{"class":188},[129,40016,517],{"class":139},[129,40018,30884],{"class":5231},[129,40020,185],{"class":135},[129,40022,331],{"class":188},[129,40024,146],{"class":139},[129,40026,40027],{"class":131,"line":8060},[129,40028,38127],{"class":139},[129,40030,40031],{"class":131,"line":8072},[129,40032,38597],{"class":198},[129,40034,40035,40037,40039,40041],{"class":131,"line":9731},[129,40036,30846],{"class":188},[129,40038,38604],{"class":139},[129,40040,185],{"class":135},[129,40042,38010],{"class":139},[129,40044,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077],{"class":131,"line":9756},[129,40046,38015],{"class":139},[129,40048,30857],{"class":5231},[129,40050,185],{"class":135},[129,40052,38458],{"class":188},[129,40054,517],{"class":139},[129,40056,30866],{"class":5231},[129,40058,185],{"class":135},[129,40060,38458],{"class":188},[129,40062,517],{"class":139},[129,40064,30875],{"class":5231},[129,40066,185],{"class":135},[129,40068,211],{"class":188},[129,40070,517],{"class":139},[129,40072,30884],{"class":5231},[129,40074,185],{"class":135},[129,40076,357],{"class":188},[129,40078,38048],{"class":139},[129,40080,40081],{"class":131,"line":9779},[129,40082,38053],{"class":139},[129,40084,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117],{"class":131,"line":9803},[129,40086,38015],{"class":139},[129,40088,30857],{"class":5231},[129,40090,185],{"class":135},[129,40092,38458],{"class":188},[129,40094,517],{"class":139},[129,40096,30866],{"class":5231},[129,40098,185],{"class":135},[129,40100,38458],{"class":188},[129,40102,517],{"class":139},[129,40104,30875],{"class":5231},[129,40106,185],{"class":135},[129,40108,211],{"class":188},[129,40110,517],{"class":139},[129,40112,30884],{"class":5231},[129,40114,185],{"class":135},[129,40116,357],{"class":188},[129,40118,38048],{"class":139},[129,40120,40121],{"class":131,"line":9808},[129,40122,38053],{"class":139},[129,40124,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157],{"class":131,"line":9813},[129,40126,38015],{"class":139},[129,40128,30857],{"class":5231},[129,40130,185],{"class":135},[129,40132,38458],{"class":188},[129,40134,517],{"class":139},[129,40136,30866],{"class":5231},[129,40138,185],{"class":135},[129,40140,38458],{"class":188},[129,40142,517],{"class":139},[129,40144,30875],{"class":5231},[129,40146,185],{"class":135},[129,40148,211],{"class":188},[129,40150,517],{"class":139},[129,40152,30884],{"class":5231},[129,40154,185],{"class":135},[129,40156,357],{"class":188},[129,40158,38048],{"class":139},[129,40160,40161],{"class":131,"line":9818},[129,40162,38053],{"class":139},[129,40164,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189],{"class":131,"line":9827},[129,40166,38098],{"class":139},[129,40168,30875],{"class":5231},[129,40170,185],{"class":135},[129,40172,217],{"class":188},[129,40174,517],{"class":139},[129,40176,30930],{"class":5231},[129,40178,185],{"class":135},[129,40180,217],{"class":188},[129,40182,517],{"class":139},[129,40184,30884],{"class":5231},[129,40186,185],{"class":135},[129,40188,331],{"class":188},[129,40190,146],{"class":139},[129,40192,40193],{"class":131,"line":9832},[129,40194,38127],{"class":139},[129,40196,40197],{"class":131,"line":9838},[129,40198,38765],{"class":198},[129,40200,40201,40203,40205,40207],{"class":131,"line":9859},[129,40202,30846],{"class":188},[129,40204,38772],{"class":139},[129,40206,185],{"class":135},[129,40208,38010],{"class":139},[129,40210,40211],{"class":131,"line":9865},[129,40212,38781],{"class":198},[129,40214,40215],{"class":131,"line":9879},[129,40216,38786],{"class":198},[129,40218,40219],{"class":131,"line":9885},[129,40220,38791],{"class":139},[129,40222,40223,40225,40227,40229,40231,40233,40235,40237,40239],{"class":131,"line":9912},[129,40224,38796],{"class":139},[129,40226,508],{"class":188},[129,40228,594],{"class":135},[129,40230,508],{"class":188},[129,40232,594],{"class":135},[129,40234,38458],{"class":188},[129,40236,517],{"class":139},[129,40238,34871],{"class":188},[129,40240,38048],{"class":139},[129,40242,40243],{"class":131,"line":9921},[129,40244,38053],{"class":139},[129,40246,40247,40249,40251,40253,40255],{"class":131,"line":9927},[129,40248,38796],{"class":139},[129,40250,34871],{"class":188},[129,40252,517],{"class":139},[129,40254,32071],{"class":188},[129,40256,38048],{"class":139},[129,40258,40259],{"class":131,"line":9935},[129,40260,38053],{"class":139},[129,40262,40263,40265,40267,40269,40271],{"class":131,"line":9940},[129,40264,38796],{"class":139},[129,40266,32071],{"class":188},[129,40268,517],{"class":139},[129,40270,585],{"class":188},[129,40272,146],{"class":139},[129,40274,40275],{"class":131,"line":16619},[129,40276,38127],{"class":139},[129,40278,40279],{"class":131,"line":16625},[129,40280,2414],{"emptyLinePlaceholder":56},[129,40282,40283],{"class":131,"line":16648},[129,40284,38857],{"class":198},[129,40286,40287],{"class":131,"line":16654},[129,40288,38862],{"class":198},[129,40290,40291,40293,40295,40297,40299],{"class":131,"line":16677},[129,40292,3417],{"class":135},[129,40294,38869],{"class":139},[129,40296,26044],{"class":135},[129,40298,38874],{"class":188},[129,40300,38877],{"class":139},[129,40302,40303],{"class":131,"line":16691},[129,40304,38882],{"class":198},[129,40306,40307,40309,40311],{"class":131,"line":16711},[129,40308,4656],{"class":135},[129,40310,38889],{"class":188},[129,40312,38892],{"class":139},[129,40314,40315],{"class":131,"line":16717},[129,40316,38897],{"class":198},[129,40318,40319,40321,40323,40325,40327],{"class":131,"line":16728},[129,40320,38902],{"class":139},[129,40322,38905],{"class":5231},[129,40324,185],{"class":135},[129,40326,38910],{"class":244},[129,40328,146],{"class":139},[129,40330,40331],{"class":131,"line":16751},[129,40332,38917],{"class":198},[129,40334,40335,40337,40339,40341,40343,40345],{"class":131,"line":16773},[129,40336,38922],{"class":135},[129,40338,38925],{"class":139},[129,40340,38928],{"class":135},[129,40342,38931],{"class":135},[129,40344,38934],{"class":188},[129,40346,3753],{"class":139},[129,40348,40349],{"class":131,"line":16778},[129,40350,38941],{"class":198},[129,40352,40353,40355,40357],{"class":131,"line":16784},[129,40354,38946],{"class":139},[129,40356,331],{"class":188},[129,40358,146],{"class":139},[129,40360,40361],{"class":131,"line":16798},[129,40362,38955],{"class":198},[129,40364,40365,40367,40369],{"class":131,"line":16811},[129,40366,38960],{"class":135},[129,40368,38889],{"class":188},[129,40370,38965],{"class":139},[129,40372,40373],{"class":131,"line":16816},[129,40374,38970],{"class":198},[129,40376,40377],{"class":131,"line":16830},[129,40378,38975],{"class":198},[129,40380,40381,40383,40385,40387,40389],{"class":131,"line":16835},[129,40382,38980],{"class":139},[129,40384,331],{"class":188},[129,40386,517],{"class":139},[129,40388,38987],{"class":188},[129,40390,146],{"class":139},[129,40392,40393],{"class":131,"line":16841},[129,40394,38994],{"class":198},[129,40396,40397,40399,40401,40403,40405,40407],{"class":131,"line":16846},[129,40398,38922],{"class":135},[129,40400,38925],{"class":139},[129,40402,38928],{"class":135},[129,40404,38931],{"class":135},[129,40406,38934],{"class":188},[129,40408,3753],{"class":139},[129,40410,40411,40413,40415],{"class":131,"line":16860},[129,40412,38946],{"class":139},[129,40414,331],{"class":188},[129,40416,146],{"class":139},[129,40418,40419],{"class":131,"line":16865},[129,40420,2414],{"emptyLinePlaceholder":56},[129,40422,40423],{"class":131,"line":16870},[129,40424,35166],{"class":198},[129,40426,40427,40429,40431],{"class":131,"line":16884},[129,40428,30802],{"class":135},[129,40430,31094],{"class":1977},[129,40432,31097],{"class":139},[129,40434,40435,40437,40439,40441],{"class":131,"line":16896},[129,40436,31102],{"class":139},[129,40438,185],{"class":135},[129,40440,30824],{"class":188},[129,40442,39043],{"class":139},[129,40444,40445,40447,40449,40451],{"class":131,"line":16901},[129,40446,31102],{"class":139},[129,40448,185],{"class":135},[129,40450,30824],{"class":188},[129,40452,39054],{"class":139},[129,40454,40455,40457,40459,40461],{"class":131,"line":16914},[129,40456,31102],{"class":139},[129,40458,185],{"class":135},[129,40460,30824],{"class":188},[129,40462,39065],{"class":139},[129,40464,40465,40467,40469,40471],{"class":131,"line":16919},[129,40466,31102],{"class":139},[129,40468,185],{"class":135},[129,40470,30824],{"class":188},[129,40472,39076],{"class":139},[129,40474,40475,40477,40479,40481],{"class":131,"line":16924},[129,40476,31102],{"class":139},[129,40478,185],{"class":135},[129,40480,30824],{"class":188},[129,40482,39087],{"class":139},[129,40484,40485,40487,40489,40491],{"class":131,"line":16929},[129,40486,31102],{"class":139},[129,40488,185],{"class":135},[129,40490,30824],{"class":188},[129,40492,39098],{"class":139},[129,40494,40495,40497],{"class":131,"line":16942},[129,40496,14767],{"class":135},[129,40498,31210],{"class":139},[129,40500,40501],{"class":131,"line":16947},[129,40502,2414],{"emptyLinePlaceholder":56},[129,40504,40505],{"class":131,"line":32634},[129,40506,39113],{"class":198},[129,40508,40509,40511,40513,40515,40517],{"class":131,"line":32640},[129,40510,1545],{"class":135},[129,40512,31221],{"class":188},[129,40514,2963],{"class":135},[129,40516,39124],{"class":244},[129,40518,3753],{"class":139},[129,40520,40521,40523,40525,40527,40529,40531,40533,40535,40537],{"class":131,"line":32646},[129,40522,31238],{"class":139},[129,40524,185],{"class":135},[129,40526,30452],{"class":139},[129,40528,31245],{"class":244},[129,40530,1718],{"class":135},[129,40532,31250],{"class":139},[129,40534,1715],{"class":135},[129,40536,30477],{"class":244},[129,40538,146],{"class":139},[129,40540,40541,40543],{"class":131,"line":32652},[129,40542,31300],{"class":188},[129,40544,30486],{"class":139},[129,40546,40547,40549,40551],{"class":131,"line":32658},[129,40548,31290],{"class":139},[129,40550,185],{"class":135},[129,40552,39161],{"class":139},[129,40554,40555,40557,40559,40561,40563,40565,40567,40569],{"class":131,"line":32669},[129,40556,31300],{"class":188},[129,40558,31303],{"class":139},[129,40560,357],{"class":188},[129,40562,517],{"class":139},[129,40564,31502],{"class":188},[129,40566,517],{"class":139},[129,40568,31502],{"class":188},[129,40570,31316],{"class":139},[83,40572,40573],{"start":1194},[86,40574,40575],{},"测试代码",[120,40577,40579],{"className":30379,"code":40578,"language":30381,"meta":42,"style":42},"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",[126,40580,40581,40587,40597,40607,40611,40621,40632,40636,40640,40644,40652,40668,40678,40694,40704,40718,40722,40732,40742,40752,40758,40762,40766,40774,40778,40794,40802,40806,40810,40818,40826,40830,40834,40838,40842,40848,40852,40862,40870,40878,40882,40886,40890,40898,40902,40918,40922,40926,40930,40942,40946,40958,40962,40966,40978,40982,40992,40996,41000,41012,41016,41025,41029,41033,41041,41045,41053,41057,41061,41065,41069,41073,41089,41097,41101,41105,41153,41159,41163,41173,41181,41189,41193,41197,41201,41205,41213,41217,41233,41237,41245,41253],{"__ignoreMap":42},[129,40582,40583,40585],{"class":131,"line":132},[129,40584,30393],{"class":135},[129,40586,30396],{"class":139},[129,40588,40589,40591,40593,40595],{"class":131,"line":51},[129,40590,30393],{"class":135},[129,40592,31416],{"class":139},[129,40594,31384],{"class":135},[129,40596,31421],{"class":139},[129,40598,40599,40601,40603,40605],{"class":131,"line":1194},[129,40600,30738],{"class":135},[129,40602,31399],{"class":139},[129,40604,30393],{"class":135},[129,40606,31404],{"class":139},[129,40608,40609],{"class":131,"line":1209},[129,40610,33923],{"class":198},[129,40612,40613,40615,40617,40619],{"class":131,"line":1215},[129,40614,30738],{"class":135},[129,40616,31369],{"class":139},[129,40618,30393],{"class":135},[129,40620,31374],{"class":139},[129,40622,40623,40625,40627,40629],{"class":131,"line":1229},[129,40624,30738],{"class":135},[129,40626,31915],{"class":139},[129,40628,30393],{"class":135},[129,40630,40631],{"class":188}," VGG16\n",[129,40633,40634],{"class":131,"line":1235},[129,40635,2414],{"emptyLinePlaceholder":56},[129,40637,40638],{"class":131,"line":1326},[129,40639,2414],{"emptyLinePlaceholder":56},[129,40641,40642],{"class":131,"line":1332},[129,40643,33952],{"class":198},[129,40645,40646,40648,40650],{"class":131,"line":1344},[129,40647,31948],{"class":135},[129,40649,33959],{"class":1977},[129,40651,31954],{"class":139},[129,40653,40654,40656,40658,40660,40662,40664,40666],{"class":131,"line":1626},[129,40655,33966],{"class":139},[129,40657,185],{"class":135},[129,40659,31456],{"class":139},[129,40661,31459],{"class":5231},[129,40663,185],{"class":135},[129,40665,31464],{"class":244},[129,40667,31467],{"class":139},[129,40669,40670,40672,40674,40676],{"class":131,"line":1631},[129,40671,33983],{"class":5231},[129,40673,185],{"class":135},[129,40675,33988],{"class":188},[129,40677,31467],{"class":139},[129,40679,40680,40682,40684,40686,40688,40690,40692],{"class":131,"line":1637},[129,40681,33995],{"class":5231},[129,40683,185],{"class":135},[129,40685,31494],{"class":139},[129,40687,31497],{"class":5231},[129,40689,185],{"class":135},[129,40691,31502],{"class":188},[129,40693,31505],{"class":139},[129,40695,40696,40698,40700,40702],{"class":131,"line":1642},[129,40697,34012],{"class":5231},[129,40699,185],{"class":135},[129,40701,31477],{"class":188},[129,40703,146],{"class":139},[129,40705,40706,40708,40710,40712,40714,40716],{"class":131,"line":1656},[129,40707,34023],{"class":139},[129,40709,185],{"class":135},[129,40711,31535],{"class":139},[129,40713,31538],{"class":5231},[129,40715,185],{"class":135},[129,40717,34034],{"class":139},[129,40719,40720],{"class":131,"line":1661},[129,40721,34039],{"class":198},[129,40723,40724,40726,40728,40730],{"class":131,"line":1667},[129,40725,34044],{"class":5231},[129,40727,185],{"class":135},[129,40729,357],{"class":188},[129,40731,31467],{"class":139},[129,40733,40734,40736,40738,40740],{"class":131,"line":1688},[129,40735,34055],{"class":5231},[129,40737,185],{"class":135},[129,40739,31477],{"class":188},[129,40741,31467],{"class":139},[129,40743,40744,40746,40748,40750],{"class":131,"line":1693},[129,40745,34066],{"class":5231},[129,40747,185],{"class":135},[129,40749,331],{"class":188},[129,40751,146],{"class":139},[129,40753,40754,40756],{"class":131,"line":1707},[129,40755,4104],{"class":135},[129,40757,34079],{"class":139},[129,40759,40760],{"class":131,"line":1712},[129,40761,2414],{"emptyLinePlaceholder":56},[129,40763,40764],{"class":131,"line":1741},[129,40765,34088],{"class":198},[129,40767,40768,40770,40772],{"class":131,"line":1746},[129,40769,31948],{"class":135},[129,40771,34095],{"class":1977},[129,40773,34098],{"class":139},[129,40775,40776],{"class":131,"line":1763},[129,40777,34103],{"class":198},[129,40779,40780,40782,40784,40786,40788,40790,40792],{"class":131,"line":1768},[129,40781,31238],{"class":139},[129,40783,185],{"class":135},[129,40785,31245],{"class":244},[129,40787,1718],{"class":135},[129,40789,31250],{"class":139},[129,40791,1715],{"class":135},[129,40793,34120],{"class":244},[129,40795,40796,40798,40800],{"class":131,"line":1773},[129,40797,31290],{"class":139},[129,40799,185],{"class":135},[129,40801,32290],{"class":139},[129,40803,40804],{"class":131,"line":1778},[129,40805,2414],{"emptyLinePlaceholder":56},[129,40807,40808],{"class":131,"line":1792},[129,40809,34137],{"class":198},[129,40811,40812,40814,40816],{"class":131,"line":1797},[129,40813,34142],{"class":139},[129,40815,185],{"class":135},[129,40817,32343],{"class":188},[129,40819,40820,40822,40824],{"class":131,"line":2591},[129,40821,34151],{"class":139},[129,40823,185],{"class":135},[129,40825,3099],{"class":188},[129,40827,40828],{"class":131,"line":2605},[129,40829,2414],{"emptyLinePlaceholder":56},[129,40831,40832],{"class":131,"line":2613},[129,40833,34164],{"class":198},[129,40835,40836],{"class":131,"line":2618},[129,40837,34169],{"class":198},[129,40839,40840],{"class":131,"line":2624},[129,40841,34174],{"class":198},[129,40843,40844,40846],{"class":131,"line":2630},[129,40845,34179],{"class":135},[129,40847,32885],{"class":139},[129,40849,40850],{"class":131,"line":2635},[129,40851,34186],{"class":198},[129,40853,40854,40856,40858,40860],{"class":131,"line":7963},[129,40855,3417],{"class":135},[129,40857,34193],{"class":139},[129,40859,26044],{"class":135},[129,40861,34198],{"class":139},[129,40863,40864,40866,40868],{"class":131,"line":7987},[129,40865,34203],{"class":139},[129,40867,185],{"class":135},[129,40869,34208],{"class":139},[129,40871,40872,40874,40876],{"class":131,"line":7992},[129,40873,34213],{"class":139},[129,40875,185],{"class":135},[129,40877,34218],{"class":139},[129,40879,40880],{"class":131,"line":7998},[129,40881,34223],{"class":198},[129,40883,40884],{"class":131,"line":8025},[129,40885,32876],{"class":139},[129,40887,40888],{"class":131,"line":8030},[129,40889,34232],{"class":198},[129,40891,40892,40894,40896],{"class":131,"line":8036},[129,40893,32661],{"class":139},[129,40895,185],{"class":135},[129,40897,34241],{"class":139},[129,40899,40900],{"class":131,"line":8048},[129,40901,34246],{"class":198},[129,40903,40904,40906,40908,40910,40912,40914,40916],{"class":131,"line":8060},[129,40905,32678],{"class":139},[129,40907,185],{"class":135},[129,40909,32683],{"class":139},[129,40911,32686],{"class":5231},[129,40913,185],{"class":135},[129,40915,357],{"class":188},[129,40917,146],{"class":139},[129,40919,40920],{"class":131,"line":8072},[129,40921,34267],{"class":198},[129,40923,40924],{"class":131,"line":9731},[129,40925,34272],{"class":198},[129,40927,40928],{"class":131,"line":9756},[129,40929,34277],{"class":198},[129,40931,40932,40934,40936,40938,40940],{"class":131,"line":9779},[129,40933,34282],{"class":139},[129,40935,9492],{"class":135},[129,40937,32788],{"class":139},[129,40939,2963],{"class":135},[129,40941,34291],{"class":139},[129,40943,40944],{"class":131,"line":9803},[129,40945,34296],{"class":198},[129,40947,40948,40950,40952,40954,40956],{"class":131,"line":9808},[129,40949,34301],{"class":139},[129,40951,9492],{"class":135},[129,40953,34306],{"class":139},[129,40955,331],{"class":188},[129,40957,146],{"class":139},[129,40959,40960],{"class":131,"line":9813},[129,40961,2414],{"emptyLinePlaceholder":56},[129,40963,40964],{"class":131,"line":9818},[129,40965,34319],{"class":198},[129,40967,40968,40970,40972,40974,40976],{"class":131,"line":9827},[129,40969,34324],{"class":139},[129,40971,185],{"class":135},[129,40973,34329],{"class":139},[129,40975,723],{"class":135},[129,40977,34334],{"class":139},[129,40979,40980],{"class":131,"line":9832},[129,40981,34339],{"class":198},[129,40983,40984,40986,40988,40990],{"class":131,"line":9838},[129,40985,32452],{"class":188},[129,40987,140],{"class":139},[129,40989,34348],{"class":244},[129,40991,34351],{"class":139},[129,40993,40994],{"class":131,"line":9859},[129,40995,2414],{"emptyLinePlaceholder":56},[129,40997,40998],{"class":131,"line":9865},[129,40999,34360],{"class":198},[129,41001,41002,41004,41006,41008,41010],{"class":131,"line":9879},[129,41003,1545],{"class":135},[129,41005,31221],{"class":188},[129,41007,2963],{"class":135},[129,41009,31226],{"class":244},[129,41011,3753],{"class":139},[129,41013,41014],{"class":131,"line":9885},[129,41015,34377],{"class":198},[129,41017,41018,41020,41022],{"class":131,"line":9912},[129,41019,31290],{"class":139},[129,41021,185],{"class":135},[129,41023,41024],{"class":139},"VGG16()\n",[129,41026,41027],{"class":131,"line":9921},[129,41028,34390],{"class":198},[129,41030,41031],{"class":131,"line":9927},[129,41032,34395],{"class":198},[129,41034,41035,41037,41039],{"class":131,"line":9935},[129,41036,34400],{"class":139},[129,41038,34403],{"class":244},[129,41040,30498],{"class":139},[129,41042,41043],{"class":131,"line":9940},[129,41044,34410],{"class":198},[129,41046,41047,41049,41051],{"class":131,"line":16619},[129,41048,34023],{"class":139},[129,41050,185],{"class":135},[129,41052,34419],{"class":139},[129,41054,41055],{"class":131,"line":16625},[129,41056,34424],{"class":198},[129,41058,41059],{"class":131,"line":16648},[129,41060,34429],{"class":139},[129,41062,41063],{"class":131,"line":16654},[129,41064,2414],{"emptyLinePlaceholder":56},[129,41066,41067],{"class":131,"line":16677},[129,41068,34438],{"class":198},[129,41070,41071],{"class":131,"line":16691},[129,41072,34443],{"class":198},[129,41074,41075,41077,41079,41081,41083,41085,41087],{"class":131,"line":16711},[129,41076,31238],{"class":139},[129,41078,185],{"class":135},[129,41080,31245],{"class":244},[129,41082,1718],{"class":135},[129,41084,31250],{"class":139},[129,41086,1715],{"class":135},[129,41088,34120],{"class":244},[129,41090,41091,41093,41095],{"class":131,"line":16717},[129,41092,31290],{"class":139},[129,41094,185],{"class":135},[129,41096,32290],{"class":139},[129,41098,41099],{"class":131,"line":16728},[129,41100,34472],{"class":198},[129,41102,41103],{"class":131,"line":16751},[129,41104,34477],{"class":198},[129,41106,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131,41133,41135,41137,41139,41141,41143,41145,41147,41149,41151],{"class":131,"line":16773},[129,41108,34482],{"class":139},[129,41110,185],{"class":135},[129,41112,1029],{"class":139},[129,41114,34489],{"class":244},[129,41116,517],{"class":139},[129,41118,34494],{"class":244},[129,41120,517],{"class":139},[129,41122,34499],{"class":244},[129,41124,517],{"class":139},[129,41126,34504],{"class":244},[129,41128,517],{"class":139},[129,41130,34509],{"class":244},[129,41132,517],{"class":139},[129,41134,34514],{"class":244},[129,41136,517],{"class":139},[129,41138,34519],{"class":244},[129,41140,517],{"class":139},[129,41142,34524],{"class":244},[129,41144,517],{"class":139},[129,41146,34529],{"class":244},[129,41148,517],{"class":139},[129,41150,34534],{"class":244},[129,41152,33247],{"class":139},[129,41154,41155,41157],{"class":131,"line":16778},[129,41156,34179],{"class":135},[129,41158,32885],{"class":139},[129,41160,41161],{"class":131,"line":16784},[129,41162,34547],{"class":198},[129,41164,41165,41167,41169,41171],{"class":131,"line":16798},[129,41166,3417],{"class":135},[129,41168,34554],{"class":139},[129,41170,26044],{"class":135},[129,41172,34198],{"class":139},[129,41174,41175,41177,41179],{"class":131,"line":16811},[129,41176,32611],{"class":139},[129,41178,185],{"class":135},[129,41180,32616],{"class":139},[129,41182,41183,41185,41187],{"class":131,"line":16816},[129,41184,32626],{"class":139},[129,41186,185],{"class":135},[129,41188,32631],{"class":139},[129,41190,41191],{"class":131,"line":16830},[129,41192,2414],{"emptyLinePlaceholder":56},[129,41194,41195],{"class":131,"line":16835},[129,41196,34583],{"class":198},[129,41198,41199],{"class":131,"line":16841},[129,41200,32876],{"class":139},[129,41202,41203],{"class":131,"line":16846},[129,41204,34592],{"class":198},[129,41206,41207,41209,41211],{"class":131,"line":16860},[129,41208,32661],{"class":139},[129,41210,185],{"class":135},[129,41212,32666],{"class":139},[129,41214,41215],{"class":131,"line":16865},[129,41216,34605],{"class":198},[129,41218,41219,41221,41223,41225,41227,41229,41231],{"class":131,"line":16870},[129,41220,32678],{"class":139},[129,41222,185],{"class":135},[129,41224,32683],{"class":139},[129,41226,32686],{"class":5231},[129,41228,185],{"class":135},[129,41230,357],{"class":188},[129,41232,146],{"class":139},[129,41234,41235],{"class":131,"line":16884},[129,41236,34626],{"class":198},[129,41238,41239,41241,41243],{"class":131,"line":16896},[129,41240,34631],{"class":139},[129,41242,185],{"class":135},[129,41244,34636],{"class":139},[129,41246,41247,41249,41251],{"class":131,"line":16901},[129,41248,34641],{"class":139},[129,41250,185],{"class":135},[129,41252,34646],{"class":139},[129,41254,41255,41257,41259,41261,41263,41265,41267,41269],{"class":131,"line":16914},[129,41256,34651],{"class":188},[129,41258,140],{"class":139},[129,41260,34656],{"class":244},[129,41262,34659],{"class":139},[129,41264,34662],{"class":244},[129,41266,517],{"class":139},[129,41268,34667],{"class":244},[129,41270,34670],{"class":139},[100,41272,41274],{"id":41273},"_23googlenet","2.3.GoogLeNet",[22013,41276,41278],{"id":41277},"_231原理","2.3.1.原理",[83,41280,41281],{},[86,41282,41283],{},"网络结构",[14,41285,41286],{},[40,41287],{"alt":42,"src":41288},"\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,41290,41291],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41293,41294],{},[40,41295],{"alt":42,"src":41296},"\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,41298,41299],{},[40,41300],{"alt":42,"src":41301},"\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,41303,41304],{},[40,41305],{"alt":42,"src":41306},"\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",[83,41308,41309],{"start":51},[86,41310,41311],{},"1x1卷积的优点",[14,41313,41314],{},[40,41315],{"alt":42,"src":41316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[83,41318,41319],{"start":1194},[86,41320,41321],{},"全局平均池化层优点",[14,41323,41324],{},[40,41325],{"alt":42,"src":41326},"\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,41328,41329],{},[40,41330],{"alt":42,"src":41331},"\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",[83,41333,41334],{"start":1209},[86,41335,41336],{},"参数详细描述",[14,41338,41339],{},[40,41340],{"alt":42,"src":41341},"\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,41343,41344],{},[40,41345],{"alt":42,"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-031.png",[14,41348,41349],{},[40,41350],{"alt":42,"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-032.png",[14,41353,41354],{},[40,41355],{"alt":42,"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-033.png",[14,41358,41359],{},[40,41360],{"alt":42,"src":41361},"\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,41363,41364],{},[40,41365],{"alt":42,"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-035.png",[14,41368,41369],{},[40,41370],{"alt":42,"src":41371},"\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,41373,41374],{},[40,41375],{"alt":42,"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-037.png",[14,41378,41379],{},[40,41380],{"alt":42,"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-038.png",[14,41383,41384],{},[40,41385],{"alt":42,"src":41386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[14,41388,41389],{},[40,41390],{"alt":42,"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-040.png",[14,41393,41394],{},[40,41395],{"alt":42,"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-041.png",[14,41398,41399],{},[40,41400],{"alt":42,"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-042.png",[14,41403,41404],{},[40,41405],{"alt":42,"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-043.png",[14,41408,41409],{},[40,41410],{"alt":42,"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-044.png",[14,41413,41414],{},[40,41415],{"alt":42,"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-045.png",[14,41418,41419],{},[40,41420],{"alt":42,"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-046.png",[14,41423,41424],{},[40,41425],{"alt":42,"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-047.png",[14,41428,41429],{},[40,41430],{"alt":42,"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-048.png",[14,41433,41434],{},[40,41435],{"alt":42,"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-049.png",[14,41438,41439],{},[40,41440],{"alt":42,"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-050.png",[22013,41443,41445],{"id":41444},"_232代码实现","2.3.2.代码实现",[83,41447,41448],{},[86,41449,30712],{},[14,41451,41452],{},"根据原理一步一步搭建即可",[120,41454,41456],{"className":30379,"code":41455,"language":30381,"meta":42,"style":42},"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",[126,41457,41458,41464,41474,41484,41488,41505,41514,41529,41539,41544,41577,41582,41619,41666,41671,41707,41754,41759,41764,41799,41831,41835,41843,41859,41883,41908,41929,41934,41949,41953,41957,41962,41979,41984,41993,42008,42019,42063,42067,42095,42099,42110,42138,42142,42179,42183,42211,42215,42226,42262,42294,42322,42326,42337,42371,42403,42435,42468,42502,42530,42534,42545,42578,42610,42624,42628,42641,42645,42650,42662,42670,42692,42697,42702,42707,42712,42717,42722,42736,42744,42753,42766,42781,42790,42794,42802,42813,42824,42835,42846,42857,42863,42867,42872,42884,42904,42913],{"__ignoreMap":42},[129,41459,41460,41462],{"class":131,"line":132},[129,41461,30393],{"class":135},[129,41463,30396],{"class":139},[129,41465,41466,41468,41470,41472],{"class":131,"line":51},[129,41467,30738],{"class":135},[129,41469,30741],{"class":139},[129,41471,30393],{"class":135},[129,41473,30746],{"class":139},[129,41475,41476,41478,41480,41482],{"class":131,"line":1194},[129,41477,30738],{"class":135},[129,41479,30758],{"class":139},[129,41481,30393],{"class":135},[129,41483,30763],{"class":139},[129,41485,41486],{"class":131,"line":1209},[129,41487,2414],{"emptyLinePlaceholder":56},[129,41489,41490,41492,41495,41497,41499,41501,41503],{"class":131,"line":1215},[129,41491,14709],{"class":135},[129,41493,41494],{"class":1977}," Inception",[129,41496,140],{"class":139},[129,41498,30779],{"class":1977},[129,41500,697],{"class":139},[129,41502,30784],{"class":1977},[129,41504,30787],{"class":139},[129,41506,41507,41509,41511],{"class":131,"line":1229},[129,41508,30802],{"class":135},[129,41510,30805],{"class":188},[129,41512,41513],{"class":139},"(self,in_channels,c1,c2,c3,c4):\n",[129,41515,41516,41518,41521,41523,41525,41527],{"class":131,"line":1235},[129,41517,30818],{"class":188},[129,41519,41520],{"class":139},"(Inception,",[129,41522,30824],{"class":188},[129,41524,30827],{"class":139},[129,41526,30830],{"class":188},[129,41528,1990],{"class":139},[129,41530,41531,41533,41535,41537],{"class":131,"line":1326},[129,41532,30846],{"class":188},[129,41534,34772],{"class":139},[129,41536,185],{"class":135},[129,41538,34777],{"class":139},[129,41540,41541],{"class":131,"line":1332},[129,41542,41543],{"class":198},"        # 路线1：定义1*1卷积\n",[129,41545,41546,41548,41551,41553,41555,41557,41559,41562,41564,41566,41569,41571,41573,41575],{"class":131,"line":1344},[129,41547,30846],{"class":188},[129,41549,41550],{"class":139},".p1_1",[129,41552,185],{"class":135},[129,41554,30854],{"class":139},[129,41556,30857],{"class":5231},[129,41558,185],{"class":135},[129,41560,41561],{"class":139},"in_channels,",[129,41563,30866],{"class":5231},[129,41565,185],{"class":135},[129,41567,41568],{"class":139},"c1,",[129,41570,30875],{"class":5231},[129,41572,185],{"class":135},[129,41574,357],{"class":188},[129,41576,146],{"class":139},[129,41578,41579],{"class":131,"line":1626},[129,41580,41581],{"class":198},"        # 路线2：定义1*1卷积和3*3\n",[129,41583,41584,41586,41589,41591,41593,41595,41597,41599,41601,41603,41606,41608,41611,41613,41615,41617],{"class":131,"line":1631},[129,41585,30846],{"class":188},[129,41587,41588],{"class":139},".p2_1",[129,41590,185],{"class":135},[129,41592,30854],{"class":139},[129,41594,30857],{"class":5231},[129,41596,185],{"class":135},[129,41598,41561],{"class":139},[129,41600,30866],{"class":5231},[129,41602,185],{"class":135},[129,41604,41605],{"class":139},"c2[",[129,41607,331],{"class":188},[129,41609,41610],{"class":139},"],",[129,41612,30875],{"class":5231},[129,41614,185],{"class":135},[129,41616,357],{"class":188},[129,41618,146],{"class":139},[129,41620,41621,41623,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644,41646,41648,41650,41652,41654,41656,41658,41660,41662,41664],{"class":131,"line":1637},[129,41622,30846],{"class":188},[129,41624,41625],{"class":139},".p2_2",[129,41627,185],{"class":135},[129,41629,30854],{"class":139},[129,41631,30857],{"class":5231},[129,41633,185],{"class":135},[129,41635,41605],{"class":139},[129,41637,331],{"class":188},[129,41639,41610],{"class":139},[129,41641,30866],{"class":5231},[129,41643,185],{"class":135},[129,41645,41605],{"class":139},[129,41647,357],{"class":188},[129,41649,41610],{"class":139},[129,41651,30875],{"class":5231},[129,41653,185],{"class":135},[129,41655,211],{"class":188},[129,41657,517],{"class":139},[129,41659,30884],{"class":5231},[129,41661,185],{"class":135},[129,41663,357],{"class":188},[129,41665,146],{"class":139},[129,41667,41668],{"class":131,"line":1642},[129,41669,41670],{"class":198},"        # 路线3：定义1*1卷积和5*5\n",[129,41672,41673,41675,41678,41680,41682,41684,41686,41688,41690,41692,41695,41697,41699,41701,41703,41705],{"class":131,"line":1656},[129,41674,30846],{"class":188},[129,41676,41677],{"class":139},".p3_1",[129,41679,185],{"class":135},[129,41681,30854],{"class":139},[129,41683,30857],{"class":5231},[129,41685,185],{"class":135},[129,41687,41561],{"class":139},[129,41689,30866],{"class":5231},[129,41691,185],{"class":135},[129,41693,41694],{"class":139},"c3[",[129,41696,331],{"class":188},[129,41698,41610],{"class":139},[129,41700,30875],{"class":5231},[129,41702,185],{"class":135},[129,41704,357],{"class":188},[129,41706,146],{"class":139},[129,41708,41709,41711,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734,41736,41738,41740,41742,41744,41746,41748,41750,41752],{"class":131,"line":1661},[129,41710,30846],{"class":188},[129,41712,41713],{"class":139},".p3_2",[129,41715,185],{"class":135},[129,41717,30854],{"class":139},[129,41719,30857],{"class":5231},[129,41721,185],{"class":135},[129,41723,41694],{"class":139},[129,41725,331],{"class":188},[129,41727,41610],{"class":139},[129,41729,30866],{"class":5231},[129,41731,185],{"class":135},[129,41733,41694],{"class":139},[129,41735,357],{"class":188},[129,41737,41610],{"class":139},[129,41739,30875],{"class":5231},[129,41741,185],{"class":135},[129,41743,458],{"class":188},[129,41745,517],{"class":139},[129,41747,30884],{"class":5231},[129,41749,185],{"class":135},[129,41751,217],{"class":188},[129,41753,146],{"class":139},[129,41755,41756],{"class":131,"line":1667},[129,41757,41758],{"class":198},"        # 路线4：定义3*3最大池化和1*1卷积\n",[129,41760,41761],{"class":131,"line":1688},[129,41762,41763],{"class":198},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[129,41765,41766,41768,41771,41773,41775,41777,41779,41781,41783,41785,41787,41789,41791,41793,41795,41797],{"class":131,"line":1693},[129,41767,30846],{"class":188},[129,41769,41770],{"class":139},".p4_1",[129,41772,185],{"class":135},[129,41774,34830],{"class":139},[129,41776,30875],{"class":5231},[129,41778,185],{"class":135},[129,41780,211],{"class":188},[129,41782,517],{"class":139},[129,41784,30930],{"class":5231},[129,41786,185],{"class":135},[129,41788,357],{"class":188},[129,41790,517],{"class":139},[129,41792,30884],{"class":5231},[129,41794,185],{"class":135},[129,41796,357],{"class":188},[129,41798,146],{"class":139},[129,41800,41801,41803,41806,41808,41810,41812,41814,41816,41818,41820,41823,41825,41827,41829],{"class":131,"line":1707},[129,41802,30846],{"class":188},[129,41804,41805],{"class":139},".p4_2",[129,41807,185],{"class":135},[129,41809,30854],{"class":139},[129,41811,30857],{"class":5231},[129,41813,185],{"class":135},[129,41815,41561],{"class":139},[129,41817,30866],{"class":5231},[129,41819,185],{"class":135},[129,41821,41822],{"class":139},"c4,",[129,41824,30875],{"class":5231},[129,41826,185],{"class":135},[129,41828,357],{"class":188},[129,41830,146],{"class":139},[129,41832,41833],{"class":131,"line":1712},[129,41834,2414],{"emptyLinePlaceholder":56},[129,41836,41837,41839,41841],{"class":131,"line":1741},[129,41838,30802],{"class":135},[129,41840,31094],{"class":1977},[129,41842,31097],{"class":139},[129,41844,41845,41848,41850,41852,41854,41856],{"class":131,"line":1746},[129,41846,41847],{"class":139},"        p1",[129,41849,185],{"class":135},[129,41851,30824],{"class":188},[129,41853,35185],{"class":139},[129,41855,30824],{"class":188},[129,41857,41858],{"class":139},".p1_1(x))\n",[129,41860,41861,41863,41865,41867,41869,41871,41874,41876,41878,41880],{"class":131,"line":1763},[129,41862,7100],{"class":139},[129,41864,185],{"class":135},[129,41866,30824],{"class":188},[129,41868,35185],{"class":139},[129,41870,30824],{"class":188},[129,41872,41873],{"class":139},".p2_2(",[129,41875,30824],{"class":188},[129,41877,35185],{"class":139},[129,41879,30824],{"class":188},[129,41881,41882],{"class":139},".p2_1(x))))\n",[129,41884,41885,41888,41890,41892,41894,41896,41899,41901,41903,41905],{"class":131,"line":1768},[129,41886,41887],{"class":139},"        p3",[129,41889,185],{"class":135},[129,41891,30824],{"class":188},[129,41893,35185],{"class":139},[129,41895,30824],{"class":188},[129,41897,41898],{"class":139},".p3_2(",[129,41900,30824],{"class":188},[129,41902,35185],{"class":139},[129,41904,30824],{"class":188},[129,41906,41907],{"class":139},".p3_1(x))))\n",[129,41909,41910,41913,41915,41917,41919,41921,41924,41926],{"class":131,"line":1773},[129,41911,41912],{"class":139},"        p4",[129,41914,185],{"class":135},[129,41916,30824],{"class":188},[129,41918,35185],{"class":139},[129,41920,30824],{"class":188},[129,41922,41923],{"class":139},".p4_2(",[129,41925,30824],{"class":188},[129,41927,41928],{"class":139},".p4_1(x)))\n",[129,41930,41931],{"class":131,"line":1778},[129,41932,41933],{"class":198},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[129,41935,41936,41938,41941,41943,41945,41947],{"class":131,"line":1792},[129,41937,14767],{"class":135},[129,41939,41940],{"class":139}," torch.cat((p1,p2,p3,p4),",[129,41942,32686],{"class":5231},[129,41944,185],{"class":135},[129,41946,357],{"class":188},[129,41948,146],{"class":139},[129,41950,41951],{"class":131,"line":1797},[129,41952,2414],{"emptyLinePlaceholder":56},[129,41954,41955],{"class":131,"line":2591},[129,41956,2414],{"emptyLinePlaceholder":56},[129,41958,41959],{"class":131,"line":2605},[129,41960,41961],{"class":198},"# 搭建GoogLeNet网络\n",[129,41963,41964,41966,41969,41971,41973,41975,41977],{"class":131,"line":2613},[129,41965,14709],{"class":135},[129,41967,41968],{"class":1977}," GoogLeNet",[129,41970,140],{"class":139},[129,41972,30779],{"class":1977},[129,41974,697],{"class":139},[129,41976,30784],{"class":1977},[129,41978,30787],{"class":139},[129,41980,41981],{"class":131,"line":2618},[129,41982,41983],{"class":198},"    # 必须把Inception导入到里边\n",[129,41985,41986,41988,41990],{"class":131,"line":2624},[129,41987,30802],{"class":135},[129,41989,30805],{"class":188},[129,41991,41992],{"class":139},"(self,Inception):\n",[129,41994,41995,41997,42000,42002,42004,42006],{"class":131,"line":2630},[129,41996,30818],{"class":188},[129,41998,41999],{"class":139},"(GoogLeNet,",[129,42001,30824],{"class":188},[129,42003,30827],{"class":139},[129,42005,30830],{"class":188},[129,42007,1990],{"class":139},[129,42009,42010,42012,42015,42017],{"class":131,"line":2635},[129,42011,30846],{"class":188},[129,42013,42014],{"class":139},".b1",[129,42016,185],{"class":135},[129,42018,38010],{"class":139},[129,42020,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039,42041,42043,42045,42047,42049,42051,42053,42055,42057,42059,42061],{"class":131,"line":7963},[129,42022,38015],{"class":139},[129,42024,30857],{"class":5231},[129,42026,185],{"class":135},[129,42028,357],{"class":188},[129,42030,517],{"class":139},[129,42032,30866],{"class":5231},[129,42034,185],{"class":135},[129,42036,343],{"class":188},[129,42038,517],{"class":139},[129,42040,30875],{"class":5231},[129,42042,185],{"class":135},[129,42044,508],{"class":188},[129,42046,517],{"class":139},[129,42048,30930],{"class":5231},[129,42050,185],{"class":135},[129,42052,217],{"class":188},[129,42054,517],{"class":139},[129,42056,30884],{"class":5231},[129,42058,185],{"class":135},[129,42060,211],{"class":188},[129,42062,38048],{"class":139},[129,42064,42065],{"class":131,"line":7987},[129,42066,38053],{"class":139},[129,42068,42069,42071,42073,42075,42077,42079,42081,42083,42085,42087,42089,42091,42093],{"class":131,"line":7992},[129,42070,38098],{"class":139},[129,42072,30875],{"class":5231},[129,42074,185],{"class":135},[129,42076,211],{"class":188},[129,42078,517],{"class":139},[129,42080,30930],{"class":5231},[129,42082,185],{"class":135},[129,42084,217],{"class":188},[129,42086,517],{"class":139},[129,42088,30884],{"class":5231},[129,42090,185],{"class":135},[129,42092,357],{"class":188},[129,42094,146],{"class":139},[129,42096,42097],{"class":131,"line":7998},[129,42098,38127],{"class":139},[129,42100,42101,42103,42106,42108],{"class":131,"line":8025},[129,42102,30846],{"class":188},[129,42104,42105],{"class":139},".b2",[129,42107,185],{"class":135},[129,42109,38010],{"class":139},[129,42111,42112,42114,42116,42118,42120,42122,42124,42126,42128,42130,42132,42134,42136],{"class":131,"line":8030},[129,42113,38015],{"class":139},[129,42115,30857],{"class":5231},[129,42117,185],{"class":135},[129,42119,343],{"class":188},[129,42121,517],{"class":139},[129,42123,30866],{"class":5231},[129,42125,185],{"class":135},[129,42127,343],{"class":188},[129,42129,517],{"class":139},[129,42131,30875],{"class":5231},[129,42133,185],{"class":135},[129,42135,357],{"class":188},[129,42137,38048],{"class":139},[129,42139,42140],{"class":131,"line":8036},[129,42141,38053],{"class":139},[129,42143,42144,42146,42148,42150,42152,42154,42156,42158,42161,42163,42165,42167,42169,42171,42173,42175,42177],{"class":131,"line":8048},[129,42145,38015],{"class":139},[129,42147,30857],{"class":5231},[129,42149,185],{"class":135},[129,42151,343],{"class":188},[129,42153,517],{"class":139},[129,42155,30866],{"class":5231},[129,42157,185],{"class":135},[129,42159,42160],{"class":188},"192",[129,42162,517],{"class":139},[129,42164,30875],{"class":5231},[129,42166,185],{"class":135},[129,42168,211],{"class":188},[129,42170,517],{"class":139},[129,42172,30884],{"class":5231},[129,42174,185],{"class":135},[129,42176,357],{"class":188},[129,42178,38048],{"class":139},[129,42180,42181],{"class":131,"line":8060},[129,42182,38053],{"class":139},[129,42184,42185,42187,42189,42191,42193,42195,42197,42199,42201,42203,42205,42207,42209],{"class":131,"line":8072},[129,42186,38098],{"class":139},[129,42188,30875],{"class":5231},[129,42190,185],{"class":135},[129,42192,211],{"class":188},[129,42194,517],{"class":139},[129,42196,30930],{"class":5231},[129,42198,185],{"class":135},[129,42200,217],{"class":188},[129,42202,517],{"class":139},[129,42204,30884],{"class":5231},[129,42206,185],{"class":135},[129,42208,357],{"class":188},[129,42210,146],{"class":139},[129,42212,42213],{"class":131,"line":9731},[129,42214,38127],{"class":139},[129,42216,42217,42219,42222,42224],{"class":131,"line":9756},[129,42218,30846],{"class":188},[129,42220,42221],{"class":139},".b3",[129,42223,185],{"class":135},[129,42225,38010],{"class":139},[129,42227,42228,42231,42233,42235,42237,42240,42242,42244,42246,42249,42251,42253,42255,42258,42260],{"class":131,"line":9779},[129,42229,42230],{"class":139},"            Inception(",[129,42232,42160],{"class":188},[129,42234,517],{"class":139},[129,42236,343],{"class":188},[129,42238,42239],{"class":139},",(",[129,42241,349],{"class":188},[129,42243,517],{"class":139},[129,42245,32071],{"class":188},[129,42247,42248],{"class":139},"),(",[129,42250,740],{"class":188},[129,42252,517],{"class":139},[129,42254,337],{"class":188},[129,42256,42257],{"class":139},"),",[129,42259,337],{"class":188},[129,42261,38048],{"class":139},[129,42263,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282,42284,42286,42288,42290,42292],{"class":131,"line":9803},[129,42265,42230],{"class":139},[129,42267,34871],{"class":188},[129,42269,517],{"class":139},[129,42271,32071],{"class":188},[129,42273,42239],{"class":139},[129,42275,32071],{"class":188},[129,42277,517],{"class":139},[129,42279,42160],{"class":188},[129,42281,42248],{"class":139},[129,42283,337],{"class":188},[129,42285,517],{"class":139},[129,42287,349],{"class":188},[129,42289,42257],{"class":139},[129,42291,343],{"class":188},[129,42293,38048],{"class":139},[129,42295,42296,42298,42300,42302,42304,42306,42308,42310,42312,42314,42316,42318,42320],{"class":131,"line":9808},[129,42297,38098],{"class":139},[129,42299,30875],{"class":5231},[129,42301,185],{"class":135},[129,42303,211],{"class":188},[129,42305,517],{"class":139},[129,42307,30930],{"class":5231},[129,42309,185],{"class":135},[129,42311,217],{"class":188},[129,42313,517],{"class":139},[129,42315,30884],{"class":5231},[129,42317,185],{"class":135},[129,42319,357],{"class":188},[129,42321,146],{"class":139},[129,42323,42324],{"class":131,"line":9813},[129,42325,38127],{"class":139},[129,42327,42328,42330,42333,42335],{"class":131,"line":9818},[129,42329,30846],{"class":188},[129,42331,42332],{"class":139},".b4",[129,42334,185],{"class":135},[129,42336,38010],{"class":139},[129,42338,42339,42341,42344,42346,42348,42350,42352,42354,42357,42359,42361,42363,42365,42367,42369],{"class":131,"line":9827},[129,42340,42230],{"class":139},[129,42342,42343],{"class":188},"480",[129,42345,517],{"class":139},[129,42347,42160],{"class":188},[129,42349,42239],{"class":139},[129,42351,349],{"class":188},[129,42353,517],{"class":139},[129,42355,42356],{"class":188},"208",[129,42358,42248],{"class":139},[129,42360,740],{"class":188},[129,42362,517],{"class":139},[129,42364,746],{"class":188},[129,42366,42257],{"class":139},[129,42368,343],{"class":188},[129,42370,38048],{"class":139},[129,42372,42373,42375,42377,42379,42381,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401],{"class":131,"line":9832},[129,42374,42230],{"class":139},[129,42376,38458],{"class":188},[129,42378,517],{"class":139},[129,42380,21063],{"class":188},[129,42382,42239],{"class":139},[129,42384,757],{"class":188},[129,42386,517],{"class":139},[129,42388,31502],{"class":188},[129,42390,42248],{"class":139},[129,42392,939],{"class":188},[129,42394,517],{"class":139},[129,42396,343],{"class":188},[129,42398,42257],{"class":139},[129,42400,343],{"class":188},[129,42402,38048],{"class":139},[129,42404,42405,42407,42409,42411,42413,42415,42417,42419,42421,42423,42425,42427,42429,42431,42433],{"class":131,"line":9838},[129,42406,42230],{"class":139},[129,42408,38458],{"class":188},[129,42410,517],{"class":139},[129,42412,32071],{"class":188},[129,42414,42239],{"class":139},[129,42416,32071],{"class":188},[129,42418,517],{"class":139},[129,42420,34871],{"class":188},[129,42422,42248],{"class":139},[129,42424,939],{"class":188},[129,42426,517],{"class":139},[129,42428,343],{"class":188},[129,42430,42257],{"class":139},[129,42432,343],{"class":188},[129,42434,38048],{"class":139},[129,42436,42437,42439,42441,42443,42445,42447,42449,42451,42454,42456,42458,42460,42462,42464,42466],{"class":131,"line":9859},[129,42438,42230],{"class":139},[129,42440,38458],{"class":188},[129,42442,517],{"class":139},[129,42444,757],{"class":188},[129,42446,42239],{"class":139},[129,42448,32071],{"class":188},[129,42450,517],{"class":139},[129,42452,42453],{"class":188},"288",[129,42455,42248],{"class":139},[129,42457,337],{"class":188},[129,42459,517],{"class":139},[129,42461,343],{"class":188},[129,42463,42257],{"class":139},[129,42465,343],{"class":188},[129,42467,38048],{"class":139},[129,42469,42470,42472,42475,42477,42479,42481,42483,42485,42488,42490,42492,42494,42496,42498,42500],{"class":131,"line":9865},[129,42471,42230],{"class":139},[129,42473,42474],{"class":188},"528",[129,42476,517],{"class":139},[129,42478,34871],{"class":188},[129,42480,42239],{"class":139},[129,42482,21063],{"class":188},[129,42484,517],{"class":139},[129,42486,42487],{"class":188},"320",[129,42489,42248],{"class":139},[129,42491,337],{"class":188},[129,42493,517],{"class":139},[129,42495,32071],{"class":188},[129,42497,42257],{"class":139},[129,42499,32071],{"class":188},[129,42501,38048],{"class":139},[129,42503,42504,42506,42508,42510,42512,42514,42516,42518,42520,42522,42524,42526,42528],{"class":131,"line":9879},[129,42505,38098],{"class":139},[129,42507,30875],{"class":5231},[129,42509,185],{"class":135},[129,42511,211],{"class":188},[129,42513,517],{"class":139},[129,42515,30930],{"class":5231},[129,42517,185],{"class":135},[129,42519,217],{"class":188},[129,42521,517],{"class":139},[129,42523,30884],{"class":5231},[129,42525,185],{"class":135},[129,42527,357],{"class":188},[129,42529,146],{"class":139},[129,42531,42532],{"class":131,"line":9885},[129,42533,38127],{"class":139},[129,42535,42536,42538,42541,42543],{"class":131,"line":9912},[129,42537,30846],{"class":188},[129,42539,42540],{"class":139},".b5",[129,42542,185],{"class":135},[129,42544,38010],{"class":139},[129,42546,42547,42549,42552,42554,42556,42558,42560,42562,42564,42566,42568,42570,42572,42574,42576],{"class":131,"line":9921},[129,42548,42230],{"class":139},[129,42550,42551],{"class":188},"832",[129,42553,517],{"class":139},[129,42555,34871],{"class":188},[129,42557,42239],{"class":139},[129,42559,21063],{"class":188},[129,42561,517],{"class":139},[129,42563,42487],{"class":188},[129,42565,42248],{"class":139},[129,42567,337],{"class":188},[129,42569,517],{"class":139},[129,42571,32071],{"class":188},[129,42573,42257],{"class":139},[129,42575,32071],{"class":188},[129,42577,38048],{"class":139},[129,42579,42580,42582,42584,42586,42588,42590,42592,42594,42596,42598,42600,42602,42604,42606,42608],{"class":131,"line":9927},[129,42581,42230],{"class":139},[129,42583,42551],{"class":188},[129,42585,517],{"class":139},[129,42587,34941],{"class":188},[129,42589,42239],{"class":139},[129,42591,42160],{"class":188},[129,42593,517],{"class":139},[129,42595,34941],{"class":188},[129,42597,42248],{"class":139},[129,42599,746],{"class":188},[129,42601,517],{"class":139},[129,42603,32071],{"class":188},[129,42605,42257],{"class":139},[129,42607,32071],{"class":188},[129,42609,38048],{"class":139},[129,42611,42612,42615,42617,42619,42621],{"class":131,"line":9935},[129,42613,42614],{"class":139},"            nn.AdaptiveAvgPool2d((",[129,42616,357],{"class":188},[129,42618,517],{"class":139},[129,42620,357],{"class":188},[129,42622,42623],{"class":139},")),\n",[129,42625,42626],{"class":131,"line":9940},[129,42627,38791],{"class":139},[129,42629,42630,42632,42635,42637,42639],{"class":131,"line":16619},[129,42631,38796],{"class":139},[129,42633,42634],{"class":188},"1024",[129,42636,517],{"class":139},[129,42638,585],{"class":188},[129,42640,146],{"class":139},[129,42642,42643],{"class":131,"line":16625},[129,42644,38127],{"class":139},[129,42646,42647],{"class":131,"line":16648},[129,42648,42649],{"class":198},"        # 对模型参数初始化\n",[129,42651,42652,42654,42656,42658,42660],{"class":131,"line":16654},[129,42653,3417],{"class":135},[129,42655,38869],{"class":139},[129,42657,26044],{"class":135},[129,42659,38874],{"class":188},[129,42661,38877],{"class":139},[129,42663,42664,42666,42668],{"class":131,"line":16677},[129,42665,4656],{"class":135},[129,42667,38889],{"class":188},[129,42669,38892],{"class":139},[129,42671,42672,42674,42677,42679,42682,42684,42686,42688,42690],{"class":131,"line":16691},[129,42673,38902],{"class":139},[129,42675,42676],{"class":5231},"mode",[129,42678,185],{"class":135},[129,42680,42681],{"class":244},"'fan_out'",[129,42683,517],{"class":139},[129,42685,38905],{"class":5231},[129,42687,185],{"class":135},[129,42689,38910],{"class":244},[129,42691,146],{"class":139},[129,42693,42694],{"class":131,"line":16711},[129,42695,42696],{"class":198},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[129,42698,42699],{"class":131,"line":16717},[129,42700,42701],{"class":198},"                # ② mode = 'fan_out'决定使用的fan值：\n",[129,42703,42704],{"class":131,"line":16728},[129,42705,42706],{"class":198},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[129,42708,42709],{"class":131,"line":16751},[129,42710,42711],{"class":198},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[129,42713,42714],{"class":131,"line":16773},[129,42715,42716],{"class":198},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[129,42718,42719],{"class":131,"line":16778},[129,42720,42721],{"class":198},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[129,42723,42724,42726,42728,42730,42732,42734],{"class":131,"line":16784},[129,42725,38922],{"class":135},[129,42727,38925],{"class":139},[129,42729,38928],{"class":135},[129,42731,38931],{"class":135},[129,42733,38934],{"class":188},[129,42735,3753],{"class":139},[129,42737,42738,42740,42742],{"class":131,"line":16798},[129,42739,38946],{"class":139},[129,42741,331],{"class":188},[129,42743,146],{"class":139},[129,42745,42746,42749,42751],{"class":131,"line":16811},[129,42747,42748],{"class":135},"                elif",[129,42750,38889],{"class":188},[129,42752,38965],{"class":139},[129,42754,42755,42758,42760,42762,42764],{"class":131,"line":16816},[129,42756,42757],{"class":139},"                    nn.init.normal_(m.weight,",[129,42759,331],{"class":188},[129,42761,517],{"class":139},[129,42763,38987],{"class":188},[129,42765,146],{"class":139},[129,42767,42768,42771,42773,42775,42777,42779],{"class":131,"line":16830},[129,42769,42770],{"class":135},"                    if",[129,42772,38925],{"class":139},[129,42774,38928],{"class":135},[129,42776,38931],{"class":135},[129,42778,38934],{"class":188},[129,42780,3753],{"class":139},[129,42782,42783,42786,42788],{"class":131,"line":16835},[129,42784,42785],{"class":139},"                        nn.init.constant_(m.bias,",[129,42787,331],{"class":188},[129,42789,146],{"class":139},[129,42791,42792],{"class":131,"line":16841},[129,42793,35166],{"class":198},[129,42795,42796,42798,42800],{"class":131,"line":16846},[129,42797,30802],{"class":135},[129,42799,31094],{"class":1977},[129,42801,31097],{"class":139},[129,42803,42804,42806,42808,42810],{"class":131,"line":16860},[129,42805,31102],{"class":139},[129,42807,185],{"class":135},[129,42809,30824],{"class":188},[129,42811,42812],{"class":139},".b1(x)\n",[129,42814,42815,42817,42819,42821],{"class":131,"line":16865},[129,42816,31102],{"class":139},[129,42818,185],{"class":135},[129,42820,30824],{"class":188},[129,42822,42823],{"class":139},".b2(x)\n",[129,42825,42826,42828,42830,42832],{"class":131,"line":16870},[129,42827,31102],{"class":139},[129,42829,185],{"class":135},[129,42831,30824],{"class":188},[129,42833,42834],{"class":139},".b3(x)\n",[129,42836,42837,42839,42841,42843],{"class":131,"line":16884},[129,42838,31102],{"class":139},[129,42840,185],{"class":135},[129,42842,30824],{"class":188},[129,42844,42845],{"class":139},".b4(x)\n",[129,42847,42848,42850,42852,42854],{"class":131,"line":16896},[129,42849,31102],{"class":139},[129,42851,185],{"class":135},[129,42853,30824],{"class":188},[129,42855,42856],{"class":139},".b5(x)\n",[129,42858,42859,42861],{"class":131,"line":16901},[129,42860,14767],{"class":135},[129,42862,31210],{"class":139},[129,42864,42865],{"class":131,"line":16914},[129,42866,2414],{"emptyLinePlaceholder":56},[129,42868,42869],{"class":131,"line":16919},[129,42870,42871],{"class":198},"# 模型展示\n",[129,42873,42874,42876,42878,42880,42882],{"class":131,"line":16924},[129,42875,1545],{"class":135},[129,42877,31221],{"class":188},[129,42879,2963],{"class":135},[129,42881,31226],{"class":244},[129,42883,3753],{"class":139},[129,42885,42886,42888,42890,42892,42894,42896,42898,42900,42902],{"class":131,"line":16929},[129,42887,31238],{"class":139},[129,42889,185],{"class":135},[129,42891,30452],{"class":139},[129,42893,31245],{"class":244},[129,42895,1718],{"class":135},[129,42897,31250],{"class":139},[129,42899,1715],{"class":135},[129,42901,30477],{"class":244},[129,42903,146],{"class":139},[129,42905,42906,42908,42910],{"class":131,"line":16942},[129,42907,31290],{"class":139},[129,42909,185],{"class":135},[129,42911,42912],{"class":139},"GoogLeNet(Inception).to(device)\n",[129,42914,42915,42917,42919,42921,42923,42925,42927,42929],{"class":131,"line":16947},[129,42916,31300],{"class":188},[129,42918,31303],{"class":139},[129,42920,357],{"class":188},[129,42922,517],{"class":139},[129,42924,31502],{"class":188},[129,42926,517],{"class":139},[129,42928,31502],{"class":188},[129,42930,31316],{"class":139},[83,42932,42933],{"start":51},[86,42934,39184],{},[120,42936,42938],{"className":30379,"code":42937,"language":30381,"meta":42,"style":42},"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",[126,42939,42940,42946,42952,42962,42968,42978,42988,42998,43008,43018,43022,43033,43043,43047,43051,43055,43063,43075,43085,43101,43111,43143,43157,43167,43177,43181,43191,43205,43215,43225,43235,43241,43245,43249,43253,43257,43261,43269,43289,43293,43297,43301,43305,43309,43325,43329,43333,43341,43345,43349,43357,43361,43365,43369,43377,43381,43385,43389,43393,43401,43405,43413,43417,43425,43429,43437,43441,43449,43453,43457,43465,43469,43473,43477,43489,43513,43527,43531,43535,43539,43547,43551,43559,43563,43571,43575,43583,43587,43595,43599,43607,43611,43623,43627,43635,43639,43647,43651,43655,43659,43663,43671,43675,43691,43695,43703,43707,43711,43715,43719,43723,43727,43731,43747,43751,43763,43767,43779,43783,43795,43799,43807,43811,43819,43823,43827,43831,43837,43841,43849,43853,43869,43873,43881,43885,43901,43913,43917,43929,43933,43937,43945,43949,43953,43961,43965,43973,43977,43985,43989,43993,44035,44077,44081,44085,44101,44105,44121,44125,44129,44137,44141,44145,44157,44195,44199,44203,44211,44215,44229,44239,44245,44251,44257,44263,44267,44271,44277,44281,44285,44293,44297,44315,44319,44323,44327,44343,44347,44351,44355,44359,44363,44383,44403,44407,44411,44415,44423,44431,44435,44451,44471,44491,44495,44499,44507,44515,44519,44523,44527,44539,44543,44553,44561,44578],{"__ignoreMap":42},[129,42941,42942,42944],{"class":131,"line":132},[129,42943,30393],{"class":135},[129,42945,31823],{"class":139},[129,42947,42948,42950],{"class":131,"line":51},[129,42949,30393],{"class":135},[129,42951,31830],{"class":139},[129,42953,42954,42956,42958,42960],{"class":131,"line":1194},[129,42955,30393],{"class":135},[129,42957,31841],{"class":139},[129,42959,31384],{"class":135},[129,42961,31846],{"class":139},[129,42963,42964,42966],{"class":131,"line":1209},[129,42965,30393],{"class":135},[129,42967,30396],{"class":139},[129,42969,42970,42972,42974,42976],{"class":131,"line":1215},[129,42971,30738],{"class":135},[129,42973,31416],{"class":139},[129,42975,30393],{"class":135},[129,42977,31863],{"class":139},[129,42979,42980,42982,42984,42986],{"class":131,"line":1229},[129,42981,30738],{"class":135},[129,42983,31369],{"class":139},[129,42985,30393],{"class":135},[129,42987,31374],{"class":139},[129,42989,42990,42992,42994,42996],{"class":131,"line":1235},[129,42991,30738],{"class":135},[129,42993,31399],{"class":139},[129,42995,30393],{"class":135},[129,42997,31404],{"class":139},[129,42999,43000,43002,43004,43006],{"class":131,"line":1326},[129,43001,30393],{"class":135},[129,43003,31416],{"class":139},[129,43005,31384],{"class":135},[129,43007,31421],{"class":139},[129,43009,43010,43012,43014,43016],{"class":131,"line":1332},[129,43011,30393],{"class":135},[129,43013,31433],{"class":139},[129,43015,31384],{"class":135},[129,43017,31438],{"class":139},[129,43019,43020],{"class":131,"line":1344},[129,43021,31908],{"class":198},[129,43023,43024,43026,43028,43030],{"class":131,"line":1626},[129,43025,30738],{"class":135},[129,43027,31915],{"class":139},[129,43029,30393],{"class":135},[129,43031,43032],{"class":139}," GoogLeNet, Inception\n",[129,43034,43035,43037,43039,43041],{"class":131,"line":1631},[129,43036,30738],{"class":135},[129,43038,30741],{"class":139},[129,43040,30393],{"class":135},[129,43042,30746],{"class":139},[129,43044,43045],{"class":131,"line":1637},[129,43046,2414],{"emptyLinePlaceholder":56},[129,43048,43049],{"class":131,"line":1642},[129,43050,2414],{"emptyLinePlaceholder":56},[129,43052,43053],{"class":131,"line":1656},[129,43054,31943],{"class":198},[129,43056,43057,43059,43061],{"class":131,"line":1661},[129,43058,31948],{"class":135},[129,43060,31951],{"class":1977},[129,43062,31954],{"class":139},[129,43064,43065,43067,43069,43071,43073],{"class":131,"line":1667},[129,43066,31959],{"class":139},[129,43068,185],{"class":135},[129,43070,31456],{"class":139},[129,43072,31464],{"class":244},[129,43074,31467],{"class":139},[129,43076,43077,43079,43081,43083],{"class":131,"line":1688},[129,43078,31972],{"class":5231},[129,43080,185],{"class":135},[129,43082,31477],{"class":188},[129,43084,31467],{"class":139},[129,43086,43087,43089,43091,43093,43095,43097,43099],{"class":131,"line":1693},[129,43088,31983],{"class":5231},[129,43090,185],{"class":135},[129,43092,31494],{"class":139},[129,43094,31497],{"class":5231},[129,43096,185],{"class":135},[129,43098,35450],{"class":188},[129,43100,31505],{"class":139},[129,43102,43103,43105,43107,43109],{"class":131,"line":1707},[129,43104,32000],{"class":5231},[129,43106,185],{"class":135},[129,43108,31477],{"class":188},[129,43110,146],{"class":139},[129,43112,43113,43115,43117,43119,43121,43123,43125,43127,43129,43131,43133,43135,43137,43139,43141],{"class":131,"line":1712},[129,43114,32011],{"class":139},[129,43116,185],{"class":135},[129,43118,32016],{"class":139},[129,43120,32019],{"class":188},[129,43122,140],{"class":139},[129,43124,32024],{"class":188},[129,43126,594],{"class":135},[129,43128,7373],{"class":188},[129,43130,32031],{"class":139},[129,43132,32019],{"class":188},[129,43134,140],{"class":139},[129,43136,32038],{"class":188},[129,43138,594],{"class":135},[129,43140,7373],{"class":188},[129,43142,32045],{"class":139},[129,43144,43145,43147,43149,43151,43153,43155],{"class":131,"line":1741},[129,43146,32050],{"class":139},[129,43148,185],{"class":135},[129,43150,32055],{"class":139},[129,43152,31538],{"class":5231},[129,43154,185],{"class":135},[129,43156,31543],{"class":139},[129,43158,43159,43161,43163,43165],{"class":131,"line":1746},[129,43160,32066],{"class":5231},[129,43162,185],{"class":135},[129,43164,337],{"class":188},[129,43166,31467],{"class":139},[129,43168,43169,43171,43173,43175],{"class":131,"line":1763},[129,43170,32078],{"class":5231},[129,43172,185],{"class":135},[129,43174,31477],{"class":188},[129,43176,31467],{"class":139},[129,43178,43179],{"class":131,"line":1768},[129,43180,32089],{"class":198},[129,43182,43183,43185,43187,43189],{"class":131,"line":1773},[129,43184,32094],{"class":5231},[129,43186,185],{"class":135},[129,43188,534],{"class":188},[129,43190,146],{"class":139},[129,43192,43193,43195,43197,43199,43201,43203],{"class":131,"line":1778},[129,43194,32105],{"class":139},[129,43196,185],{"class":135},[129,43198,31535],{"class":139},[129,43200,31538],{"class":5231},[129,43202,185],{"class":135},[129,43204,32116],{"class":139},[129,43206,43207,43209,43211,43213],{"class":131,"line":1792},[129,43208,32121],{"class":5231},[129,43210,185],{"class":135},[129,43212,337],{"class":188},[129,43214,31467],{"class":139},[129,43216,43217,43219,43221,43223],{"class":131,"line":1797},[129,43218,32132],{"class":5231},[129,43220,185],{"class":135},[129,43222,31477],{"class":188},[129,43224,31467],{"class":139},[129,43226,43227,43229,43231,43233],{"class":131,"line":2591},[129,43228,32143],{"class":5231},[129,43230,185],{"class":135},[129,43232,534],{"class":188},[129,43234,146],{"class":139},[129,43236,43237,43239],{"class":131,"line":2605},[129,43238,4104],{"class":135},[129,43240,32156],{"class":139},[129,43242,43243],{"class":131,"line":2613},[129,43244,2414],{"emptyLinePlaceholder":56},[129,43246,43247],{"class":131,"line":2618},[129,43248,32165],{"class":198},[129,43250,43251],{"class":131,"line":2624},[129,43252,32170],{"class":198},[129,43254,43255],{"class":131,"line":2630},[129,43256,2414],{"emptyLinePlaceholder":56},[129,43258,43259],{"class":131,"line":2635},[129,43260,32179],{"class":198},[129,43262,43263,43265,43267],{"class":131,"line":7963},[129,43264,31948],{"class":135},[129,43266,32186],{"class":1977},[129,43268,32189],{"class":139},[129,43270,43271,43273,43275,43277,43279,43281,43283,43285,43287],{"class":131,"line":7987},[129,43272,31238],{"class":139},[129,43274,185],{"class":135},[129,43276,30452],{"class":139},[129,43278,31245],{"class":244},[129,43280,1718],{"class":135},[129,43282,31250],{"class":139},[129,43284,1715],{"class":135},[129,43286,32208],{"class":244},[129,43288,146],{"class":139},[129,43290,43291],{"class":131,"line":7992},[129,43292,2414],{"emptyLinePlaceholder":56},[129,43294,43295],{"class":131,"line":7998},[129,43296,2414],{"emptyLinePlaceholder":56},[129,43298,43299],{"class":131,"line":8025},[129,43300,32223],{"class":198},[129,43302,43303],{"class":131,"line":8030},[129,43304,32228],{"class":198},[129,43306,43307],{"class":131,"line":8036},[129,43308,32233],{"class":198},[129,43310,43311,43313,43315,43317,43319,43321,43323],{"class":131,"line":8048},[129,43312,32238],{"class":139},[129,43314,185],{"class":135},[129,43316,32243],{"class":139},[129,43318,32246],{"class":5231},[129,43320,185],{"class":135},[129,43322,32251],{"class":188},[129,43324,146],{"class":139},[129,43326,43327],{"class":131,"line":8060},[129,43328,2414],{"emptyLinePlaceholder":56},[129,43330,43331],{"class":131,"line":8072},[129,43332,32262],{"class":198},[129,43334,43335,43337,43339],{"class":131,"line":9731},[129,43336,32267],{"class":139},[129,43338,185],{"class":135},[129,43340,32272],{"class":139},[129,43342,43343],{"class":131,"line":9756},[129,43344,2414],{"emptyLinePlaceholder":56},[129,43346,43347],{"class":131,"line":9779},[129,43348,32281],{"class":198},[129,43350,43351,43353,43355],{"class":131,"line":9803},[129,43352,31290],{"class":139},[129,43354,185],{"class":135},[129,43356,32290],{"class":139},[129,43358,43359],{"class":131,"line":9808},[129,43360,32295],{"class":198},[129,43362,43363],{"class":131,"line":9813},[129,43364,32300],{"class":198},[129,43366,43367],{"class":131,"line":9818},[129,43368,32305],{"class":198},[129,43370,43371,43373,43375],{"class":131,"line":9827},[129,43372,32310],{"class":139},[129,43374,185],{"class":135},[129,43376,32315],{"class":139},[129,43378,43379],{"class":131,"line":9832},[129,43380,2414],{"emptyLinePlaceholder":56},[129,43382,43383],{"class":131,"line":9838},[129,43384,2414],{"emptyLinePlaceholder":56},[129,43386,43387],{"class":131,"line":9859},[129,43388,32328],{"class":198},[129,43390,43391],{"class":131,"line":9865},[129,43392,32333],{"class":198},[129,43394,43395,43397,43399],{"class":131,"line":9879},[129,43396,32338],{"class":139},[129,43398,185],{"class":135},[129,43400,32343],{"class":188},[129,43402,43403],{"class":131,"line":9885},[129,43404,32348],{"class":198},[129,43406,43407,43409,43411],{"class":131,"line":9912},[129,43408,32353],{"class":139},[129,43410,185],{"class":135},[129,43412,32358],{"class":139},[129,43414,43415],{"class":131,"line":9921},[129,43416,32363],{"class":198},[129,43418,43419,43421,43423],{"class":131,"line":9927},[129,43420,32368],{"class":139},[129,43422,185],{"class":135},[129,43424,32358],{"class":139},[129,43426,43427],{"class":131,"line":9935},[129,43428,32377],{"class":198},[129,43430,43431,43433,43435],{"class":131,"line":9940},[129,43432,32382],{"class":139},[129,43434,185],{"class":135},[129,43436,32358],{"class":139},[129,43438,43439],{"class":131,"line":16619},[129,43440,32391],{"class":198},[129,43442,43443,43445,43447],{"class":131,"line":16625},[129,43444,32396],{"class":139},[129,43446,185],{"class":135},[129,43448,32358],{"class":139},[129,43450,43451],{"class":131,"line":16648},[129,43452,2414],{"emptyLinePlaceholder":56},[129,43454,43455],{"class":131,"line":16654},[129,43456,32409],{"class":198},[129,43458,43459,43461,43463],{"class":131,"line":16677},[129,43460,32414],{"class":139},[129,43462,185],{"class":135},[129,43464,32419],{"class":139},[129,43466,43467],{"class":131,"line":16691},[129,43468,2414],{"emptyLinePlaceholder":56},[129,43470,43471],{"class":131,"line":16711},[129,43472,2414],{"emptyLinePlaceholder":56},[129,43474,43475],{"class":131,"line":16717},[129,43476,32432],{"class":198},[129,43478,43479,43481,43483,43485,43487],{"class":131,"line":16728},[129,43480,3215],{"class":135},[129,43482,32439],{"class":139},[129,43484,26044],{"class":135},[129,43486,32444],{"class":188},[129,43488,32447],{"class":139},[129,43490,43491,43493,43495,43497,43499,43501,43503,43505,43507,43509,43511],{"class":131,"line":16751},[129,43492,32452],{"class":188},[129,43494,140],{"class":139},[129,43496,32457],{"class":244},[129,43498,32460],{"class":188},[129,43500,723],{"class":244},[129,43502,32460],{"class":188},[129,43504,390],{"class":244},[129,43506,32469],{"class":139},[129,43508,671],{"class":135},[129,43510,357],{"class":188},[129,43512,30498],{"class":139},[129,43514,43515,43517,43519,43521,43523,43525],{"class":131,"line":16773},[129,43516,32452],{"class":188},[129,43518,140],{"class":139},[129,43520,32484],{"class":244},[129,43522,594],{"class":135},[129,43524,585],{"class":188},[129,43526,146],{"class":139},[129,43528,43529],{"class":131,"line":16778},[129,43530,2414],{"emptyLinePlaceholder":56},[129,43532,43533],{"class":131,"line":16784},[129,43534,32499],{"class":198},[129,43536,43537],{"class":131,"line":16798},[129,43538,32504],{"class":198},[129,43540,43541,43543,43545],{"class":131,"line":16811},[129,43542,32509],{"class":139},[129,43544,185],{"class":135},[129,43546,32343],{"class":188},[129,43548,43549],{"class":131,"line":16816},[129,43550,32518],{"class":198},[129,43552,43553,43555,43557],{"class":131,"line":16830},[129,43554,32523],{"class":139},[129,43556,185],{"class":135},[129,43558,3099],{"class":188},[129,43560,43561],{"class":131,"line":16835},[129,43562,32532],{"class":198},[129,43564,43565,43567,43569],{"class":131,"line":16841},[129,43566,32537],{"class":139},[129,43568,185],{"class":135},[129,43570,32343],{"class":188},[129,43572,43573],{"class":131,"line":16846},[129,43574,32546],{"class":198},[129,43576,43577,43579,43581],{"class":131,"line":16860},[129,43578,32551],{"class":139},[129,43580,185],{"class":135},[129,43582,3099],{"class":188},[129,43584,43585],{"class":131,"line":16865},[129,43586,32560],{"class":198},[129,43588,43589,43591,43593],{"class":131,"line":16870},[129,43590,32565],{"class":139},[129,43592,185],{"class":135},[129,43594,3099],{"class":188},[129,43596,43597],{"class":131,"line":16884},[129,43598,32574],{"class":198},[129,43600,43601,43603,43605],{"class":131,"line":16896},[129,43602,32579],{"class":139},[129,43604,185],{"class":135},[129,43606,3099],{"class":188},[129,43608,43609],{"class":131,"line":16901},[129,43610,32588],{"class":198},[129,43612,43613,43615,43617,43619,43621],{"class":131,"line":16914},[129,43614,3417],{"class":135},[129,43616,31602],{"class":139},[129,43618,26044],{"class":135},[129,43620,31607],{"class":188},[129,43622,32601],{"class":139},[129,43624,43625],{"class":131,"line":16919},[129,43626,32606],{"class":198},[129,43628,43629,43631,43633],{"class":131,"line":16924},[129,43630,32611],{"class":139},[129,43632,185],{"class":135},[129,43634,32616],{"class":139},[129,43636,43637],{"class":131,"line":16929},[129,43638,32621],{"class":198},[129,43640,43641,43643,43645],{"class":131,"line":16942},[129,43642,32626],{"class":139},[129,43644,185],{"class":135},[129,43646,32631],{"class":139},[129,43648,43649],{"class":131,"line":16947},[129,43650,32637],{"class":198},[129,43652,43653],{"class":131,"line":32634},[129,43654,32643],{"class":139},[129,43656,43657],{"class":131,"line":32640},[129,43658,32649],{"class":198},[129,43660,43661],{"class":131,"line":32646},[129,43662,32655],{"class":198},[129,43664,43665,43667,43669],{"class":131,"line":32652},[129,43666,32661],{"class":139},[129,43668,185],{"class":135},[129,43670,32666],{"class":139},[129,43672,43673],{"class":131,"line":32658},[129,43674,32672],{"class":198},[129,43676,43677,43679,43681,43683,43685,43687,43689],{"class":131,"line":32669},[129,43678,32678],{"class":139},[129,43680,185],{"class":135},[129,43682,32683],{"class":139},[129,43684,32686],{"class":5231},[129,43686,185],{"class":135},[129,43688,357],{"class":188},[129,43690,146],{"class":139},[129,43692,43693],{"class":131,"line":32675},[129,43694,32698],{"class":198},[129,43696,43697,43699,43701],{"class":131,"line":32695},[129,43698,32704],{"class":139},[129,43700,185],{"class":135},[129,43702,32709],{"class":139},[129,43704,43705],{"class":131,"line":32701},[129,43706,32715],{"class":198},[129,43708,43709],{"class":131,"line":32712},[129,43710,32721],{"class":139},[129,43712,43713],{"class":131,"line":32718},[129,43714,32727],{"class":198},[129,43716,43717],{"class":131,"line":32724},[129,43718,32733],{"class":139},[129,43720,43721],{"class":131,"line":32730},[129,43722,32739],{"class":198},[129,43724,43725],{"class":131,"line":32736},[129,43726,32745],{"class":139},[129,43728,43729],{"class":131,"line":32742},[129,43730,32751],{"class":198},[129,43732,43733,43735,43737,43739,43741,43743,43745],{"class":131,"line":32748},[129,43734,32757],{"class":139},[129,43736,9492],{"class":135},[129,43738,32762],{"class":139},[129,43740,594],{"class":135},[129,43742,32767],{"class":139},[129,43744,331],{"class":188},[129,43746,146],{"class":139},[129,43748,43749],{"class":131,"line":32754},[129,43750,32777],{"class":198},[129,43752,43753,43755,43757,43759,43761],{"class":131,"line":32774},[129,43754,32783],{"class":139},[129,43756,9492],{"class":135},[129,43758,32788],{"class":139},[129,43760,2963],{"class":135},[129,43762,32793],{"class":139},[129,43764,43765],{"class":131,"line":32780},[129,43766,32799],{"class":198},[129,43768,43769,43771,43773,43775,43777],{"class":131,"line":32796},[129,43770,32805],{"class":139},[129,43772,9492],{"class":135},[129,43774,32767],{"class":139},[129,43776,331],{"class":188},[129,43778,146],{"class":139},[129,43780,43781],{"class":131,"line":32802},[129,43782,32819],{"class":198},[129,43784,43785,43787,43789,43791,43793],{"class":131,"line":32816},[129,43786,3417],{"class":135},[129,43788,32827],{"class":139},[129,43790,26044],{"class":135},[129,43792,31607],{"class":188},[129,43794,32834],{"class":139},[129,43796,43797],{"class":131,"line":32822},[129,43798,32840],{"class":198},[129,43800,43801,43803,43805],{"class":131,"line":32837},[129,43802,32611],{"class":139},[129,43804,185],{"class":135},[129,43806,32616],{"class":139},[129,43808,43809],{"class":131,"line":32843},[129,43810,32855],{"class":198},[129,43812,43813,43815,43817],{"class":131,"line":32852},[129,43814,32626],{"class":139},[129,43816,185],{"class":135},[129,43818,32631],{"class":139},[129,43820,43821],{"class":131,"line":32858},[129,43822,32870],{"class":198},[129,43824,43825],{"class":131,"line":32867},[129,43826,32876],{"class":139},[129,43828,43829],{"class":131,"line":32873},[129,43830,36357],{"class":198},[129,43832,43833,43835],{"class":131,"line":32879},[129,43834,32882],{"class":135},[129,43836,32885],{"class":139},[129,43838,43839],{"class":131,"line":32888},[129,43840,32891],{"class":198},[129,43842,43843,43845,43847],{"class":131,"line":32894},[129,43844,36372],{"class":139},[129,43846,185],{"class":135},[129,43848,32666],{"class":139},[129,43850,43851],{"class":131,"line":32905},[129,43852,32908],{"class":198},[129,43854,43855,43857,43859,43861,43863,43865,43867],{"class":131,"line":32911},[129,43856,36385],{"class":139},[129,43858,185],{"class":135},[129,43860,32683],{"class":139},[129,43862,32686],{"class":5231},[129,43864,185],{"class":135},[129,43866,357],{"class":188},[129,43868,146],{"class":139},[129,43870,43871],{"class":131,"line":32930},[129,43872,32933],{"class":198},[129,43874,43875,43877,43879],{"class":131,"line":32936},[129,43876,36406],{"class":139},[129,43878,185],{"class":135},[129,43880,32709],{"class":139},[129,43882,43883],{"class":131,"line":32947},[129,43884,32950],{"class":198},[129,43886,43887,43889,43891,43893,43895,43897,43899],{"class":131,"line":32953},[129,43888,36419],{"class":139},[129,43890,9492],{"class":135},[129,43892,36424],{"class":139},[129,43894,594],{"class":135},[129,43896,32767],{"class":139},[129,43898,331],{"class":188},[129,43900,146],{"class":139},[129,43902,43903,43905,43907,43909,43911],{"class":131,"line":32973},[129,43904,36437],{"class":139},[129,43906,9492],{"class":135},[129,43908,32788],{"class":139},[129,43910,2963],{"class":135},[129,43912,32793],{"class":139},[129,43914,43915],{"class":131,"line":32989},[129,43916,36450],{"class":198},[129,43918,43919,43921,43923,43925,43927],{"class":131,"line":32995},[129,43920,36455],{"class":139},[129,43922,9492],{"class":135},[129,43924,32767],{"class":139},[129,43926,331],{"class":188},[129,43928,146],{"class":139},[129,43930,43931],{"class":131,"line":33009},[129,43932,33012],{"class":198},[129,43934,43935],{"class":131,"line":33015},[129,43936,33018],{"class":198},[129,43938,43939,43941,43943],{"class":131,"line":33021},[129,43940,33024],{"class":139},[129,43942,723],{"class":135},[129,43944,33029],{"class":139},[129,43946,43947],{"class":131,"line":33032},[129,43948,33035],{"class":198},[129,43950,43951],{"class":131,"line":33038},[129,43952,33041],{"class":198},[129,43954,43955,43957,43959],{"class":131,"line":33044},[129,43956,33047],{"class":139},[129,43958,723],{"class":135},[129,43960,33029],{"class":139},[129,43962,43963],{"class":131,"line":33054},[129,43964,33057],{"class":198},[129,43966,43967,43969,43971],{"class":131,"line":33060},[129,43968,33063],{"class":139},[129,43970,723],{"class":135},[129,43972,33068],{"class":139},[129,43974,43975],{"class":131,"line":33071},[129,43976,33074],{"class":198},[129,43978,43979,43981,43983],{"class":131,"line":33077},[129,43980,33080],{"class":139},[129,43982,723],{"class":135},[129,43984,33068],{"class":139},[129,43986,43987],{"class":131,"line":33087},[129,43988,2414],{"emptyLinePlaceholder":56},[129,43990,43991],{"class":131,"line":33092},[129,43992,33095],{"class":198},[129,43994,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013,44015,44017,44019,44021,44023,44025,44027,44029,44031,44033],{"class":131,"line":33098},[129,43996,32452],{"class":188},[129,43998,140],{"class":139},[129,44000,3606],{"class":244},[129,44002,32460],{"class":188},[129,44004,33109],{"class":244},[129,44006,1035],{"class":188},[129,44008,33114],{"class":135},[129,44010,1085],{"class":188},[129,44012,33119],{"class":244},[129,44014,1035],{"class":188},[129,44016,33114],{"class":135},[129,44018,1085],{"class":188},[129,44020,3606],{"class":244},[129,44022,33130],{"class":139},[129,44024,671],{"class":135},[129,44026,357],{"class":188},[129,44028,33137],{"class":139},[129,44030,671],{"class":135},[129,44032,357],{"class":188},[129,44034,33144],{"class":139},[129,44036,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059,44061,44063,44065,44067,44069,44071,44073,44075],{"class":131,"line":33147},[129,44038,32452],{"class":188},[129,44040,140],{"class":139},[129,44042,3606],{"class":244},[129,44044,32460],{"class":188},[129,44046,33158],{"class":244},[129,44048,1035],{"class":188},[129,44050,33114],{"class":135},[129,44052,1085],{"class":188},[129,44054,33167],{"class":244},[129,44056,1035],{"class":188},[129,44058,33114],{"class":135},[129,44060,1085],{"class":188},[129,44062,3606],{"class":244},[129,44064,33178],{"class":139},[129,44066,671],{"class":135},[129,44068,357],{"class":188},[129,44070,33185],{"class":139},[129,44072,671],{"class":135},[129,44074,357],{"class":188},[129,44076,33144],{"class":139},[129,44078,44079],{"class":131,"line":33194},[129,44080,2414],{"emptyLinePlaceholder":56},[129,44082,44083],{"class":131,"line":33199},[129,44084,33202],{"class":198},[129,44086,44087,44089,44091,44093,44095,44097,44099],{"class":131,"line":33205},[129,44088,2511],{"class":135},[129,44090,33210],{"class":139},[129,44092,671],{"class":135},[129,44094,357],{"class":188},[129,44096,1079],{"class":139},[129,44098,1099],{"class":135},[129,44100,33221],{"class":139},[129,44102,44103],{"class":131,"line":33224},[129,44104,33227],{"class":198},[129,44106,44107,44109,44111,44113,44115,44117,44119],{"class":131,"line":33230},[129,44108,33233],{"class":139},[129,44110,179],{"class":188},[129,44112,185],{"class":135},[129,44114,33240],{"class":139},[129,44116,671],{"class":135},[129,44118,357],{"class":188},[129,44120,33247],{"class":139},[129,44122,44123],{"class":131,"line":33250},[129,44124,33253],{"class":198},[129,44126,44127],{"class":131,"line":33256},[129,44128,33259],{"class":198},[129,44130,44131,44133,44135],{"class":131,"line":33262},[129,44132,33265],{"class":139},[129,44134,185],{"class":135},[129,44136,32315],{"class":139},[129,44138,44139],{"class":131,"line":33272},[129,44140,2414],{"emptyLinePlaceholder":56},[129,44142,44143],{"class":131,"line":33277},[129,44144,33280],{"class":198},[129,44146,44147,44149,44151,44153,44155],{"class":131,"line":33283},[129,44148,33286],{"class":139},[129,44150,185],{"class":135},[129,44152,33291],{"class":139},[129,44154,671],{"class":135},[129,44156,33296],{"class":139},[129,44158,44159,44161,44163,44165,44167,44169,44171,44173,44175,44177,44179,44181,44183,44185,44187,44189,44191,44193],{"class":131,"line":33299},[129,44160,32452],{"class":188},[129,44162,140],{"class":139},[129,44164,33306],{"class":244},[129,44166,1035],{"class":188},[129,44168,33311],{"class":135},[129,44170,1085],{"class":188},[129,44172,683],{"class":244},[129,44174,1035],{"class":188},[129,44176,33311],{"class":135},[129,44178,1085],{"class":188},[129,44180,33324],{"class":244},[129,44182,33327],{"class":139},[129,44184,33330],{"class":135},[129,44186,1046],{"class":188},[129,44188,33335],{"class":139},[129,44190,467],{"class":135},[129,44192,1046],{"class":188},[129,44194,30498],{"class":139},[129,44196,44197],{"class":131,"line":33344},[129,44198,36734],{"class":198},[129,44200,44201],{"class":131,"line":33350},[129,44202,36739],{"class":198},[129,44204,44205,44207,44209],{"class":131,"line":33356},[129,44206,36744],{"class":139},[129,44208,33368],{"class":244},[129,44210,146],{"class":139},[129,44212,44213],{"class":131,"line":33362},[129,44214,33388],{"class":198},[129,44216,44217,44219,44221,44223,44225,44227],{"class":131,"line":33373},[129,44218,33394],{"class":139},[129,44220,185],{"class":135},[129,44222,33399],{"class":139},[129,44224,33402],{"class":5231},[129,44226,185],{"class":135},[129,44228,1560],{"class":139},[129,44230,44231,44233,44235,44237],{"class":131,"line":33379},[129,44232,33412],{"class":244},[129,44234,998],{"class":139},[129,44236,33417],{"class":188},[129,44238,33420],{"class":139},[129,44240,44241,44243],{"class":131,"line":33385},[129,44242,33426],{"class":244},[129,44244,33429],{"class":139},[129,44246,44247,44249],{"class":131,"line":33391},[129,44248,33435],{"class":244},[129,44250,33438],{"class":139},[129,44252,44253,44255],{"class":131,"line":33409},[129,44254,33444],{"class":244},[129,44256,33447],{"class":139},[129,44258,44259,44261],{"class":131,"line":33423},[129,44260,33453],{"class":244},[129,44262,33456],{"class":139},[129,44264,44265],{"class":131,"line":33432},[129,44266,33462],{"class":139},[129,44268,44269],{"class":131,"line":33441},[129,44270,33468],{"class":198},[129,44272,44273,44275],{"class":131,"line":33450},[129,44274,4104],{"class":135},[129,44276,33476],{"class":139},[129,44278,44279],{"class":131,"line":33459},[129,44280,2414],{"emptyLinePlaceholder":56},[129,44282,44283],{"class":131,"line":33465},[129,44284,33487],{"class":198},[129,44286,44287,44289,44291],{"class":131,"line":33471},[129,44288,31948],{"class":135},[129,44290,33495],{"class":1977},[129,44292,33498],{"class":139},[129,44294,44295],{"class":131,"line":33479},[129,44296,33504],{"class":198},[129,44298,44299,44301,44303,44305,44307,44309,44311,44313],{"class":131,"line":33484},[129,44300,33510],{"class":139},[129,44302,31694],{"class":5231},[129,44304,185],{"class":135},[129,44306,140],{"class":139},[129,44308,637],{"class":188},[129,44310,517],{"class":139},[129,44312,432],{"class":188},[129,44314,30498],{"class":139},[129,44316,44317],{"class":131,"line":33490},[129,44318,33530],{"class":198},[129,44320,44321],{"class":131,"line":33501},[129,44322,33536],{"class":198},[129,44324,44325],{"class":131,"line":33507},[129,44326,33542],{"class":198},[129,44328,44329,44331,44333,44335,44337,44339,44341],{"class":131,"line":33527},[129,44330,31728],{"class":139},[129,44332,357],{"class":188},[129,44334,517],{"class":139},[129,44336,217],{"class":188},[129,44338,517],{"class":139},[129,44340,357],{"class":188},[129,44342,146],{"class":139},[129,44344,44345],{"class":131,"line":33533},[129,44346,33565],{"class":198},[129,44348,44349],{"class":131,"line":33539},[129,44350,33571],{"class":198},[129,44352,44353],{"class":131,"line":33545},[129,44354,33577],{"class":198},[129,44356,44357],{"class":131,"line":33562},[129,44358,33583],{"class":198},[129,44360,44361],{"class":131,"line":33568},[129,44362,33589],{"class":198},[129,44364,44365,44367,44369,44371,44373,44375,44377,44379,44381],{"class":131,"line":33574},[129,44366,33595],{"class":139},[129,44368,33598],{"class":244},[129,44370,33601],{"class":139},[129,44372,33604],{"class":244},[129,44374,517],{"class":139},[129,44376,33609],{"class":5231},[129,44378,185],{"class":135},[129,44380,33614],{"class":244},[129,44382,146],{"class":139},[129,44384,44385,44387,44389,44391,44393,44395,44397,44399,44401],{"class":131,"line":33580},[129,44386,33595],{"class":139},[129,44388,33598],{"class":244},[129,44390,33626],{"class":139},[129,44392,33629],{"class":244},[129,44394,517],{"class":139},[129,44396,33609],{"class":5231},[129,44398,185],{"class":135},[129,44400,33638],{"class":244},[129,44402,146],{"class":139},[129,44404,44405],{"class":131,"line":33586},[129,44406,33646],{"class":198},[129,44408,44409],{"class":131,"line":33592},[129,44410,33652],{"class":139},[129,44412,44413],{"class":131,"line":33619},[129,44414,33658],{"class":198},[129,44416,44417,44419,44421],{"class":131,"line":33643},[129,44418,33664],{"class":139},[129,44420,33667],{"class":244},[129,44422,146],{"class":139},[129,44424,44425,44427,44429],{"class":131,"line":33649},[129,44426,33675],{"class":139},[129,44428,33678],{"class":244},[129,44430,146],{"class":139},[129,44432,44433],{"class":131,"line":33655},[129,44434,33686],{"class":198},[129,44436,44437,44439,44441,44443,44445,44447,44449],{"class":131,"line":33661},[129,44438,31728],{"class":139},[129,44440,357],{"class":188},[129,44442,517],{"class":139},[129,44444,217],{"class":188},[129,44446,517],{"class":139},[129,44448,217],{"class":188},[129,44450,146],{"class":139},[129,44452,44453,44455,44457,44459,44461,44463,44465,44467,44469],{"class":131,"line":33672},[129,44454,33595],{"class":139},[129,44456,33598],{"class":244},[129,44458,33713],{"class":139},[129,44460,33604],{"class":244},[129,44462,517],{"class":139},[129,44464,33609],{"class":5231},[129,44466,185],{"class":135},[129,44468,33724],{"class":244},[129,44470,146],{"class":139},[129,44472,44473,44475,44477,44479,44481,44483,44485,44487,44489],{"class":131,"line":33683},[129,44474,33595],{"class":139},[129,44476,33598],{"class":244},[129,44478,33736],{"class":139},[129,44480,33629],{"class":244},[129,44482,517],{"class":139},[129,44484,33609],{"class":5231},[129,44486,185],{"class":135},[129,44488,33747],{"class":244},[129,44490,146],{"class":139},[129,44492,44493],{"class":131,"line":33689},[129,44494,33755],{"class":198},[129,44496,44497],{"class":131,"line":33706},[129,44498,33652],{"class":139},[129,44500,44501,44503,44505],{"class":131,"line":33729},[129,44502,33664],{"class":139},[129,44504,33598],{"class":244},[129,44506,146],{"class":139},[129,44508,44509,44511,44513],{"class":131,"line":33752},[129,44510,33675],{"class":139},[129,44512,33777],{"class":244},[129,44514,146],{"class":139},[129,44516,44517],{"class":131,"line":33758},[129,44518,33785],{"class":139},[129,44520,44521],{"class":131,"line":33763},[129,44522,2414],{"emptyLinePlaceholder":56},[129,44524,44525],{"class":131,"line":33772},[129,44526,33796],{"class":198},[129,44528,44529,44531,44533,44535,44537],{"class":131,"line":33782},[129,44530,1545],{"class":135},[129,44532,31221],{"class":188},[129,44534,2963],{"class":135},[129,44536,31226],{"class":244},[129,44538,3753],{"class":139},[129,44540,44541],{"class":131,"line":33788},[129,44542,33815],{"class":198},[129,44544,44545,44548,44550],{"class":131,"line":33793},[129,44546,44547],{"class":139},"    GoogLeNet",[129,44549,185],{"class":135},[129,44551,44552],{"class":139},"GoogLeNet(Inception)\n",[129,44554,44555,44557,44559],{"class":131,"line":33799},[129,44556,33832],{"class":139},[129,44558,185],{"class":135},[129,44560,33837],{"class":139},[129,44562,44563,44565,44567,44570,44572,44574,44576],{"class":131,"line":33812},[129,44564,33394],{"class":139},[129,44566,185],{"class":135},[129,44568,44569],{"class":139},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[129,44571,33850],{"class":5231},[129,44573,185],{"class":135},[129,44575,1090],{"class":188},[129,44577,146],{"class":139},[129,44579,44580],{"class":131,"line":33818},[129,44581,33862],{"class":139},[83,44583,44584],{"start":1194},[86,44585,40575],{},[120,44587,44589],{"className":30379,"code":44588,"language":30381,"meta":42,"style":42},"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",[126,44590,44591,44597,44607,44617,44621,44631,44642,44646,44650,44654,44662,44678,44688,44704,44714,44728,44732,44742,44752,44762,44768,44772,44776,44784,44788,44804,44812,44816,44820,44828,44836,44840,44844,44848,44852,44858,44862,44872,44880,44888,44892,44896,44900,44908,44912,44928,44932,44936,44940,44952,44956,44968,44972,44976,44988,44992,45002,45006,45010,45022,45026,45034,45038,45042,45050,45054,45062,45066,45070,45074,45078,45082,45098,45106,45110,45114,45162,45168,45172,45182,45190,45198,45202,45206,45210,45214,45222,45226,45242,45246,45254,45262],{"__ignoreMap":42},[129,44592,44593,44595],{"class":131,"line":132},[129,44594,30393],{"class":135},[129,44596,30396],{"class":139},[129,44598,44599,44601,44603,44605],{"class":131,"line":51},[129,44600,30393],{"class":135},[129,44602,31416],{"class":139},[129,44604,31384],{"class":135},[129,44606,31421],{"class":139},[129,44608,44609,44611,44613,44615],{"class":131,"line":1194},[129,44610,30738],{"class":135},[129,44612,31399],{"class":139},[129,44614,30393],{"class":135},[129,44616,31404],{"class":139},[129,44618,44619],{"class":131,"line":1209},[129,44620,33923],{"class":198},[129,44622,44623,44625,44627,44629],{"class":131,"line":1215},[129,44624,30738],{"class":135},[129,44626,31369],{"class":139},[129,44628,30393],{"class":135},[129,44630,31374],{"class":139},[129,44632,44633,44635,44637,44639],{"class":131,"line":1229},[129,44634,30738],{"class":135},[129,44636,31915],{"class":139},[129,44638,30393],{"class":135},[129,44640,44641],{"class":139}," GoogLeNet,Inception\n",[129,44643,44644],{"class":131,"line":1235},[129,44645,2414],{"emptyLinePlaceholder":56},[129,44647,44648],{"class":131,"line":1326},[129,44649,2414],{"emptyLinePlaceholder":56},[129,44651,44652],{"class":131,"line":1332},[129,44653,33952],{"class":198},[129,44655,44656,44658,44660],{"class":131,"line":1344},[129,44657,31948],{"class":135},[129,44659,33959],{"class":1977},[129,44661,31954],{"class":139},[129,44663,44664,44666,44668,44670,44672,44674,44676],{"class":131,"line":1626},[129,44665,33966],{"class":139},[129,44667,185],{"class":135},[129,44669,31456],{"class":139},[129,44671,31459],{"class":5231},[129,44673,185],{"class":135},[129,44675,31464],{"class":244},[129,44677,31467],{"class":139},[129,44679,44680,44682,44684,44686],{"class":131,"line":1631},[129,44681,33983],{"class":5231},[129,44683,185],{"class":135},[129,44685,33988],{"class":188},[129,44687,31467],{"class":139},[129,44689,44690,44692,44694,44696,44698,44700,44702],{"class":131,"line":1637},[129,44691,33995],{"class":5231},[129,44693,185],{"class":135},[129,44695,31494],{"class":139},[129,44697,31497],{"class":5231},[129,44699,185],{"class":135},[129,44701,35450],{"class":188},[129,44703,31505],{"class":139},[129,44705,44706,44708,44710,44712],{"class":131,"line":1642},[129,44707,34012],{"class":5231},[129,44709,185],{"class":135},[129,44711,31477],{"class":188},[129,44713,146],{"class":139},[129,44715,44716,44718,44720,44722,44724,44726],{"class":131,"line":1656},[129,44717,34023],{"class":139},[129,44719,185],{"class":135},[129,44721,31535],{"class":139},[129,44723,31538],{"class":5231},[129,44725,185],{"class":135},[129,44727,34034],{"class":139},[129,44729,44730],{"class":131,"line":1661},[129,44731,34039],{"class":198},[129,44733,44734,44736,44738,44740],{"class":131,"line":1667},[129,44735,34044],{"class":5231},[129,44737,185],{"class":135},[129,44739,357],{"class":188},[129,44741,31467],{"class":139},[129,44743,44744,44746,44748,44750],{"class":131,"line":1688},[129,44745,34055],{"class":5231},[129,44747,185],{"class":135},[129,44749,31477],{"class":188},[129,44751,31467],{"class":139},[129,44753,44754,44756,44758,44760],{"class":131,"line":1693},[129,44755,34066],{"class":5231},[129,44757,185],{"class":135},[129,44759,331],{"class":188},[129,44761,146],{"class":139},[129,44763,44764,44766],{"class":131,"line":1707},[129,44765,4104],{"class":135},[129,44767,34079],{"class":139},[129,44769,44770],{"class":131,"line":1712},[129,44771,2414],{"emptyLinePlaceholder":56},[129,44773,44774],{"class":131,"line":1741},[129,44775,34088],{"class":198},[129,44777,44778,44780,44782],{"class":131,"line":1746},[129,44779,31948],{"class":135},[129,44781,34095],{"class":1977},[129,44783,34098],{"class":139},[129,44785,44786],{"class":131,"line":1763},[129,44787,34103],{"class":198},[129,44789,44790,44792,44794,44796,44798,44800,44802],{"class":131,"line":1768},[129,44791,31238],{"class":139},[129,44793,185],{"class":135},[129,44795,31245],{"class":244},[129,44797,1718],{"class":135},[129,44799,31250],{"class":139},[129,44801,1715],{"class":135},[129,44803,34120],{"class":244},[129,44805,44806,44808,44810],{"class":131,"line":1773},[129,44807,31290],{"class":139},[129,44809,185],{"class":135},[129,44811,32290],{"class":139},[129,44813,44814],{"class":131,"line":1778},[129,44815,2414],{"emptyLinePlaceholder":56},[129,44817,44818],{"class":131,"line":1792},[129,44819,34137],{"class":198},[129,44821,44822,44824,44826],{"class":131,"line":1797},[129,44823,34142],{"class":139},[129,44825,185],{"class":135},[129,44827,32343],{"class":188},[129,44829,44830,44832,44834],{"class":131,"line":2591},[129,44831,34151],{"class":139},[129,44833,185],{"class":135},[129,44835,3099],{"class":188},[129,44837,44838],{"class":131,"line":2605},[129,44839,2414],{"emptyLinePlaceholder":56},[129,44841,44842],{"class":131,"line":2613},[129,44843,34164],{"class":198},[129,44845,44846],{"class":131,"line":2618},[129,44847,34169],{"class":198},[129,44849,44850],{"class":131,"line":2624},[129,44851,34174],{"class":198},[129,44853,44854,44856],{"class":131,"line":2630},[129,44855,34179],{"class":135},[129,44857,32885],{"class":139},[129,44859,44860],{"class":131,"line":2635},[129,44861,34186],{"class":198},[129,44863,44864,44866,44868,44870],{"class":131,"line":7963},[129,44865,3417],{"class":135},[129,44867,34193],{"class":139},[129,44869,26044],{"class":135},[129,44871,34198],{"class":139},[129,44873,44874,44876,44878],{"class":131,"line":7987},[129,44875,34203],{"class":139},[129,44877,185],{"class":135},[129,44879,34208],{"class":139},[129,44881,44882,44884,44886],{"class":131,"line":7992},[129,44883,34213],{"class":139},[129,44885,185],{"class":135},[129,44887,34218],{"class":139},[129,44889,44890],{"class":131,"line":7998},[129,44891,34223],{"class":198},[129,44893,44894],{"class":131,"line":8025},[129,44895,32876],{"class":139},[129,44897,44898],{"class":131,"line":8030},[129,44899,34232],{"class":198},[129,44901,44902,44904,44906],{"class":131,"line":8036},[129,44903,32661],{"class":139},[129,44905,185],{"class":135},[129,44907,34241],{"class":139},[129,44909,44910],{"class":131,"line":8048},[129,44911,34246],{"class":198},[129,44913,44914,44916,44918,44920,44922,44924,44926],{"class":131,"line":8060},[129,44915,32678],{"class":139},[129,44917,185],{"class":135},[129,44919,32683],{"class":139},[129,44921,32686],{"class":5231},[129,44923,185],{"class":135},[129,44925,357],{"class":188},[129,44927,146],{"class":139},[129,44929,44930],{"class":131,"line":8072},[129,44931,34267],{"class":198},[129,44933,44934],{"class":131,"line":9731},[129,44935,34272],{"class":198},[129,44937,44938],{"class":131,"line":9756},[129,44939,34277],{"class":198},[129,44941,44942,44944,44946,44948,44950],{"class":131,"line":9779},[129,44943,34282],{"class":139},[129,44945,9492],{"class":135},[129,44947,32788],{"class":139},[129,44949,2963],{"class":135},[129,44951,34291],{"class":139},[129,44953,44954],{"class":131,"line":9803},[129,44955,34296],{"class":198},[129,44957,44958,44960,44962,44964,44966],{"class":131,"line":9808},[129,44959,34301],{"class":139},[129,44961,9492],{"class":135},[129,44963,34306],{"class":139},[129,44965,331],{"class":188},[129,44967,146],{"class":139},[129,44969,44970],{"class":131,"line":9813},[129,44971,2414],{"emptyLinePlaceholder":56},[129,44973,44974],{"class":131,"line":9818},[129,44975,34319],{"class":198},[129,44977,44978,44980,44982,44984,44986],{"class":131,"line":9827},[129,44979,34324],{"class":139},[129,44981,185],{"class":135},[129,44983,34329],{"class":139},[129,44985,723],{"class":135},[129,44987,34334],{"class":139},[129,44989,44990],{"class":131,"line":9832},[129,44991,34339],{"class":198},[129,44993,44994,44996,44998,45000],{"class":131,"line":9838},[129,44995,32452],{"class":188},[129,44997,140],{"class":139},[129,44999,34348],{"class":244},[129,45001,34351],{"class":139},[129,45003,45004],{"class":131,"line":9859},[129,45005,2414],{"emptyLinePlaceholder":56},[129,45007,45008],{"class":131,"line":9865},[129,45009,34360],{"class":198},[129,45011,45012,45014,45016,45018,45020],{"class":131,"line":9879},[129,45013,1545],{"class":135},[129,45015,31221],{"class":188},[129,45017,2963],{"class":135},[129,45019,31226],{"class":244},[129,45021,3753],{"class":139},[129,45023,45024],{"class":131,"line":9885},[129,45025,34377],{"class":198},[129,45027,45028,45030,45032],{"class":131,"line":9912},[129,45029,31290],{"class":139},[129,45031,185],{"class":135},[129,45033,44552],{"class":139},[129,45035,45036],{"class":131,"line":9921},[129,45037,34390],{"class":198},[129,45039,45040],{"class":131,"line":9927},[129,45041,34395],{"class":198},[129,45043,45044,45046,45048],{"class":131,"line":9935},[129,45045,34400],{"class":139},[129,45047,34403],{"class":244},[129,45049,30498],{"class":139},[129,45051,45052],{"class":131,"line":9940},[129,45053,34410],{"class":198},[129,45055,45056,45058,45060],{"class":131,"line":16619},[129,45057,34023],{"class":139},[129,45059,185],{"class":135},[129,45061,34419],{"class":139},[129,45063,45064],{"class":131,"line":16625},[129,45065,34424],{"class":198},[129,45067,45068],{"class":131,"line":16648},[129,45069,34429],{"class":139},[129,45071,45072],{"class":131,"line":16654},[129,45073,2414],{"emptyLinePlaceholder":56},[129,45075,45076],{"class":131,"line":16677},[129,45077,34438],{"class":198},[129,45079,45080],{"class":131,"line":16691},[129,45081,34443],{"class":198},[129,45083,45084,45086,45088,45090,45092,45094,45096],{"class":131,"line":16711},[129,45085,31238],{"class":139},[129,45087,185],{"class":135},[129,45089,31245],{"class":244},[129,45091,1718],{"class":135},[129,45093,31250],{"class":139},[129,45095,1715],{"class":135},[129,45097,34120],{"class":244},[129,45099,45100,45102,45104],{"class":131,"line":16717},[129,45101,31290],{"class":139},[129,45103,185],{"class":135},[129,45105,32290],{"class":139},[129,45107,45108],{"class":131,"line":16728},[129,45109,34472],{"class":198},[129,45111,45112],{"class":131,"line":16751},[129,45113,34477],{"class":198},[129,45115,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140,45142,45144,45146,45148,45150,45152,45154,45156,45158,45160],{"class":131,"line":16773},[129,45117,34482],{"class":139},[129,45119,185],{"class":135},[129,45121,1029],{"class":139},[129,45123,34489],{"class":244},[129,45125,517],{"class":139},[129,45127,34494],{"class":244},[129,45129,517],{"class":139},[129,45131,34499],{"class":244},[129,45133,517],{"class":139},[129,45135,34504],{"class":244},[129,45137,517],{"class":139},[129,45139,34509],{"class":244},[129,45141,517],{"class":139},[129,45143,34514],{"class":244},[129,45145,517],{"class":139},[129,45147,34519],{"class":244},[129,45149,517],{"class":139},[129,45151,34524],{"class":244},[129,45153,517],{"class":139},[129,45155,34529],{"class":244},[129,45157,517],{"class":139},[129,45159,34534],{"class":244},[129,45161,33247],{"class":139},[129,45163,45164,45166],{"class":131,"line":16778},[129,45165,34179],{"class":135},[129,45167,32885],{"class":139},[129,45169,45170],{"class":131,"line":16784},[129,45171,34547],{"class":198},[129,45173,45174,45176,45178,45180],{"class":131,"line":16798},[129,45175,3417],{"class":135},[129,45177,34554],{"class":139},[129,45179,26044],{"class":135},[129,45181,34198],{"class":139},[129,45183,45184,45186,45188],{"class":131,"line":16811},[129,45185,32611],{"class":139},[129,45187,185],{"class":135},[129,45189,32616],{"class":139},[129,45191,45192,45194,45196],{"class":131,"line":16816},[129,45193,32626],{"class":139},[129,45195,185],{"class":135},[129,45197,32631],{"class":139},[129,45199,45200],{"class":131,"line":16830},[129,45201,2414],{"emptyLinePlaceholder":56},[129,45203,45204],{"class":131,"line":16835},[129,45205,34583],{"class":198},[129,45207,45208],{"class":131,"line":16841},[129,45209,32876],{"class":139},[129,45211,45212],{"class":131,"line":16846},[129,45213,34592],{"class":198},[129,45215,45216,45218,45220],{"class":131,"line":16860},[129,45217,32661],{"class":139},[129,45219,185],{"class":135},[129,45221,32666],{"class":139},[129,45223,45224],{"class":131,"line":16865},[129,45225,34605],{"class":198},[129,45227,45228,45230,45232,45234,45236,45238,45240],{"class":131,"line":16870},[129,45229,32678],{"class":139},[129,45231,185],{"class":135},[129,45233,32683],{"class":139},[129,45235,32686],{"class":5231},[129,45237,185],{"class":135},[129,45239,357],{"class":188},[129,45241,146],{"class":139},[129,45243,45244],{"class":131,"line":16884},[129,45245,34626],{"class":198},[129,45247,45248,45250,45252],{"class":131,"line":16896},[129,45249,34631],{"class":139},[129,45251,185],{"class":135},[129,45253,34636],{"class":139},[129,45255,45256,45258,45260],{"class":131,"line":16901},[129,45257,34641],{"class":139},[129,45259,185],{"class":135},[129,45261,34646],{"class":139},[129,45263,45264,45266,45268,45270,45272,45274,45276,45278],{"class":131,"line":16914},[129,45265,34651],{"class":188},[129,45267,140],{"class":139},[129,45269,34656],{"class":244},[129,45271,34659],{"class":139},[129,45273,34662],{"class":244},[129,45275,517],{"class":139},[129,45277,34667],{"class":244},[129,45279,34670],{"class":139},[100,45281,45283],{"id":45282},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45285,45286],{},"猫狗分类任务",[14,45288,45289],{},"划分数据集和验证集",[120,45291,45293],{"className":30379,"code":45292,"language":30381,"meta":42,"style":42},"# 创建脚本，用于划分数据集和验证集\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",[126,45294,45295,45300,45307,45312,45323,45330,45334,45344,45358,45367,45371,45376,45386,45406,45410,45415,45425,45436,45449,45453,45458,45467,45477,45488,45492,45497,45507,45511,45516,45521,45526,45531,45536,45540,45550,45577,45590,45602,45629,45634,45639,45653,45658,45670,45685,45700,45708,45712,45717,45723,45735,45748,45753,45758,45763,45813,45819,45823],{"__ignoreMap":42},[129,45296,45297],{"class":131,"line":132},[129,45298,45299],{"class":198},"# 创建脚本，用于划分数据集和验证集\n",[129,45301,45302,45304],{"class":131,"line":51},[129,45303,30393],{"class":135},[129,45305,45306],{"class":139}," os\n",[129,45308,45309],{"class":131,"line":1194},[129,45310,45311],{"class":198},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[129,45313,45314,45316,45319,45321],{"class":131,"line":1209},[129,45315,30738],{"class":135},[129,45317,45318],{"class":139}," shutil ",[129,45320,30393],{"class":135},[129,45322,31823],{"class":139},[129,45324,45325,45327],{"class":131,"line":1215},[129,45326,30393],{"class":135},[129,45328,45329],{"class":139}," random\n",[129,45331,45332],{"class":131,"line":1229},[129,45333,2414],{"emptyLinePlaceholder":56},[129,45335,45336,45338,45341],{"class":131,"line":1235},[129,45337,31948],{"class":135},[129,45339,45340],{"class":1977}," mkfile",[129,45342,45343],{"class":139},"(file):\n",[129,45345,45346,45348,45350,45353,45356],{"class":131,"line":1326},[129,45347,3115],{"class":135},[129,45349,38931],{"class":135},[129,45351,45352],{"class":139}," os.path.exists(",[129,45354,45355],{"class":5231},"file",[129,45357,30787],{"class":139},[129,45359,45360,45363,45365],{"class":131,"line":1332},[129,45361,45362],{"class":139},"        os.makedirs(",[129,45364,45355],{"class":5231},[129,45366,146],{"class":139},[129,45368,45369],{"class":131,"line":1344},[129,45370,2414],{"emptyLinePlaceholder":56},[129,45372,45373],{"class":131,"line":1626},[129,45374,45375],{"class":198},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[129,45377,45378,45381,45383],{"class":131,"line":1631},[129,45379,45380],{"class":139},"file_path",[129,45382,185],{"class":135},[129,45384,45385],{"class":244},"'data_cat_dog'\n",[129,45387,45388,45391,45393,45396,45398,45401,45403],{"class":131,"line":1637},[129,45389,45390],{"class":139},"flower_class",[129,45392,185],{"class":135},[129,45394,45395],{"class":139},"[cla ",[129,45397,3039],{"class":135},[129,45399,45400],{"class":139}," cla ",[129,45402,26044],{"class":135},[129,45404,45405],{"class":139}," os.listdir(file_path)]\n",[129,45407,45408],{"class":131,"line":1642},[129,45409,2414],{"emptyLinePlaceholder":56},[129,45411,45412],{"class":131,"line":1656},[129,45413,45414],{"class":198},"# 创建训练集train文件夹\n",[129,45416,45417,45420,45423],{"class":131,"line":1661},[129,45418,45419],{"class":139},"mkfile(",[129,45421,45422],{"class":244},"'data\u002Ftrain'",[129,45424,146],{"class":139},[129,45426,45427,45429,45431,45433],{"class":131,"line":1667},[129,45428,3039],{"class":135},[129,45430,45400],{"class":139},[129,45432,26044],{"class":135},[129,45434,45435],{"class":139}," flower_class:\n",[129,45437,45438,45441,45444,45446],{"class":131,"line":1688},[129,45439,45440],{"class":139},"    mkfile(",[129,45442,45443],{"class":244},"'data\u002Ftrain\u002F'",[129,45445,620],{"class":135},[129,45447,45448],{"class":139},"cla)\n",[129,45450,45451],{"class":131,"line":1693},[129,45452,2414],{"emptyLinePlaceholder":56},[129,45454,45455],{"class":131,"line":1707},[129,45456,45457],{"class":198},"# 创建验证集val文件夹\n",[129,45459,45460,45462,45465],{"class":131,"line":1712},[129,45461,45419],{"class":139},[129,45463,45464],{"class":244},"'data\u002Ftest'",[129,45466,146],{"class":139},[129,45468,45469,45471,45473,45475],{"class":131,"line":1741},[129,45470,3039],{"class":135},[129,45472,45400],{"class":139},[129,45474,26044],{"class":135},[129,45476,45435],{"class":139},[129,45478,45479,45481,45484,45486],{"class":131,"line":1746},[129,45480,45440],{"class":139},[129,45482,45483],{"class":244},"'data\u002Ftest\u002F'",[129,45485,620],{"class":135},[129,45487,45448],{"class":139},[129,45489,45490],{"class":131,"line":1763},[129,45491,2414],{"emptyLinePlaceholder":56},[129,45493,45494],{"class":131,"line":1768},[129,45495,45496],{"class":198},"# 划分比例，训练集：测试集=9：1\n",[129,45498,45499,45502,45504],{"class":131,"line":1773},[129,45500,45501],{"class":139},"split_rate",[129,45503,185],{"class":135},[129,45505,45506],{"class":188},"0.1\n",[129,45508,45509],{"class":131,"line":1778},[129,45510,2414],{"emptyLinePlaceholder":56},[129,45512,45513],{"class":131,"line":1792},[129,45514,45515],{"class":198},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[129,45517,45518],{"class":131,"line":1797},[129,45519,45520],{"class":198},"# cla_path：当前类别的原始图片路径\n",[129,45522,45523],{"class":131,"line":2591},[129,45524,45525],{"class":198},"# images：当前类别下所有图片的文件名列表\n",[129,45527,45528],{"class":131,"line":2605},[129,45529,45530],{"class":198},"# num：该类别图片总数\n",[129,45532,45533],{"class":131,"line":2613},[129,45534,45535],{"class":198},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[129,45537,45538],{"class":131,"line":2618},[129,45539,2414],{"emptyLinePlaceholder":56},[129,45541,45542,45544,45546,45548],{"class":131,"line":2624},[129,45543,3039],{"class":135},[129,45545,45400],{"class":139},[129,45547,26044],{"class":135},[129,45549,45435],{"class":139},[129,45551,45552,45555,45557,45560,45562,45565,45568,45570,45572,45574],{"class":131,"line":2630},[129,45553,45554],{"class":139},"    cla_path ",[129,45556,185],{"class":135},[129,45558,45559],{"class":139}," file_path ",[129,45561,620],{"class":135},[129,45563,45564],{"class":244}," '\u002F'",[129,45566,45567],{"class":135}," +",[129,45569,45400],{"class":139},[129,45571,620],{"class":135},[129,45573,45564],{"class":244},[129,45575,45576],{"class":198},"  # 某一类别的子目录\n",[129,45578,45579,45582,45584,45587],{"class":131,"line":2635},[129,45580,45581],{"class":139},"    images ",[129,45583,185],{"class":135},[129,45585,45586],{"class":139}," os.listdir(cla_path)  ",[129,45588,45589],{"class":198},"# iamges 列表存储了该目录下所有图像的名称\n",[129,45591,45592,45595,45597,45599],{"class":131,"line":7963},[129,45593,45594],{"class":139},"    num ",[129,45596,185],{"class":135},[129,45598,7346],{"class":188},[129,45600,45601],{"class":139},"(images)\n",[129,45603,45604,45607,45609,45612,45614,45616,45618,45621,45623,45626],{"class":131,"line":7987},[129,45605,45606],{"class":139},"    eval_index ",[129,45608,185],{"class":135},[129,45610,45611],{"class":139}," random.sample(images, ",[129,45613,632],{"class":5231},[129,45615,185],{"class":135},[129,45617,143],{"class":188},[129,45619,45620],{"class":139},"(num ",[129,45622,594],{"class":135},[129,45624,45625],{"class":139}," split_rate))  ",[129,45627,45628],{"class":198},"# 从images列表中随机抽取 k 个图像名称\n",[129,45630,45631],{"class":131,"line":7992},[129,45632,45633],{"class":198},"    # 遍历该类别下的所有图片\n",[129,45635,45636],{"class":131,"line":7998},[129,45637,45638],{"class":198},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[129,45640,45641,45643,45646,45648,45650],{"class":131,"line":8025},[129,45642,3215],{"class":135},[129,45644,45645],{"class":139}," index, image ",[129,45647,26044],{"class":135},[129,45649,31607],{"class":188},[129,45651,45652],{"class":139},"(images):\n",[129,45654,45655],{"class":131,"line":8030},[129,45656,45657],{"class":198},"        # eval_index 中保存验证集val的图像名称\n",[129,45659,45660,45662,45665,45667],{"class":131,"line":8036},[129,45661,2511],{"class":135},[129,45663,45664],{"class":139}," image ",[129,45666,26044],{"class":135},[129,45668,45669],{"class":139}," eval_index:\n",[129,45671,45672,45675,45677,45680,45682],{"class":131,"line":8048},[129,45673,45674],{"class":139},"            image_path ",[129,45676,185],{"class":135},[129,45678,45679],{"class":139}," cla_path ",[129,45681,620],{"class":135},[129,45683,45684],{"class":139}," image\n",[129,45686,45687,45690,45692,45695,45697],{"class":131,"line":8060},[129,45688,45689],{"class":139},"            new_path ",[129,45691,185],{"class":135},[129,45693,45694],{"class":244}," 'data\u002Ftest\u002F'",[129,45696,45567],{"class":135},[129,45698,45699],{"class":139}," cla\n",[129,45701,45702,45705],{"class":131,"line":8072},[129,45703,45704],{"class":139},"            copy(image_path, new_path)  ",[129,45706,45707],{"class":198},"# 将选中的图像复制到新路径\n",[129,45709,45710],{"class":131,"line":9731},[129,45711,2414],{"emptyLinePlaceholder":56},[129,45713,45714],{"class":131,"line":9756},[129,45715,45716],{"class":198},"        # 其余的图像保存在训练集train中\n",[129,45718,45719,45721],{"class":131,"line":9779},[129,45720,2548],{"class":135},[129,45722,3753],{"class":139},[129,45724,45725,45727,45729,45731,45733],{"class":131,"line":9803},[129,45726,45674],{"class":139},[129,45728,185],{"class":135},[129,45730,45679],{"class":139},[129,45732,620],{"class":135},[129,45734,45684],{"class":139},[129,45736,45737,45739,45741,45744,45746],{"class":131,"line":9808},[129,45738,45689],{"class":139},[129,45740,185],{"class":135},[129,45742,45743],{"class":244}," 'data\u002Ftrain\u002F'",[129,45745,45567],{"class":135},[129,45747,45699],{"class":139},[129,45749,45750],{"class":131,"line":9813},[129,45751,45752],{"class":139},"            copy(image_path, new_path)\n",[129,45754,45755],{"class":131,"line":9818},[129,45756,45757],{"class":198},"            # 打印进度条信息\n",[129,45759,45760],{"class":131,"line":9827},[129,45761,45762],{"class":198},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[129,45764,45765,45767,45769,45771,45774,45776,45778,45781,45783,45785,45787,45790,45793,45795,45797,45800,45803,45805,45807,45810],{"class":131,"line":9832},[129,45766,32452],{"class":188},[129,45768,140],{"class":139},[129,45770,390],{"class":244},[129,45772,45773],{"class":188},"\\r",[129,45775,1029],{"class":244},[129,45777,32460],{"class":188},[129,45779,45780],{"class":244},"] processing [",[129,45782,32460],{"class":188},[129,45784,723],{"class":244},[129,45786,32460],{"class":188},[129,45788,45789],{"class":244},"]\"",[129,45791,45792],{"class":139},".format(cla, index ",[129,45794,620],{"class":135},[129,45796,25119],{"class":188},[129,45798,45799],{"class":139},", num), ",[129,45801,45802],{"class":5231},"end",[129,45804,185],{"class":135},[129,45806,7667],{"class":244},[129,45808,45809],{"class":139},")  ",[129,45811,45812],{"class":198},"# processing bar\n",[129,45814,45815,45817],{"class":131,"line":9838},[129,45816,31300],{"class":188},[129,45818,1990],{"class":139},[129,45820,45821],{"class":131,"line":9859},[129,45822,2414],{"emptyLinePlaceholder":56},[129,45824,45825,45827,45829,45832],{"class":131,"line":9865},[129,45826,30416],{"class":188},[129,45828,140],{"class":139},[129,45830,45831],{"class":244},"\"processing done!\"",[129,45833,146],{"class":139},[14,45835,45836],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22013,45838,45840],{"id":45839},"_242模型代码","2.4.2.模型代码",[14,45842,45843],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[120,45845,45847],{"className":30379,"code":45846,"language":30381,"meta":42,"style":42},"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",[126,45848,45849,45855,45865,45875,45879,45895,45903,45917,45927,45931,45961,45965,45999,46045,46049,46083,46129,46133,46137,46171,46201,46205,46213,46227,46249,46271,46289,46293,46307,46311,46315,46331,46335,46343,46357,46367,46411,46415,46443,46447,46457,46485,46489,46525,46529,46557,46561,46571,46603,46635,46663,46667,46677,46709,46741,46773,46805,46837,46865,46869,46879,46911,46943,46955,46959,46971,46975,46979,46991,46999,47019,47023,47027,47031,47035,47039,47043,47057,47065,47073,47085,47099,47107,47111,47119,47129,47139,47149,47159,47169,47175,47179,47183,47195,47215,47223],{"__ignoreMap":42},[129,45850,45851,45853],{"class":131,"line":132},[129,45852,30393],{"class":135},[129,45854,30396],{"class":139},[129,45856,45857,45859,45861,45863],{"class":131,"line":51},[129,45858,30738],{"class":135},[129,45860,30741],{"class":139},[129,45862,30393],{"class":135},[129,45864,30746],{"class":139},[129,45866,45867,45869,45871,45873],{"class":131,"line":1194},[129,45868,30738],{"class":135},[129,45870,30758],{"class":139},[129,45872,30393],{"class":135},[129,45874,30763],{"class":139},[129,45876,45877],{"class":131,"line":1209},[129,45878,2414],{"emptyLinePlaceholder":56},[129,45880,45881,45883,45885,45887,45889,45891,45893],{"class":131,"line":1215},[129,45882,14709],{"class":135},[129,45884,41494],{"class":1977},[129,45886,140],{"class":139},[129,45888,30779],{"class":1977},[129,45890,697],{"class":139},[129,45892,30784],{"class":1977},[129,45894,30787],{"class":139},[129,45896,45897,45899,45901],{"class":131,"line":1229},[129,45898,30802],{"class":135},[129,45900,30805],{"class":188},[129,45902,41513],{"class":139},[129,45904,45905,45907,45909,45911,45913,45915],{"class":131,"line":1235},[129,45906,30818],{"class":188},[129,45908,41520],{"class":139},[129,45910,30824],{"class":188},[129,45912,30827],{"class":139},[129,45914,30830],{"class":188},[129,45916,1990],{"class":139},[129,45918,45919,45921,45923,45925],{"class":131,"line":1326},[129,45920,30846],{"class":188},[129,45922,34772],{"class":139},[129,45924,185],{"class":135},[129,45926,34777],{"class":139},[129,45928,45929],{"class":131,"line":1332},[129,45930,41543],{"class":198},[129,45932,45933,45935,45937,45939,45941,45943,45945,45947,45949,45951,45953,45955,45957,45959],{"class":131,"line":1344},[129,45934,30846],{"class":188},[129,45936,41550],{"class":139},[129,45938,185],{"class":135},[129,45940,30854],{"class":139},[129,45942,30857],{"class":5231},[129,45944,185],{"class":135},[129,45946,41561],{"class":139},[129,45948,30866],{"class":5231},[129,45950,185],{"class":135},[129,45952,41568],{"class":139},[129,45954,30875],{"class":5231},[129,45956,185],{"class":135},[129,45958,357],{"class":188},[129,45960,146],{"class":139},[129,45962,45963],{"class":131,"line":1626},[129,45964,41581],{"class":198},[129,45966,45967,45969,45971,45973,45975,45977,45979,45981,45983,45985,45987,45989,45991,45993,45995,45997],{"class":131,"line":1631},[129,45968,30846],{"class":188},[129,45970,41588],{"class":139},[129,45972,185],{"class":135},[129,45974,30854],{"class":139},[129,45976,30857],{"class":5231},[129,45978,185],{"class":135},[129,45980,41561],{"class":139},[129,45982,30866],{"class":5231},[129,45984,185],{"class":135},[129,45986,41605],{"class":139},[129,45988,331],{"class":188},[129,45990,41610],{"class":139},[129,45992,30875],{"class":5231},[129,45994,185],{"class":135},[129,45996,357],{"class":188},[129,45998,146],{"class":139},[129,46000,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023,46025,46027,46029,46031,46033,46035,46037,46039,46041,46043],{"class":131,"line":1637},[129,46002,30846],{"class":188},[129,46004,41625],{"class":139},[129,46006,185],{"class":135},[129,46008,30854],{"class":139},[129,46010,30857],{"class":5231},[129,46012,185],{"class":135},[129,46014,41605],{"class":139},[129,46016,331],{"class":188},[129,46018,41610],{"class":139},[129,46020,30866],{"class":5231},[129,46022,185],{"class":135},[129,46024,41605],{"class":139},[129,46026,357],{"class":188},[129,46028,41610],{"class":139},[129,46030,30875],{"class":5231},[129,46032,185],{"class":135},[129,46034,211],{"class":188},[129,46036,517],{"class":139},[129,46038,30884],{"class":5231},[129,46040,185],{"class":135},[129,46042,357],{"class":188},[129,46044,146],{"class":139},[129,46046,46047],{"class":131,"line":1642},[129,46048,41670],{"class":198},[129,46050,46051,46053,46055,46057,46059,46061,46063,46065,46067,46069,46071,46073,46075,46077,46079,46081],{"class":131,"line":1656},[129,46052,30846],{"class":188},[129,46054,41677],{"class":139},[129,46056,185],{"class":135},[129,46058,30854],{"class":139},[129,46060,30857],{"class":5231},[129,46062,185],{"class":135},[129,46064,41561],{"class":139},[129,46066,30866],{"class":5231},[129,46068,185],{"class":135},[129,46070,41694],{"class":139},[129,46072,331],{"class":188},[129,46074,41610],{"class":139},[129,46076,30875],{"class":5231},[129,46078,185],{"class":135},[129,46080,357],{"class":188},[129,46082,146],{"class":139},[129,46084,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111,46113,46115,46117,46119,46121,46123,46125,46127],{"class":131,"line":1661},[129,46086,30846],{"class":188},[129,46088,41713],{"class":139},[129,46090,185],{"class":135},[129,46092,30854],{"class":139},[129,46094,30857],{"class":5231},[129,46096,185],{"class":135},[129,46098,41694],{"class":139},[129,46100,331],{"class":188},[129,46102,41610],{"class":139},[129,46104,30866],{"class":5231},[129,46106,185],{"class":135},[129,46108,41694],{"class":139},[129,46110,357],{"class":188},[129,46112,41610],{"class":139},[129,46114,30875],{"class":5231},[129,46116,185],{"class":135},[129,46118,458],{"class":188},[129,46120,517],{"class":139},[129,46122,30884],{"class":5231},[129,46124,185],{"class":135},[129,46126,217],{"class":188},[129,46128,146],{"class":139},[129,46130,46131],{"class":131,"line":1667},[129,46132,41758],{"class":198},[129,46134,46135],{"class":131,"line":1688},[129,46136,41763],{"class":198},[129,46138,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161,46163,46165,46167,46169],{"class":131,"line":1693},[129,46140,30846],{"class":188},[129,46142,41770],{"class":139},[129,46144,185],{"class":135},[129,46146,34830],{"class":139},[129,46148,30875],{"class":5231},[129,46150,185],{"class":135},[129,46152,211],{"class":188},[129,46154,517],{"class":139},[129,46156,30930],{"class":5231},[129,46158,185],{"class":135},[129,46160,357],{"class":188},[129,46162,517],{"class":139},[129,46164,30884],{"class":5231},[129,46166,185],{"class":135},[129,46168,357],{"class":188},[129,46170,146],{"class":139},[129,46172,46173,46175,46177,46179,46181,46183,46185,46187,46189,46191,46193,46195,46197,46199],{"class":131,"line":1707},[129,46174,30846],{"class":188},[129,46176,41805],{"class":139},[129,46178,185],{"class":135},[129,46180,30854],{"class":139},[129,46182,30857],{"class":5231},[129,46184,185],{"class":135},[129,46186,41561],{"class":139},[129,46188,30866],{"class":5231},[129,46190,185],{"class":135},[129,46192,41822],{"class":139},[129,46194,30875],{"class":5231},[129,46196,185],{"class":135},[129,46198,357],{"class":188},[129,46200,146],{"class":139},[129,46202,46203],{"class":131,"line":1712},[129,46204,2414],{"emptyLinePlaceholder":56},[129,46206,46207,46209,46211],{"class":131,"line":1741},[129,46208,30802],{"class":135},[129,46210,31094],{"class":1977},[129,46212,31097],{"class":139},[129,46214,46215,46217,46219,46221,46223,46225],{"class":131,"line":1746},[129,46216,41847],{"class":139},[129,46218,185],{"class":135},[129,46220,30824],{"class":188},[129,46222,35185],{"class":139},[129,46224,30824],{"class":188},[129,46226,41858],{"class":139},[129,46228,46229,46231,46233,46235,46237,46239,46241,46243,46245,46247],{"class":131,"line":1763},[129,46230,7100],{"class":139},[129,46232,185],{"class":135},[129,46234,30824],{"class":188},[129,46236,35185],{"class":139},[129,46238,30824],{"class":188},[129,46240,41873],{"class":139},[129,46242,30824],{"class":188},[129,46244,35185],{"class":139},[129,46246,30824],{"class":188},[129,46248,41882],{"class":139},[129,46250,46251,46253,46255,46257,46259,46261,46263,46265,46267,46269],{"class":131,"line":1768},[129,46252,41887],{"class":139},[129,46254,185],{"class":135},[129,46256,30824],{"class":188},[129,46258,35185],{"class":139},[129,46260,30824],{"class":188},[129,46262,41898],{"class":139},[129,46264,30824],{"class":188},[129,46266,35185],{"class":139},[129,46268,30824],{"class":188},[129,46270,41907],{"class":139},[129,46272,46273,46275,46277,46279,46281,46283,46285,46287],{"class":131,"line":1773},[129,46274,41912],{"class":139},[129,46276,185],{"class":135},[129,46278,30824],{"class":188},[129,46280,35185],{"class":139},[129,46282,30824],{"class":188},[129,46284,41923],{"class":139},[129,46286,30824],{"class":188},[129,46288,41928],{"class":139},[129,46290,46291],{"class":131,"line":1778},[129,46292,41933],{"class":198},[129,46294,46295,46297,46299,46301,46303,46305],{"class":131,"line":1792},[129,46296,14767],{"class":135},[129,46298,41940],{"class":139},[129,46300,32686],{"class":5231},[129,46302,185],{"class":135},[129,46304,357],{"class":188},[129,46306,146],{"class":139},[129,46308,46309],{"class":131,"line":1797},[129,46310,2414],{"emptyLinePlaceholder":56},[129,46312,46313],{"class":131,"line":2591},[129,46314,41961],{"class":198},[129,46316,46317,46319,46321,46323,46325,46327,46329],{"class":131,"line":2605},[129,46318,14709],{"class":135},[129,46320,41968],{"class":1977},[129,46322,140],{"class":139},[129,46324,30779],{"class":1977},[129,46326,697],{"class":139},[129,46328,30784],{"class":1977},[129,46330,30787],{"class":139},[129,46332,46333],{"class":131,"line":2613},[129,46334,41983],{"class":198},[129,46336,46337,46339,46341],{"class":131,"line":2618},[129,46338,30802],{"class":135},[129,46340,30805],{"class":188},[129,46342,41992],{"class":139},[129,46344,46345,46347,46349,46351,46353,46355],{"class":131,"line":2624},[129,46346,30818],{"class":188},[129,46348,41999],{"class":139},[129,46350,30824],{"class":188},[129,46352,30827],{"class":139},[129,46354,30830],{"class":188},[129,46356,1990],{"class":139},[129,46358,46359,46361,46363,46365],{"class":131,"line":2630},[129,46360,30846],{"class":188},[129,46362,42014],{"class":139},[129,46364,185],{"class":135},[129,46366,38010],{"class":139},[129,46368,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391,46393,46395,46397,46399,46401,46403,46405,46407,46409],{"class":131,"line":2635},[129,46370,38015],{"class":139},[129,46372,30857],{"class":5231},[129,46374,185],{"class":135},[129,46376,211],{"class":188},[129,46378,517],{"class":139},[129,46380,30866],{"class":5231},[129,46382,185],{"class":135},[129,46384,343],{"class":188},[129,46386,517],{"class":139},[129,46388,30875],{"class":5231},[129,46390,185],{"class":135},[129,46392,508],{"class":188},[129,46394,517],{"class":139},[129,46396,30930],{"class":5231},[129,46398,185],{"class":135},[129,46400,217],{"class":188},[129,46402,517],{"class":139},[129,46404,30884],{"class":5231},[129,46406,185],{"class":135},[129,46408,211],{"class":188},[129,46410,38048],{"class":139},[129,46412,46413],{"class":131,"line":7963},[129,46414,38053],{"class":139},[129,46416,46417,46419,46421,46423,46425,46427,46429,46431,46433,46435,46437,46439,46441],{"class":131,"line":7987},[129,46418,38098],{"class":139},[129,46420,30875],{"class":5231},[129,46422,185],{"class":135},[129,46424,211],{"class":188},[129,46426,517],{"class":139},[129,46428,30930],{"class":5231},[129,46430,185],{"class":135},[129,46432,217],{"class":188},[129,46434,517],{"class":139},[129,46436,30884],{"class":5231},[129,46438,185],{"class":135},[129,46440,357],{"class":188},[129,46442,146],{"class":139},[129,46444,46445],{"class":131,"line":7992},[129,46446,38127],{"class":139},[129,46448,46449,46451,46453,46455],{"class":131,"line":7998},[129,46450,30846],{"class":188},[129,46452,42105],{"class":139},[129,46454,185],{"class":135},[129,46456,38010],{"class":139},[129,46458,46459,46461,46463,46465,46467,46469,46471,46473,46475,46477,46479,46481,46483],{"class":131,"line":8025},[129,46460,38015],{"class":139},[129,46462,30857],{"class":5231},[129,46464,185],{"class":135},[129,46466,343],{"class":188},[129,46468,517],{"class":139},[129,46470,30866],{"class":5231},[129,46472,185],{"class":135},[129,46474,343],{"class":188},[129,46476,517],{"class":139},[129,46478,30875],{"class":5231},[129,46480,185],{"class":135},[129,46482,357],{"class":188},[129,46484,38048],{"class":139},[129,46486,46487],{"class":131,"line":8030},[129,46488,38053],{"class":139},[129,46490,46491,46493,46495,46497,46499,46501,46503,46505,46507,46509,46511,46513,46515,46517,46519,46521,46523],{"class":131,"line":8036},[129,46492,38015],{"class":139},[129,46494,30857],{"class":5231},[129,46496,185],{"class":135},[129,46498,343],{"class":188},[129,46500,517],{"class":139},[129,46502,30866],{"class":5231},[129,46504,185],{"class":135},[129,46506,42160],{"class":188},[129,46508,517],{"class":139},[129,46510,30875],{"class":5231},[129,46512,185],{"class":135},[129,46514,211],{"class":188},[129,46516,517],{"class":139},[129,46518,30884],{"class":5231},[129,46520,185],{"class":135},[129,46522,357],{"class":188},[129,46524,38048],{"class":139},[129,46526,46527],{"class":131,"line":8048},[129,46528,38053],{"class":139},[129,46530,46531,46533,46535,46537,46539,46541,46543,46545,46547,46549,46551,46553,46555],{"class":131,"line":8060},[129,46532,38098],{"class":139},[129,46534,30875],{"class":5231},[129,46536,185],{"class":135},[129,46538,211],{"class":188},[129,46540,517],{"class":139},[129,46542,30930],{"class":5231},[129,46544,185],{"class":135},[129,46546,217],{"class":188},[129,46548,517],{"class":139},[129,46550,30884],{"class":5231},[129,46552,185],{"class":135},[129,46554,357],{"class":188},[129,46556,146],{"class":139},[129,46558,46559],{"class":131,"line":8072},[129,46560,38127],{"class":139},[129,46562,46563,46565,46567,46569],{"class":131,"line":9731},[129,46564,30846],{"class":188},[129,46566,42221],{"class":139},[129,46568,185],{"class":135},[129,46570,38010],{"class":139},[129,46572,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601],{"class":131,"line":9756},[129,46574,42230],{"class":139},[129,46576,42160],{"class":188},[129,46578,517],{"class":139},[129,46580,343],{"class":188},[129,46582,42239],{"class":139},[129,46584,349],{"class":188},[129,46586,517],{"class":139},[129,46588,32071],{"class":188},[129,46590,42248],{"class":139},[129,46592,740],{"class":188},[129,46594,517],{"class":139},[129,46596,337],{"class":188},[129,46598,42257],{"class":139},[129,46600,337],{"class":188},[129,46602,38048],{"class":139},[129,46604,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633],{"class":131,"line":9779},[129,46606,42230],{"class":139},[129,46608,34871],{"class":188},[129,46610,517],{"class":139},[129,46612,32071],{"class":188},[129,46614,42239],{"class":139},[129,46616,32071],{"class":188},[129,46618,517],{"class":139},[129,46620,42160],{"class":188},[129,46622,42248],{"class":139},[129,46624,337],{"class":188},[129,46626,517],{"class":139},[129,46628,349],{"class":188},[129,46630,42257],{"class":139},[129,46632,343],{"class":188},[129,46634,38048],{"class":139},[129,46636,46637,46639,46641,46643,46645,46647,46649,46651,46653,46655,46657,46659,46661],{"class":131,"line":9803},[129,46638,38098],{"class":139},[129,46640,30875],{"class":5231},[129,46642,185],{"class":135},[129,46644,211],{"class":188},[129,46646,517],{"class":139},[129,46648,30930],{"class":5231},[129,46650,185],{"class":135},[129,46652,217],{"class":188},[129,46654,517],{"class":139},[129,46656,30884],{"class":5231},[129,46658,185],{"class":135},[129,46660,357],{"class":188},[129,46662,146],{"class":139},[129,46664,46665],{"class":131,"line":9808},[129,46666,38127],{"class":139},[129,46668,46669,46671,46673,46675],{"class":131,"line":9813},[129,46670,30846],{"class":188},[129,46672,42332],{"class":139},[129,46674,185],{"class":135},[129,46676,38010],{"class":139},[129,46678,46679,46681,46683,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707],{"class":131,"line":9818},[129,46680,42230],{"class":139},[129,46682,42343],{"class":188},[129,46684,517],{"class":139},[129,46686,42160],{"class":188},[129,46688,42239],{"class":139},[129,46690,349],{"class":188},[129,46692,517],{"class":139},[129,46694,42356],{"class":188},[129,46696,42248],{"class":139},[129,46698,740],{"class":188},[129,46700,517],{"class":139},[129,46702,746],{"class":188},[129,46704,42257],{"class":139},[129,46706,343],{"class":188},[129,46708,38048],{"class":139},[129,46710,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739],{"class":131,"line":9827},[129,46712,42230],{"class":139},[129,46714,38458],{"class":188},[129,46716,517],{"class":139},[129,46718,21063],{"class":188},[129,46720,42239],{"class":139},[129,46722,757],{"class":188},[129,46724,517],{"class":139},[129,46726,31502],{"class":188},[129,46728,42248],{"class":139},[129,46730,939],{"class":188},[129,46732,517],{"class":139},[129,46734,343],{"class":188},[129,46736,42257],{"class":139},[129,46738,343],{"class":188},[129,46740,38048],{"class":139},[129,46742,46743,46745,46747,46749,46751,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771],{"class":131,"line":9832},[129,46744,42230],{"class":139},[129,46746,38458],{"class":188},[129,46748,517],{"class":139},[129,46750,32071],{"class":188},[129,46752,42239],{"class":139},[129,46754,32071],{"class":188},[129,46756,517],{"class":139},[129,46758,34871],{"class":188},[129,46760,42248],{"class":139},[129,46762,939],{"class":188},[129,46764,517],{"class":139},[129,46766,343],{"class":188},[129,46768,42257],{"class":139},[129,46770,343],{"class":188},[129,46772,38048],{"class":139},[129,46774,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803],{"class":131,"line":9838},[129,46776,42230],{"class":139},[129,46778,38458],{"class":188},[129,46780,517],{"class":139},[129,46782,757],{"class":188},[129,46784,42239],{"class":139},[129,46786,32071],{"class":188},[129,46788,517],{"class":139},[129,46790,42453],{"class":188},[129,46792,42248],{"class":139},[129,46794,337],{"class":188},[129,46796,517],{"class":139},[129,46798,343],{"class":188},[129,46800,42257],{"class":139},[129,46802,343],{"class":188},[129,46804,38048],{"class":139},[129,46806,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835],{"class":131,"line":9859},[129,46808,42230],{"class":139},[129,46810,42474],{"class":188},[129,46812,517],{"class":139},[129,46814,34871],{"class":188},[129,46816,42239],{"class":139},[129,46818,21063],{"class":188},[129,46820,517],{"class":139},[129,46822,42487],{"class":188},[129,46824,42248],{"class":139},[129,46826,337],{"class":188},[129,46828,517],{"class":139},[129,46830,32071],{"class":188},[129,46832,42257],{"class":139},[129,46834,32071],{"class":188},[129,46836,38048],{"class":139},[129,46838,46839,46841,46843,46845,46847,46849,46851,46853,46855,46857,46859,46861,46863],{"class":131,"line":9865},[129,46840,38098],{"class":139},[129,46842,30875],{"class":5231},[129,46844,185],{"class":135},[129,46846,211],{"class":188},[129,46848,517],{"class":139},[129,46850,30930],{"class":5231},[129,46852,185],{"class":135},[129,46854,217],{"class":188},[129,46856,517],{"class":139},[129,46858,30884],{"class":5231},[129,46860,185],{"class":135},[129,46862,357],{"class":188},[129,46864,146],{"class":139},[129,46866,46867],{"class":131,"line":9879},[129,46868,38127],{"class":139},[129,46870,46871,46873,46875,46877],{"class":131,"line":9885},[129,46872,30846],{"class":188},[129,46874,42540],{"class":139},[129,46876,185],{"class":135},[129,46878,38010],{"class":139},[129,46880,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909],{"class":131,"line":9912},[129,46882,42230],{"class":139},[129,46884,42551],{"class":188},[129,46886,517],{"class":139},[129,46888,34871],{"class":188},[129,46890,42239],{"class":139},[129,46892,21063],{"class":188},[129,46894,517],{"class":139},[129,46896,42487],{"class":188},[129,46898,42248],{"class":139},[129,46900,337],{"class":188},[129,46902,517],{"class":139},[129,46904,32071],{"class":188},[129,46906,42257],{"class":139},[129,46908,32071],{"class":188},[129,46910,38048],{"class":139},[129,46912,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941],{"class":131,"line":9921},[129,46914,42230],{"class":139},[129,46916,42551],{"class":188},[129,46918,517],{"class":139},[129,46920,34941],{"class":188},[129,46922,42239],{"class":139},[129,46924,42160],{"class":188},[129,46926,517],{"class":139},[129,46928,34941],{"class":188},[129,46930,42248],{"class":139},[129,46932,746],{"class":188},[129,46934,517],{"class":139},[129,46936,32071],{"class":188},[129,46938,42257],{"class":139},[129,46940,32071],{"class":188},[129,46942,38048],{"class":139},[129,46944,46945,46947,46949,46951,46953],{"class":131,"line":9927},[129,46946,42614],{"class":139},[129,46948,357],{"class":188},[129,46950,517],{"class":139},[129,46952,357],{"class":188},[129,46954,42623],{"class":139},[129,46956,46957],{"class":131,"line":9935},[129,46958,38791],{"class":139},[129,46960,46961,46963,46965,46967,46969],{"class":131,"line":9940},[129,46962,38796],{"class":139},[129,46964,42634],{"class":188},[129,46966,517],{"class":139},[129,46968,217],{"class":188},[129,46970,146],{"class":139},[129,46972,46973],{"class":131,"line":16619},[129,46974,38127],{"class":139},[129,46976,46977],{"class":131,"line":16625},[129,46978,42649],{"class":198},[129,46980,46981,46983,46985,46987,46989],{"class":131,"line":16648},[129,46982,3417],{"class":135},[129,46984,38869],{"class":139},[129,46986,26044],{"class":135},[129,46988,38874],{"class":188},[129,46990,38877],{"class":139},[129,46992,46993,46995,46997],{"class":131,"line":16654},[129,46994,4656],{"class":135},[129,46996,38889],{"class":188},[129,46998,38892],{"class":139},[129,47000,47001,47003,47005,47007,47009,47011,47013,47015,47017],{"class":131,"line":16677},[129,47002,38902],{"class":139},[129,47004,42676],{"class":5231},[129,47006,185],{"class":135},[129,47008,42681],{"class":244},[129,47010,517],{"class":139},[129,47012,38905],{"class":5231},[129,47014,185],{"class":135},[129,47016,38910],{"class":244},[129,47018,146],{"class":139},[129,47020,47021],{"class":131,"line":16691},[129,47022,42696],{"class":198},[129,47024,47025],{"class":131,"line":16711},[129,47026,42701],{"class":198},[129,47028,47029],{"class":131,"line":16717},[129,47030,42706],{"class":198},[129,47032,47033],{"class":131,"line":16728},[129,47034,42711],{"class":198},[129,47036,47037],{"class":131,"line":16751},[129,47038,42716],{"class":198},[129,47040,47041],{"class":131,"line":16773},[129,47042,42721],{"class":198},[129,47044,47045,47047,47049,47051,47053,47055],{"class":131,"line":16778},[129,47046,38922],{"class":135},[129,47048,38925],{"class":139},[129,47050,38928],{"class":135},[129,47052,38931],{"class":135},[129,47054,38934],{"class":188},[129,47056,3753],{"class":139},[129,47058,47059,47061,47063],{"class":131,"line":16784},[129,47060,38946],{"class":139},[129,47062,331],{"class":188},[129,47064,146],{"class":139},[129,47066,47067,47069,47071],{"class":131,"line":16798},[129,47068,42748],{"class":135},[129,47070,38889],{"class":188},[129,47072,38965],{"class":139},[129,47074,47075,47077,47079,47081,47083],{"class":131,"line":16811},[129,47076,42757],{"class":139},[129,47078,331],{"class":188},[129,47080,517],{"class":139},[129,47082,38987],{"class":188},[129,47084,146],{"class":139},[129,47086,47087,47089,47091,47093,47095,47097],{"class":131,"line":16816},[129,47088,42770],{"class":135},[129,47090,38925],{"class":139},[129,47092,38928],{"class":135},[129,47094,38931],{"class":135},[129,47096,38934],{"class":188},[129,47098,3753],{"class":139},[129,47100,47101,47103,47105],{"class":131,"line":16830},[129,47102,42785],{"class":139},[129,47104,331],{"class":188},[129,47106,146],{"class":139},[129,47108,47109],{"class":131,"line":16835},[129,47110,35166],{"class":198},[129,47112,47113,47115,47117],{"class":131,"line":16841},[129,47114,30802],{"class":135},[129,47116,31094],{"class":1977},[129,47118,31097],{"class":139},[129,47120,47121,47123,47125,47127],{"class":131,"line":16846},[129,47122,31102],{"class":139},[129,47124,185],{"class":135},[129,47126,30824],{"class":188},[129,47128,42812],{"class":139},[129,47130,47131,47133,47135,47137],{"class":131,"line":16860},[129,47132,31102],{"class":139},[129,47134,185],{"class":135},[129,47136,30824],{"class":188},[129,47138,42823],{"class":139},[129,47140,47141,47143,47145,47147],{"class":131,"line":16865},[129,47142,31102],{"class":139},[129,47144,185],{"class":135},[129,47146,30824],{"class":188},[129,47148,42834],{"class":139},[129,47150,47151,47153,47155,47157],{"class":131,"line":16870},[129,47152,31102],{"class":139},[129,47154,185],{"class":135},[129,47156,30824],{"class":188},[129,47158,42845],{"class":139},[129,47160,47161,47163,47165,47167],{"class":131,"line":16884},[129,47162,31102],{"class":139},[129,47164,185],{"class":135},[129,47166,30824],{"class":188},[129,47168,42856],{"class":139},[129,47170,47171,47173],{"class":131,"line":16896},[129,47172,14767],{"class":135},[129,47174,31210],{"class":139},[129,47176,47177],{"class":131,"line":16901},[129,47178,2414],{"emptyLinePlaceholder":56},[129,47180,47181],{"class":131,"line":16914},[129,47182,42871],{"class":198},[129,47184,47185,47187,47189,47191,47193],{"class":131,"line":16919},[129,47186,1545],{"class":135},[129,47188,31221],{"class":188},[129,47190,2963],{"class":135},[129,47192,31226],{"class":244},[129,47194,3753],{"class":139},[129,47196,47197,47199,47201,47203,47205,47207,47209,47211,47213],{"class":131,"line":16924},[129,47198,31238],{"class":139},[129,47200,185],{"class":135},[129,47202,30452],{"class":139},[129,47204,31245],{"class":244},[129,47206,1718],{"class":135},[129,47208,31250],{"class":139},[129,47210,1715],{"class":135},[129,47212,30477],{"class":244},[129,47214,146],{"class":139},[129,47216,47217,47219,47221],{"class":131,"line":16929},[129,47218,31290],{"class":139},[129,47220,185],{"class":135},[129,47222,42912],{"class":139},[129,47224,47225,47227,47229,47231,47233,47235,47237,47239],{"class":131,"line":16942},[129,47226,31300],{"class":188},[129,47228,31303],{"class":139},[129,47230,357],{"class":188},[129,47232,517],{"class":139},[129,47234,31502],{"class":188},[129,47236,517],{"class":139},[129,47238,31502],{"class":188},[129,47240,31316],{"class":139},[22013,47242,47244],{"id":47243},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47246,47247],{},"计算图片的均值与方差，用于训练中归一化处理操作",[120,47249,47251],{"className":30379,"code":47250,"language":30381,"meta":42,"style":42},"# 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",[126,47252,47253,47258,47271,47276,47282,47287,47297,47301,47306,47316,47320,47325,47335,47352,47356,47361,47373,47385,47416,47425,47435,47445,47449,47454,47469,47473,47478,47483,47488,47498,47503,47528,47532,47537,47552,47556,47569,47573,47578,47583,47588,47593,47598,47608,47618,47641,47649,47657,47665,47669,47681,47685,47690,47694,47698,47705,47725,47749,47756,47770,47775,47780,47784,47798,47802,47814],{"__ignoreMap":42},[129,47254,47255],{"class":131,"line":132},[129,47256,47257],{"class":198},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[129,47259,47260,47262,47265,47268],{"class":131,"line":51},[129,47261,30738],{"class":135},[129,47263,47264],{"class":188}," PIL",[129,47266,47267],{"class":135}," import",[129,47269,47270],{"class":139}," Image\n",[129,47272,47273],{"class":131,"line":1194},[129,47274,47275],{"class":198},"# os 用来处理文件夹和文件路径\n",[129,47277,47278,47280],{"class":131,"line":1209},[129,47279,30393],{"class":135},[129,47281,45306],{"class":139},[129,47283,47284],{"class":131,"line":1215},[129,47285,47286],{"class":198},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[129,47288,47289,47291,47293,47295],{"class":131,"line":1229},[129,47290,30393],{"class":135},[129,47292,31381],{"class":139},[129,47294,31384],{"class":135},[129,47296,31387],{"class":139},[129,47298,47299],{"class":131,"line":1235},[129,47300,2414],{"emptyLinePlaceholder":56},[129,47302,47303],{"class":131,"line":1326},[129,47304,47305],{"class":198},"# 文件夹路径，包含所有图片文件\n",[129,47307,47308,47311,47313],{"class":131,"line":1332},[129,47309,47310],{"class":139},"folder_path ",[129,47312,185],{"class":135},[129,47314,47315],{"class":244}," 'data_cat_dog'\n",[129,47317,47318],{"class":131,"line":1344},[129,47319,2414],{"emptyLinePlaceholder":56},[129,47321,47322],{"class":131,"line":1626},[129,47323,47324],{"class":198},"# 初始化累积变量\n",[129,47326,47327,47330,47332],{"class":131,"line":1631},[129,47328,47329],{"class":139},"total_pixels ",[129,47331,185],{"class":135},[129,47333,47334],{"class":188}," 0\n",[129,47336,47337,47340,47342,47345,47347,47349],{"class":131,"line":1637},[129,47338,47339],{"class":139},"sum_normalized_pixel_values ",[129,47341,185],{"class":135},[129,47343,47344],{"class":139}," np.zeros(",[129,47346,211],{"class":188},[129,47348,45809],{"class":139},[129,47350,47351],{"class":198},"# 如果是RGB图像，需要三个通道的均值和方差\n",[129,47353,47354],{"class":131,"line":1642},[129,47355,2414],{"emptyLinePlaceholder":56},[129,47357,47358],{"class":131,"line":1656},[129,47359,47360],{"class":198},"# 遍历文件夹中的图片文件\n",[129,47362,47363,47365,47368,47370],{"class":131,"line":1661},[129,47364,3039],{"class":135},[129,47366,47367],{"class":139}," root, dirs, files ",[129,47369,26044],{"class":135},[129,47371,47372],{"class":139}," os.walk(folder_path):\n",[129,47374,47375,47377,47380,47382],{"class":131,"line":1667},[129,47376,3215],{"class":135},[129,47378,47379],{"class":139}," filename ",[129,47381,26044],{"class":135},[129,47383,47384],{"class":139}," files:\n",[129,47386,47387,47389,47392,47395,47397,47400,47402,47405,47407,47410,47413],{"class":131,"line":1688},[129,47388,2511],{"class":135},[129,47390,47391],{"class":139}," filename.endswith((",[129,47393,47394],{"class":244},"'.jpg'",[129,47396,12450],{"class":139},[129,47398,47399],{"class":244},"'.jpeg'",[129,47401,12450],{"class":139},[129,47403,47404],{"class":244},"'.png'",[129,47406,12450],{"class":139},[129,47408,47409],{"class":244},"'.bmp'",[129,47411,47412],{"class":139},")):  ",[129,47414,47415],{"class":198},"# 可根据实际情况添加其他格式\n",[129,47417,47418,47420,47422],{"class":131,"line":1693},[129,47419,45674],{"class":139},[129,47421,185],{"class":135},[129,47423,47424],{"class":139}," os.path.join(root, filename)\n",[129,47426,47427,47430,47432],{"class":131,"line":1707},[129,47428,47429],{"class":139},"            image ",[129,47431,185],{"class":135},[129,47433,47434],{"class":139}," Image.open(image_path)\n",[129,47436,47437,47440,47442],{"class":131,"line":1712},[129,47438,47439],{"class":139},"            image_array ",[129,47441,185],{"class":135},[129,47443,47444],{"class":139}," np.array(image)\n",[129,47446,47447],{"class":131,"line":1741},[129,47448,2414],{"emptyLinePlaceholder":56},[129,47450,47451],{"class":131,"line":1746},[129,47452,47453],{"class":198},"            # 归一化像素值到0-1之间\n",[129,47455,47456,47459,47461,47464,47466],{"class":131,"line":1763},[129,47457,47458],{"class":139},"            normalized_image_array ",[129,47460,185],{"class":135},[129,47462,47463],{"class":139}," image_array ",[129,47465,723],{"class":135},[129,47467,47468],{"class":188}," 255.0\n",[129,47470,47471],{"class":131,"line":1768},[129,47472,2414],{"emptyLinePlaceholder":56},[129,47474,47475],{"class":131,"line":1773},[129,47476,47477],{"class":198},"            # print(image_path)\n",[129,47479,47480],{"class":131,"line":1778},[129,47481,47482],{"class":198},"            # print(normalized_image_array.shape)\n",[129,47484,47485],{"class":131,"line":1792},[129,47486,47487],{"class":198},"            # 累积归一化后的像素值和像素数量\n",[129,47489,47490,47493,47495],{"class":131,"line":1797},[129,47491,47492],{"class":139},"            total_pixels ",[129,47494,9492],{"class":135},[129,47496,47497],{"class":139}," normalized_image_array.size\n",[129,47499,47500],{"class":131,"line":2591},[129,47501,47502],{"class":198},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[129,47504,47505,47508,47510,47513,47516,47518,47520,47522,47524,47526],{"class":131,"line":2605},[129,47506,47507],{"class":139},"            sum_normalized_pixel_values ",[129,47509,9492],{"class":135},[129,47511,47512],{"class":139}," np.sum(normalized_image_array, ",[129,47514,47515],{"class":5231},"axis",[129,47517,185],{"class":135},[129,47519,140],{"class":139},[129,47521,331],{"class":188},[129,47523,12450],{"class":139},[129,47525,357],{"class":188},[129,47527,30498],{"class":139},[129,47529,47530],{"class":131,"line":2613},[129,47531,2414],{"emptyLinePlaceholder":56},[129,47533,47534],{"class":131,"line":2618},[129,47535,47536],{"class":198},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[129,47538,47539,47542,47544,47547,47549],{"class":131,"line":2624},[129,47540,47541],{"class":139},"mean ",[129,47543,185],{"class":135},[129,47545,47546],{"class":139}," sum_normalized_pixel_values ",[129,47548,723],{"class":135},[129,47550,47551],{"class":139}," total_pixels\n",[129,47553,47554],{"class":131,"line":2630},[129,47555,2414],{"emptyLinePlaceholder":56},[129,47557,47558,47561,47563,47565,47567],{"class":131,"line":2635},[129,47559,47560],{"class":139},"sum_squared_diff ",[129,47562,185],{"class":135},[129,47564,47344],{"class":139},[129,47566,211],{"class":188},[129,47568,146],{"class":139},[129,47570,47571],{"class":131,"line":7963},[129,47572,2414],{"emptyLinePlaceholder":56},[129,47574,47575],{"class":131,"line":7987},[129,47576,47577],{"class":198},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[129,47579,47580],{"class":131,"line":7992},[129,47581,47582],{"class":198},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[129,47584,47585],{"class":131,"line":7998},[129,47586,47587],{"class":198},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[129,47589,47590],{"class":131,"line":8025},[129,47591,47592],{"class":198},"# Image.open(image_path)：打开图片\n",[129,47594,47595],{"class":131,"line":8030},[129,47596,47597],{"class":198},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[129,47599,47600,47602,47604,47606],{"class":131,"line":8036},[129,47601,3039],{"class":135},[129,47603,47367],{"class":139},[129,47605,26044],{"class":135},[129,47607,47372],{"class":139},[129,47609,47610,47612,47614,47616],{"class":131,"line":8048},[129,47611,3215],{"class":135},[129,47613,47379],{"class":139},[129,47615,26044],{"class":135},[129,47617,47384],{"class":139},[129,47619,47620,47622,47624,47626,47628,47630,47632,47634,47636,47638],{"class":131,"line":8060},[129,47621,2511],{"class":135},[129,47623,47391],{"class":139},[129,47625,47394],{"class":244},[129,47627,12450],{"class":139},[129,47629,47399],{"class":244},[129,47631,12450],{"class":139},[129,47633,47404],{"class":244},[129,47635,12450],{"class":139},[129,47637,47409],{"class":244},[129,47639,47640],{"class":139},")):\n",[129,47642,47643,47645,47647],{"class":131,"line":8072},[129,47644,45674],{"class":139},[129,47646,185],{"class":135},[129,47648,47424],{"class":139},[129,47650,47651,47653,47655],{"class":131,"line":9731},[129,47652,47429],{"class":139},[129,47654,185],{"class":135},[129,47656,47434],{"class":139},[129,47658,47659,47661,47663],{"class":131,"line":9756},[129,47660,47439],{"class":139},[129,47662,185],{"class":135},[129,47664,47444],{"class":139},[129,47666,47667],{"class":131,"line":9779},[129,47668,47453],{"class":198},[129,47670,47671,47673,47675,47677,47679],{"class":131,"line":9803},[129,47672,47458],{"class":139},[129,47674,185],{"class":135},[129,47676,47463],{"class":139},[129,47678,723],{"class":135},[129,47680,47468],{"class":188},[129,47682,47683],{"class":131,"line":9808},[129,47684,47482],{"class":198},[129,47686,47687],{"class":131,"line":9813},[129,47688,47689],{"class":198},"            # print(mean.shape)\n",[129,47691,47692],{"class":131,"line":9818},[129,47693,47477],{"class":198},[129,47695,47696],{"class":131,"line":9827},[129,47697,2414],{"emptyLinePlaceholder":56},[129,47699,47700,47703],{"class":131,"line":9832},[129,47701,47702],{"class":135},"            try",[129,47704,3753],{"class":139},[129,47706,47707,47710,47712,47715,47717,47720,47722],{"class":131,"line":9838},[129,47708,47709],{"class":139},"                diff ",[129,47711,185],{"class":135},[129,47713,47714],{"class":139}," (normalized_image_array ",[129,47716,671],{"class":135},[129,47718,47719],{"class":139}," mean) ",[129,47721,10676],{"class":135},[129,47723,47724],{"class":188}," 2\n",[129,47726,47727,47730,47732,47735,47737,47739,47741,47743,47745,47747],{"class":131,"line":9859},[129,47728,47729],{"class":139},"                sum_squared_diff ",[129,47731,9492],{"class":135},[129,47733,47734],{"class":139}," np.sum(diff, ",[129,47736,47515],{"class":5231},[129,47738,185],{"class":135},[129,47740,140],{"class":139},[129,47742,331],{"class":188},[129,47744,12450],{"class":139},[129,47746,357],{"class":188},[129,47748,30498],{"class":139},[129,47750,47751,47754],{"class":131,"line":9865},[129,47752,47753],{"class":135},"            except",[129,47755,3753],{"class":139},[129,47757,47758,47761,47763,47765,47768],{"class":131,"line":9879},[129,47759,47760],{"class":188},"                print",[129,47762,140],{"class":139},[129,47764,192],{"class":135},[129,47766,47767],{"class":244},"\"捕获到自定义异常\"",[129,47769,146],{"class":139},[129,47771,47772],{"class":131,"line":9885},[129,47773,47774],{"class":198},"            # diff = (normalized_image_array - mean) ** 2\n",[129,47776,47777],{"class":131,"line":9912},[129,47778,47779],{"class":198},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[129,47781,47782],{"class":131,"line":9921},[129,47783,2414],{"emptyLinePlaceholder":56},[129,47785,47786,47789,47791,47794,47796],{"class":131,"line":9927},[129,47787,47788],{"class":139},"variance ",[129,47790,185],{"class":135},[129,47792,47793],{"class":139}," sum_squared_diff ",[129,47795,723],{"class":135},[129,47797,47551],{"class":139},[129,47799,47800],{"class":131,"line":9935},[129,47801,2414],{"emptyLinePlaceholder":56},[129,47803,47804,47806,47808,47811],{"class":131,"line":9940},[129,47805,30416],{"class":188},[129,47807,140],{"class":139},[129,47809,47810],{"class":244},"\"Mean:\"",[129,47812,47813],{"class":139},", mean)\n",[129,47815,47816,47818,47820,47823],{"class":131,"line":16619},[129,47817,30416],{"class":188},[129,47819,140],{"class":139},[129,47821,47822],{"class":244},"\"Variance:\"",[129,47824,47825],{"class":139},", variance)\n",[120,47827,47829],{"className":30379,"code":47828,"language":30381,"meta":42,"style":42},"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",[126,47830,47831,47837,47843,47853,47859,47869,47883,47893,47903,47913,47917,47927,47937,47941,47945,47953,47958,47963,47982,47986,47991,47996,48001,48006,48047,48052,48062,48067,48080,48085,48090,48095,48100,48105,48109,48114,48119,48141,48145,48177,48191,48201,48211,48215,48225,48239,48249,48259,48269,48275,48279,48283,48287,48291,48295,48303,48323,48327,48331,48335,48339,48355,48359,48363,48371,48375,48379,48387,48391,48395,48399,48407,48411,48415,48419,48427,48431,48439,48443,48451,48455,48463,48467,48475,48479,48483,48491,48495,48499,48511,48535,48549,48553,48557,48561,48569,48573,48581,48585,48593,48597,48605,48609,48617,48621,48629,48633,48645,48649,48657,48661,48669,48673,48677,48681,48685,48693,48697,48713,48717,48725,48729,48733,48737,48741,48745,48749,48753,48769,48773,48785,48789,48801,48805,48817,48821,48829,48833,48841,48845,48849,48853,48859,48863,48871,48875,48891,48895,48903,48907,48923,48935,48939,48951,48955,48959,48967,48971,48975,48983,48987,48995,48999,49007,49011,49015,49057,49099,49103,49107,49123,49127,49143,49147,49151,49159,49163,49167,49179,49217,49221,49225,49233,49237,49251,49261,49267,49273,49279,49285,49289,49293,49299,49303,49307,49315,49319,49337,49341,49345,49349,49365,49369,49373,49377,49381,49385,49405,49425,49429,49433,49437,49445,49453,49457,49473,49493,49513,49517,49522,49531,49540,49545,49550,49555,49568,49573,49582,49591,49608],{"__ignoreMap":42},[129,47832,47833,47835],{"class":131,"line":132},[129,47834,30393],{"class":135},[129,47836,31823],{"class":139},[129,47838,47839,47841],{"class":131,"line":51},[129,47840,30393],{"class":135},[129,47842,31830],{"class":139},[129,47844,47845,47847,47849,47851],{"class":131,"line":1194},[129,47846,30393],{"class":135},[129,47848,31841],{"class":139},[129,47850,31384],{"class":135},[129,47852,31846],{"class":139},[129,47854,47855,47857],{"class":131,"line":1209},[129,47856,30393],{"class":135},[129,47858,30396],{"class":139},[129,47860,47861,47863,47865,47867],{"class":131,"line":1215},[129,47862,30738],{"class":135},[129,47864,31416],{"class":139},[129,47866,30393],{"class":135},[129,47868,31863],{"class":139},[129,47870,47871,47873,47875,47877,47880],{"class":131,"line":1229},[129,47872,30738],{"class":135},[129,47874,31369],{"class":139},[129,47876,30393],{"class":135},[129,47878,47879],{"class":139}," ImageFolder ",[129,47881,47882],{"class":198},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[129,47884,47885,47887,47889,47891],{"class":131,"line":1235},[129,47886,30738],{"class":135},[129,47888,31399],{"class":139},[129,47890,30393],{"class":135},[129,47892,31404],{"class":139},[129,47894,47895,47897,47899,47901],{"class":131,"line":1326},[129,47896,30393],{"class":135},[129,47898,31416],{"class":139},[129,47900,31384],{"class":135},[129,47902,31421],{"class":139},[129,47904,47905,47907,47909,47911],{"class":131,"line":1332},[129,47906,30393],{"class":135},[129,47908,31433],{"class":139},[129,47910,31384],{"class":135},[129,47912,31438],{"class":139},[129,47914,47915],{"class":131,"line":1344},[129,47916,31908],{"class":198},[129,47918,47919,47921,47923,47925],{"class":131,"line":1626},[129,47920,30738],{"class":135},[129,47922,31915],{"class":139},[129,47924,30393],{"class":135},[129,47926,43032],{"class":139},[129,47928,47929,47931,47933,47935],{"class":131,"line":1631},[129,47930,30738],{"class":135},[129,47932,30741],{"class":139},[129,47934,30393],{"class":135},[129,47936,30746],{"class":139},[129,47938,47939],{"class":131,"line":1637},[129,47940,2414],{"emptyLinePlaceholder":56},[129,47942,47943],{"class":131,"line":1642},[129,47944,31943],{"class":198},[129,47946,47947,47949,47951],{"class":131,"line":1656},[129,47948,31948],{"class":135},[129,47950,31951],{"class":1977},[129,47952,31954],{"class":139},[129,47954,47955],{"class":131,"line":1661},[129,47956,47957],{"class":198},"    # 导入自己的数据集，并进行数据处理\n",[129,47959,47960],{"class":131,"line":1667},[129,47961,47962],{"class":198},"    # 定义数据集的路径\n",[129,47964,47965,47968,47970,47972,47974,47976,47980],{"class":131,"line":1688},[129,47966,47967],{"class":188},"    ROOT_PATH",[129,47969,185],{"class":135},[129,47971,809],{"class":135},[129,47973,390],{"class":244},[129,47975,697],{"class":188},[129,47977,47979],{"class":47978},"sA_wV","\u002Fdata\u002Ftrain",[129,47981,25134],{"class":244},[129,47983,47984],{"class":131,"line":1693},[129,47985,2414],{"emptyLinePlaceholder":56},[129,47987,47988],{"class":131,"line":1707},[129,47989,47990],{"class":198},"    # 定义归一化方法\n",[129,47992,47993],{"class":131,"line":1712},[129,47994,47995],{"class":198},"    # 这里需要先计算一下数据集的均值和方差\n",[129,47997,47998],{"class":131,"line":1741},[129,47999,48000],{"class":198},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[129,48002,48003],{"class":131,"line":1746},[129,48004,48005],{"class":198},"    # 第一个参数是均值，第二个参数是方差\n",[129,48007,48008,48011,48013,48016,48019,48021,48024,48026,48029,48032,48035,48037,48040,48042,48045],{"class":131,"line":1763},[129,48009,48010],{"class":139},"    normalize",[129,48012,185],{"class":135},[129,48014,48015],{"class":139},"transforms.Normalize([",[129,48017,48018],{"class":188},"0.162",[129,48020,517],{"class":139},[129,48022,48023],{"class":188},"0.151",[129,48025,517],{"class":139},[129,48027,48028],{"class":188},"0.138",[129,48030,48031],{"class":139},"],[",[129,48033,48034],{"class":188},"0.058",[129,48036,517],{"class":139},[129,48038,48039],{"class":188},"0.052",[129,48041,517],{"class":139},[129,48043,48044],{"class":188},"0.048",[129,48046,4671],{"class":139},[129,48048,48049],{"class":131,"line":1768},[129,48050,48051],{"class":198},"    # 定义数据集处理方法变量\n",[129,48053,48054,48057,48059],{"class":131,"line":1773},[129,48055,48056],{"class":139},"    train_transform",[129,48058,185],{"class":135},[129,48060,48061],{"class":139},"transforms.Compose([\n",[129,48063,48064],{"class":131,"line":1778},[129,48065,48066],{"class":198},"        # 调整图像大小为224*224\n",[129,48068,48069,48072,48074,48076,48078],{"class":131,"line":1792},[129,48070,48071],{"class":139},"        transforms.Resize((",[129,48073,31502],{"class":188},[129,48075,517],{"class":139},[129,48077,31502],{"class":188},[129,48079,42623],{"class":139},[129,48081,48082],{"class":131,"line":1797},[129,48083,48084],{"class":198},"        # 将图像转换为张量\n",[129,48086,48087],{"class":131,"line":2591},[129,48088,48089],{"class":139},"        transforms.ToTensor(),\n",[129,48091,48092],{"class":131,"line":2605},[129,48093,48094],{"class":139},"        normalize])\n",[129,48096,48097],{"class":131,"line":2613},[129,48098,48099],{"class":198},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[129,48101,48102],{"class":131,"line":2618},[129,48103,48104],{"class":198},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[129,48106,48107],{"class":131,"line":2624},[129,48108,2414],{"emptyLinePlaceholder":56},[129,48110,48111],{"class":131,"line":2630},[129,48112,48113],{"class":198},"    # 加载数据集\n",[129,48115,48116],{"class":131,"line":2635},[129,48117,48118],{"class":198},"    # 传入数据集路径与处理方法\n",[129,48120,48121,48123,48125,48128,48131,48133,48136,48138],{"class":131,"line":7963},[129,48122,31959],{"class":139},[129,48124,185],{"class":135},[129,48126,48127],{"class":139},"ImageFolder(",[129,48129,48130],{"class":188},"ROOT_PATH",[129,48132,517],{"class":139},[129,48134,48135],{"class":5231},"transform",[129,48137,185],{"class":135},[129,48139,48140],{"class":139},"train_transform)\n",[129,48142,48143],{"class":131,"line":7987},[129,48144,2414],{"emptyLinePlaceholder":56},[129,48146,48147,48149,48151,48153,48155,48157,48159,48161,48163,48165,48167,48169,48171,48173,48175],{"class":131,"line":7992},[129,48148,32011],{"class":139},[129,48150,185],{"class":135},[129,48152,32016],{"class":139},[129,48154,32019],{"class":188},[129,48156,140],{"class":139},[129,48158,32024],{"class":188},[129,48160,594],{"class":135},[129,48162,7373],{"class":188},[129,48164,32031],{"class":139},[129,48166,32019],{"class":188},[129,48168,140],{"class":139},[129,48170,32038],{"class":188},[129,48172,594],{"class":135},[129,48174,7373],{"class":188},[129,48176,32045],{"class":139},[129,48178,48179,48181,48183,48185,48187,48189],{"class":131,"line":7998},[129,48180,32050],{"class":139},[129,48182,185],{"class":135},[129,48184,32055],{"class":139},[129,48186,31538],{"class":5231},[129,48188,185],{"class":135},[129,48190,31543],{"class":139},[129,48192,48193,48195,48197,48199],{"class":131,"line":8025},[129,48194,32066],{"class":5231},[129,48196,185],{"class":135},[129,48198,337],{"class":188},[129,48200,31467],{"class":139},[129,48202,48203,48205,48207,48209],{"class":131,"line":8030},[129,48204,32078],{"class":5231},[129,48206,185],{"class":135},[129,48208,31477],{"class":188},[129,48210,31467],{"class":139},[129,48212,48213],{"class":131,"line":8036},[129,48214,32089],{"class":198},[129,48216,48217,48219,48221,48223],{"class":131,"line":8048},[129,48218,32094],{"class":5231},[129,48220,185],{"class":135},[129,48222,534],{"class":188},[129,48224,146],{"class":139},[129,48226,48227,48229,48231,48233,48235,48237],{"class":131,"line":8060},[129,48228,32105],{"class":139},[129,48230,185],{"class":135},[129,48232,31535],{"class":139},[129,48234,31538],{"class":5231},[129,48236,185],{"class":135},[129,48238,32116],{"class":139},[129,48240,48241,48243,48245,48247],{"class":131,"line":8072},[129,48242,32121],{"class":5231},[129,48244,185],{"class":135},[129,48246,337],{"class":188},[129,48248,31467],{"class":139},[129,48250,48251,48253,48255,48257],{"class":131,"line":9731},[129,48252,32132],{"class":5231},[129,48254,185],{"class":135},[129,48256,31477],{"class":188},[129,48258,31467],{"class":139},[129,48260,48261,48263,48265,48267],{"class":131,"line":9756},[129,48262,32143],{"class":5231},[129,48264,185],{"class":135},[129,48266,534],{"class":188},[129,48268,146],{"class":139},[129,48270,48271,48273],{"class":131,"line":9779},[129,48272,4104],{"class":135},[129,48274,32156],{"class":139},[129,48276,48277],{"class":131,"line":9803},[129,48278,2414],{"emptyLinePlaceholder":56},[129,48280,48281],{"class":131,"line":9808},[129,48282,32165],{"class":198},[129,48284,48285],{"class":131,"line":9813},[129,48286,32170],{"class":198},[129,48288,48289],{"class":131,"line":9818},[129,48290,2414],{"emptyLinePlaceholder":56},[129,48292,48293],{"class":131,"line":9827},[129,48294,32179],{"class":198},[129,48296,48297,48299,48301],{"class":131,"line":9832},[129,48298,31948],{"class":135},[129,48300,32186],{"class":1977},[129,48302,32189],{"class":139},[129,48304,48305,48307,48309,48311,48313,48315,48317,48319,48321],{"class":131,"line":9838},[129,48306,31238],{"class":139},[129,48308,185],{"class":135},[129,48310,30452],{"class":139},[129,48312,31245],{"class":244},[129,48314,1718],{"class":135},[129,48316,31250],{"class":139},[129,48318,1715],{"class":135},[129,48320,32208],{"class":244},[129,48322,146],{"class":139},[129,48324,48325],{"class":131,"line":9859},[129,48326,2414],{"emptyLinePlaceholder":56},[129,48328,48329],{"class":131,"line":9865},[129,48330,32223],{"class":198},[129,48332,48333],{"class":131,"line":9879},[129,48334,32228],{"class":198},[129,48336,48337],{"class":131,"line":9885},[129,48338,32233],{"class":198},[129,48340,48341,48343,48345,48347,48349,48351,48353],{"class":131,"line":9912},[129,48342,32238],{"class":139},[129,48344,185],{"class":135},[129,48346,32243],{"class":139},[129,48348,32246],{"class":5231},[129,48350,185],{"class":135},[129,48352,32251],{"class":188},[129,48354,146],{"class":139},[129,48356,48357],{"class":131,"line":9921},[129,48358,2414],{"emptyLinePlaceholder":56},[129,48360,48361],{"class":131,"line":9927},[129,48362,32262],{"class":198},[129,48364,48365,48367,48369],{"class":131,"line":9935},[129,48366,32267],{"class":139},[129,48368,185],{"class":135},[129,48370,32272],{"class":139},[129,48372,48373],{"class":131,"line":9940},[129,48374,2414],{"emptyLinePlaceholder":56},[129,48376,48377],{"class":131,"line":16619},[129,48378,32281],{"class":198},[129,48380,48381,48383,48385],{"class":131,"line":16625},[129,48382,31290],{"class":139},[129,48384,185],{"class":135},[129,48386,32290],{"class":139},[129,48388,48389],{"class":131,"line":16648},[129,48390,32295],{"class":198},[129,48392,48393],{"class":131,"line":16654},[129,48394,32300],{"class":198},[129,48396,48397],{"class":131,"line":16677},[129,48398,32305],{"class":198},[129,48400,48401,48403,48405],{"class":131,"line":16691},[129,48402,32310],{"class":139},[129,48404,185],{"class":135},[129,48406,32315],{"class":139},[129,48408,48409],{"class":131,"line":16711},[129,48410,2414],{"emptyLinePlaceholder":56},[129,48412,48413],{"class":131,"line":16717},[129,48414,32328],{"class":198},[129,48416,48417],{"class":131,"line":16728},[129,48418,32333],{"class":198},[129,48420,48421,48423,48425],{"class":131,"line":16751},[129,48422,32338],{"class":139},[129,48424,185],{"class":135},[129,48426,32343],{"class":188},[129,48428,48429],{"class":131,"line":16773},[129,48430,32348],{"class":198},[129,48432,48433,48435,48437],{"class":131,"line":16778},[129,48434,32353],{"class":139},[129,48436,185],{"class":135},[129,48438,32358],{"class":139},[129,48440,48441],{"class":131,"line":16784},[129,48442,32363],{"class":198},[129,48444,48445,48447,48449],{"class":131,"line":16798},[129,48446,32368],{"class":139},[129,48448,185],{"class":135},[129,48450,32358],{"class":139},[129,48452,48453],{"class":131,"line":16811},[129,48454,32377],{"class":198},[129,48456,48457,48459,48461],{"class":131,"line":16816},[129,48458,32382],{"class":139},[129,48460,185],{"class":135},[129,48462,32358],{"class":139},[129,48464,48465],{"class":131,"line":16830},[129,48466,32391],{"class":198},[129,48468,48469,48471,48473],{"class":131,"line":16835},[129,48470,32396],{"class":139},[129,48472,185],{"class":135},[129,48474,32358],{"class":139},[129,48476,48477],{"class":131,"line":16841},[129,48478,2414],{"emptyLinePlaceholder":56},[129,48480,48481],{"class":131,"line":16846},[129,48482,32409],{"class":198},[129,48484,48485,48487,48489],{"class":131,"line":16860},[129,48486,32414],{"class":139},[129,48488,185],{"class":135},[129,48490,32419],{"class":139},[129,48492,48493],{"class":131,"line":16865},[129,48494,2414],{"emptyLinePlaceholder":56},[129,48496,48497],{"class":131,"line":16870},[129,48498,32432],{"class":198},[129,48500,48501,48503,48505,48507,48509],{"class":131,"line":16884},[129,48502,3215],{"class":135},[129,48504,32439],{"class":139},[129,48506,26044],{"class":135},[129,48508,32444],{"class":188},[129,48510,32447],{"class":139},[129,48512,48513,48515,48517,48519,48521,48523,48525,48527,48529,48531,48533],{"class":131,"line":16896},[129,48514,32452],{"class":188},[129,48516,140],{"class":139},[129,48518,32457],{"class":244},[129,48520,32460],{"class":188},[129,48522,723],{"class":244},[129,48524,32460],{"class":188},[129,48526,390],{"class":244},[129,48528,32469],{"class":139},[129,48530,671],{"class":135},[129,48532,357],{"class":188},[129,48534,30498],{"class":139},[129,48536,48537,48539,48541,48543,48545,48547],{"class":131,"line":16901},[129,48538,32452],{"class":188},[129,48540,140],{"class":139},[129,48542,32484],{"class":244},[129,48544,594],{"class":135},[129,48546,585],{"class":188},[129,48548,146],{"class":139},[129,48550,48551],{"class":131,"line":16914},[129,48552,2414],{"emptyLinePlaceholder":56},[129,48554,48555],{"class":131,"line":16919},[129,48556,32499],{"class":198},[129,48558,48559],{"class":131,"line":16924},[129,48560,32504],{"class":198},[129,48562,48563,48565,48567],{"class":131,"line":16929},[129,48564,32509],{"class":139},[129,48566,185],{"class":135},[129,48568,32343],{"class":188},[129,48570,48571],{"class":131,"line":16942},[129,48572,32518],{"class":198},[129,48574,48575,48577,48579],{"class":131,"line":16947},[129,48576,32523],{"class":139},[129,48578,185],{"class":135},[129,48580,3099],{"class":188},[129,48582,48583],{"class":131,"line":32634},[129,48584,32532],{"class":198},[129,48586,48587,48589,48591],{"class":131,"line":32640},[129,48588,32537],{"class":139},[129,48590,185],{"class":135},[129,48592,32343],{"class":188},[129,48594,48595],{"class":131,"line":32646},[129,48596,32546],{"class":198},[129,48598,48599,48601,48603],{"class":131,"line":32652},[129,48600,32551],{"class":139},[129,48602,185],{"class":135},[129,48604,3099],{"class":188},[129,48606,48607],{"class":131,"line":32658},[129,48608,32560],{"class":198},[129,48610,48611,48613,48615],{"class":131,"line":32669},[129,48612,32565],{"class":139},[129,48614,185],{"class":135},[129,48616,3099],{"class":188},[129,48618,48619],{"class":131,"line":32675},[129,48620,32574],{"class":198},[129,48622,48623,48625,48627],{"class":131,"line":32695},[129,48624,32579],{"class":139},[129,48626,185],{"class":135},[129,48628,3099],{"class":188},[129,48630,48631],{"class":131,"line":32701},[129,48632,32588],{"class":198},[129,48634,48635,48637,48639,48641,48643],{"class":131,"line":32712},[129,48636,3417],{"class":135},[129,48638,31602],{"class":139},[129,48640,26044],{"class":135},[129,48642,31607],{"class":188},[129,48644,32601],{"class":139},[129,48646,48647],{"class":131,"line":32718},[129,48648,32606],{"class":198},[129,48650,48651,48653,48655],{"class":131,"line":32724},[129,48652,32611],{"class":139},[129,48654,185],{"class":135},[129,48656,32616],{"class":139},[129,48658,48659],{"class":131,"line":32730},[129,48660,32621],{"class":198},[129,48662,48663,48665,48667],{"class":131,"line":32736},[129,48664,32626],{"class":139},[129,48666,185],{"class":135},[129,48668,32631],{"class":139},[129,48670,48671],{"class":131,"line":32742},[129,48672,32637],{"class":198},[129,48674,48675],{"class":131,"line":32748},[129,48676,32643],{"class":139},[129,48678,48679],{"class":131,"line":32754},[129,48680,32649],{"class":198},[129,48682,48683],{"class":131,"line":32774},[129,48684,32655],{"class":198},[129,48686,48687,48689,48691],{"class":131,"line":32780},[129,48688,32661],{"class":139},[129,48690,185],{"class":135},[129,48692,32666],{"class":139},[129,48694,48695],{"class":131,"line":32796},[129,48696,32672],{"class":198},[129,48698,48699,48701,48703,48705,48707,48709,48711],{"class":131,"line":32802},[129,48700,32678],{"class":139},[129,48702,185],{"class":135},[129,48704,32683],{"class":139},[129,48706,32686],{"class":5231},[129,48708,185],{"class":135},[129,48710,357],{"class":188},[129,48712,146],{"class":139},[129,48714,48715],{"class":131,"line":32816},[129,48716,32698],{"class":198},[129,48718,48719,48721,48723],{"class":131,"line":32822},[129,48720,32704],{"class":139},[129,48722,185],{"class":135},[129,48724,32709],{"class":139},[129,48726,48727],{"class":131,"line":32837},[129,48728,32715],{"class":198},[129,48730,48731],{"class":131,"line":32843},[129,48732,32721],{"class":139},[129,48734,48735],{"class":131,"line":32852},[129,48736,32727],{"class":198},[129,48738,48739],{"class":131,"line":32858},[129,48740,32733],{"class":139},[129,48742,48743],{"class":131,"line":32867},[129,48744,32739],{"class":198},[129,48746,48747],{"class":131,"line":32873},[129,48748,32745],{"class":139},[129,48750,48751],{"class":131,"line":32879},[129,48752,32751],{"class":198},[129,48754,48755,48757,48759,48761,48763,48765,48767],{"class":131,"line":32888},[129,48756,32757],{"class":139},[129,48758,9492],{"class":135},[129,48760,32762],{"class":139},[129,48762,594],{"class":135},[129,48764,32767],{"class":139},[129,48766,331],{"class":188},[129,48768,146],{"class":139},[129,48770,48771],{"class":131,"line":32894},[129,48772,32777],{"class":198},[129,48774,48775,48777,48779,48781,48783],{"class":131,"line":32905},[129,48776,32783],{"class":139},[129,48778,9492],{"class":135},[129,48780,32788],{"class":139},[129,48782,2963],{"class":135},[129,48784,32793],{"class":139},[129,48786,48787],{"class":131,"line":32911},[129,48788,32799],{"class":198},[129,48790,48791,48793,48795,48797,48799],{"class":131,"line":32930},[129,48792,32805],{"class":139},[129,48794,9492],{"class":135},[129,48796,32767],{"class":139},[129,48798,331],{"class":188},[129,48800,146],{"class":139},[129,48802,48803],{"class":131,"line":32936},[129,48804,32819],{"class":198},[129,48806,48807,48809,48811,48813,48815],{"class":131,"line":32947},[129,48808,3417],{"class":135},[129,48810,32827],{"class":139},[129,48812,26044],{"class":135},[129,48814,31607],{"class":188},[129,48816,32834],{"class":139},[129,48818,48819],{"class":131,"line":32953},[129,48820,32840],{"class":198},[129,48822,48823,48825,48827],{"class":131,"line":32973},[129,48824,32611],{"class":139},[129,48826,185],{"class":135},[129,48828,32616],{"class":139},[129,48830,48831],{"class":131,"line":32989},[129,48832,32855],{"class":198},[129,48834,48835,48837,48839],{"class":131,"line":32995},[129,48836,32626],{"class":139},[129,48838,185],{"class":135},[129,48840,32631],{"class":139},[129,48842,48843],{"class":131,"line":33009},[129,48844,32870],{"class":198},[129,48846,48847],{"class":131,"line":33015},[129,48848,32876],{"class":139},[129,48850,48851],{"class":131,"line":33021},[129,48852,36357],{"class":198},[129,48854,48855,48857],{"class":131,"line":33032},[129,48856,32882],{"class":135},[129,48858,32885],{"class":139},[129,48860,48861],{"class":131,"line":33038},[129,48862,32891],{"class":198},[129,48864,48865,48867,48869],{"class":131,"line":33044},[129,48866,36372],{"class":139},[129,48868,185],{"class":135},[129,48870,32666],{"class":139},[129,48872,48873],{"class":131,"line":33054},[129,48874,32908],{"class":198},[129,48876,48877,48879,48881,48883,48885,48887,48889],{"class":131,"line":33060},[129,48878,36385],{"class":139},[129,48880,185],{"class":135},[129,48882,32683],{"class":139},[129,48884,32686],{"class":5231},[129,48886,185],{"class":135},[129,48888,357],{"class":188},[129,48890,146],{"class":139},[129,48892,48893],{"class":131,"line":33071},[129,48894,32933],{"class":198},[129,48896,48897,48899,48901],{"class":131,"line":33077},[129,48898,36406],{"class":139},[129,48900,185],{"class":135},[129,48902,32709],{"class":139},[129,48904,48905],{"class":131,"line":33087},[129,48906,32950],{"class":198},[129,48908,48909,48911,48913,48915,48917,48919,48921],{"class":131,"line":33092},[129,48910,36419],{"class":139},[129,48912,9492],{"class":135},[129,48914,36424],{"class":139},[129,48916,594],{"class":135},[129,48918,32767],{"class":139},[129,48920,331],{"class":188},[129,48922,146],{"class":139},[129,48924,48925,48927,48929,48931,48933],{"class":131,"line":33098},[129,48926,36437],{"class":139},[129,48928,9492],{"class":135},[129,48930,32788],{"class":139},[129,48932,2963],{"class":135},[129,48934,32793],{"class":139},[129,48936,48937],{"class":131,"line":33147},[129,48938,36450],{"class":198},[129,48940,48941,48943,48945,48947,48949],{"class":131,"line":33194},[129,48942,36455],{"class":139},[129,48944,9492],{"class":135},[129,48946,32767],{"class":139},[129,48948,331],{"class":188},[129,48950,146],{"class":139},[129,48952,48953],{"class":131,"line":33199},[129,48954,33012],{"class":198},[129,48956,48957],{"class":131,"line":33205},[129,48958,33018],{"class":198},[129,48960,48961,48963,48965],{"class":131,"line":33224},[129,48962,33024],{"class":139},[129,48964,723],{"class":135},[129,48966,33029],{"class":139},[129,48968,48969],{"class":131,"line":33230},[129,48970,33035],{"class":198},[129,48972,48973],{"class":131,"line":33250},[129,48974,33041],{"class":198},[129,48976,48977,48979,48981],{"class":131,"line":33256},[129,48978,33047],{"class":139},[129,48980,723],{"class":135},[129,48982,33029],{"class":139},[129,48984,48985],{"class":131,"line":33262},[129,48986,33057],{"class":198},[129,48988,48989,48991,48993],{"class":131,"line":33272},[129,48990,33063],{"class":139},[129,48992,723],{"class":135},[129,48994,33068],{"class":139},[129,48996,48997],{"class":131,"line":33277},[129,48998,33074],{"class":198},[129,49000,49001,49003,49005],{"class":131,"line":33283},[129,49002,33080],{"class":139},[129,49004,723],{"class":135},[129,49006,33068],{"class":139},[129,49008,49009],{"class":131,"line":33299},[129,49010,2414],{"emptyLinePlaceholder":56},[129,49012,49013],{"class":131,"line":33344},[129,49014,33095],{"class":198},[129,49016,49017,49019,49021,49023,49025,49027,49029,49031,49033,49035,49037,49039,49041,49043,49045,49047,49049,49051,49053,49055],{"class":131,"line":33350},[129,49018,32452],{"class":188},[129,49020,140],{"class":139},[129,49022,3606],{"class":244},[129,49024,32460],{"class":188},[129,49026,33109],{"class":244},[129,49028,1035],{"class":188},[129,49030,33114],{"class":135},[129,49032,1085],{"class":188},[129,49034,33119],{"class":244},[129,49036,1035],{"class":188},[129,49038,33114],{"class":135},[129,49040,1085],{"class":188},[129,49042,3606],{"class":244},[129,49044,33130],{"class":139},[129,49046,671],{"class":135},[129,49048,357],{"class":188},[129,49050,33137],{"class":139},[129,49052,671],{"class":135},[129,49054,357],{"class":188},[129,49056,33144],{"class":139},[129,49058,49059,49061,49063,49065,49067,49069,49071,49073,49075,49077,49079,49081,49083,49085,49087,49089,49091,49093,49095,49097],{"class":131,"line":33356},[129,49060,32452],{"class":188},[129,49062,140],{"class":139},[129,49064,3606],{"class":244},[129,49066,32460],{"class":188},[129,49068,33158],{"class":244},[129,49070,1035],{"class":188},[129,49072,33114],{"class":135},[129,49074,1085],{"class":188},[129,49076,33167],{"class":244},[129,49078,1035],{"class":188},[129,49080,33114],{"class":135},[129,49082,1085],{"class":188},[129,49084,3606],{"class":244},[129,49086,33178],{"class":139},[129,49088,671],{"class":135},[129,49090,357],{"class":188},[129,49092,33185],{"class":139},[129,49094,671],{"class":135},[129,49096,357],{"class":188},[129,49098,33144],{"class":139},[129,49100,49101],{"class":131,"line":33362},[129,49102,2414],{"emptyLinePlaceholder":56},[129,49104,49105],{"class":131,"line":33373},[129,49106,33202],{"class":198},[129,49108,49109,49111,49113,49115,49117,49119,49121],{"class":131,"line":33379},[129,49110,2511],{"class":135},[129,49112,33210],{"class":139},[129,49114,671],{"class":135},[129,49116,357],{"class":188},[129,49118,1079],{"class":139},[129,49120,1099],{"class":135},[129,49122,33221],{"class":139},[129,49124,49125],{"class":131,"line":33385},[129,49126,33227],{"class":198},[129,49128,49129,49131,49133,49135,49137,49139,49141],{"class":131,"line":33391},[129,49130,33233],{"class":139},[129,49132,179],{"class":188},[129,49134,185],{"class":135},[129,49136,33240],{"class":139},[129,49138,671],{"class":135},[129,49140,357],{"class":188},[129,49142,33247],{"class":139},[129,49144,49145],{"class":131,"line":33409},[129,49146,33253],{"class":198},[129,49148,49149],{"class":131,"line":33423},[129,49150,33259],{"class":198},[129,49152,49153,49155,49157],{"class":131,"line":33432},[129,49154,33265],{"class":139},[129,49156,185],{"class":135},[129,49158,32315],{"class":139},[129,49160,49161],{"class":131,"line":33441},[129,49162,2414],{"emptyLinePlaceholder":56},[129,49164,49165],{"class":131,"line":33450},[129,49166,33280],{"class":198},[129,49168,49169,49171,49173,49175,49177],{"class":131,"line":33459},[129,49170,33286],{"class":139},[129,49172,185],{"class":135},[129,49174,33291],{"class":139},[129,49176,671],{"class":135},[129,49178,33296],{"class":139},[129,49180,49181,49183,49185,49187,49189,49191,49193,49195,49197,49199,49201,49203,49205,49207,49209,49211,49213,49215],{"class":131,"line":33465},[129,49182,32452],{"class":188},[129,49184,140],{"class":139},[129,49186,33306],{"class":244},[129,49188,1035],{"class":188},[129,49190,33311],{"class":135},[129,49192,1085],{"class":188},[129,49194,683],{"class":244},[129,49196,1035],{"class":188},[129,49198,33311],{"class":135},[129,49200,1085],{"class":188},[129,49202,33324],{"class":244},[129,49204,33327],{"class":139},[129,49206,33330],{"class":135},[129,49208,1046],{"class":188},[129,49210,33335],{"class":139},[129,49212,467],{"class":135},[129,49214,1046],{"class":188},[129,49216,30498],{"class":139},[129,49218,49219],{"class":131,"line":33471},[129,49220,36734],{"class":198},[129,49222,49223],{"class":131,"line":33479},[129,49224,36739],{"class":198},[129,49226,49227,49229,49231],{"class":131,"line":33484},[129,49228,36744],{"class":139},[129,49230,33368],{"class":244},[129,49232,146],{"class":139},[129,49234,49235],{"class":131,"line":33490},[129,49236,33388],{"class":198},[129,49238,49239,49241,49243,49245,49247,49249],{"class":131,"line":33501},[129,49240,33394],{"class":139},[129,49242,185],{"class":135},[129,49244,33399],{"class":139},[129,49246,33402],{"class":5231},[129,49248,185],{"class":135},[129,49250,1560],{"class":139},[129,49252,49253,49255,49257,49259],{"class":131,"line":33507},[129,49254,33412],{"class":244},[129,49256,998],{"class":139},[129,49258,33417],{"class":188},[129,49260,33420],{"class":139},[129,49262,49263,49265],{"class":131,"line":33527},[129,49264,33426],{"class":244},[129,49266,33429],{"class":139},[129,49268,49269,49271],{"class":131,"line":33533},[129,49270,33435],{"class":244},[129,49272,33438],{"class":139},[129,49274,49275,49277],{"class":131,"line":33539},[129,49276,33444],{"class":244},[129,49278,33447],{"class":139},[129,49280,49281,49283],{"class":131,"line":33545},[129,49282,33453],{"class":244},[129,49284,33456],{"class":139},[129,49286,49287],{"class":131,"line":33562},[129,49288,33462],{"class":139},[129,49290,49291],{"class":131,"line":33568},[129,49292,33468],{"class":198},[129,49294,49295,49297],{"class":131,"line":33574},[129,49296,4104],{"class":135},[129,49298,33476],{"class":139},[129,49300,49301],{"class":131,"line":33580},[129,49302,2414],{"emptyLinePlaceholder":56},[129,49304,49305],{"class":131,"line":33586},[129,49306,33487],{"class":198},[129,49308,49309,49311,49313],{"class":131,"line":33592},[129,49310,31948],{"class":135},[129,49312,33495],{"class":1977},[129,49314,33498],{"class":139},[129,49316,49317],{"class":131,"line":33619},[129,49318,33504],{"class":198},[129,49320,49321,49323,49325,49327,49329,49331,49333,49335],{"class":131,"line":33643},[129,49322,33510],{"class":139},[129,49324,31694],{"class":5231},[129,49326,185],{"class":135},[129,49328,140],{"class":139},[129,49330,637],{"class":188},[129,49332,517],{"class":139},[129,49334,432],{"class":188},[129,49336,30498],{"class":139},[129,49338,49339],{"class":131,"line":33649},[129,49340,33530],{"class":198},[129,49342,49343],{"class":131,"line":33655},[129,49344,33536],{"class":198},[129,49346,49347],{"class":131,"line":33661},[129,49348,33542],{"class":198},[129,49350,49351,49353,49355,49357,49359,49361,49363],{"class":131,"line":33672},[129,49352,31728],{"class":139},[129,49354,357],{"class":188},[129,49356,517],{"class":139},[129,49358,217],{"class":188},[129,49360,517],{"class":139},[129,49362,357],{"class":188},[129,49364,146],{"class":139},[129,49366,49367],{"class":131,"line":33683},[129,49368,33565],{"class":198},[129,49370,49371],{"class":131,"line":33689},[129,49372,33571],{"class":198},[129,49374,49375],{"class":131,"line":33706},[129,49376,33577],{"class":198},[129,49378,49379],{"class":131,"line":33729},[129,49380,33583],{"class":198},[129,49382,49383],{"class":131,"line":33752},[129,49384,33589],{"class":198},[129,49386,49387,49389,49391,49393,49395,49397,49399,49401,49403],{"class":131,"line":33758},[129,49388,33595],{"class":139},[129,49390,33598],{"class":244},[129,49392,33601],{"class":139},[129,49394,33604],{"class":244},[129,49396,517],{"class":139},[129,49398,33609],{"class":5231},[129,49400,185],{"class":135},[129,49402,33614],{"class":244},[129,49404,146],{"class":139},[129,49406,49407,49409,49411,49413,49415,49417,49419,49421,49423],{"class":131,"line":33763},[129,49408,33595],{"class":139},[129,49410,33598],{"class":244},[129,49412,33626],{"class":139},[129,49414,33629],{"class":244},[129,49416,517],{"class":139},[129,49418,33609],{"class":5231},[129,49420,185],{"class":135},[129,49422,33638],{"class":244},[129,49424,146],{"class":139},[129,49426,49427],{"class":131,"line":33772},[129,49428,33646],{"class":198},[129,49430,49431],{"class":131,"line":33782},[129,49432,33652],{"class":139},[129,49434,49435],{"class":131,"line":33788},[129,49436,33658],{"class":198},[129,49438,49439,49441,49443],{"class":131,"line":33793},[129,49440,33664],{"class":139},[129,49442,33667],{"class":244},[129,49444,146],{"class":139},[129,49446,49447,49449,49451],{"class":131,"line":33799},[129,49448,33675],{"class":139},[129,49450,33678],{"class":244},[129,49452,146],{"class":139},[129,49454,49455],{"class":131,"line":33812},[129,49456,33686],{"class":198},[129,49458,49459,49461,49463,49465,49467,49469,49471],{"class":131,"line":33818},[129,49460,31728],{"class":139},[129,49462,357],{"class":188},[129,49464,517],{"class":139},[129,49466,217],{"class":188},[129,49468,517],{"class":139},[129,49470,217],{"class":188},[129,49472,146],{"class":139},[129,49474,49475,49477,49479,49481,49483,49485,49487,49489,49491],{"class":131,"line":33829},[129,49476,33595],{"class":139},[129,49478,33598],{"class":244},[129,49480,33713],{"class":139},[129,49482,33604],{"class":244},[129,49484,517],{"class":139},[129,49486,33609],{"class":5231},[129,49488,185],{"class":135},[129,49490,33724],{"class":244},[129,49492,146],{"class":139},[129,49494,49495,49497,49499,49501,49503,49505,49507,49509,49511],{"class":131,"line":33840},[129,49496,33595],{"class":139},[129,49498,33598],{"class":244},[129,49500,33736],{"class":139},[129,49502,33629],{"class":244},[129,49504,517],{"class":139},[129,49506,33609],{"class":5231},[129,49508,185],{"class":135},[129,49510,33747],{"class":244},[129,49512,146],{"class":139},[129,49514,49515],{"class":131,"line":33859},[129,49516,33755],{"class":198},[129,49518,49520],{"class":131,"line":49519},219,[129,49521,33652],{"class":139},[129,49523,49525,49527,49529],{"class":131,"line":49524},220,[129,49526,33664],{"class":139},[129,49528,33598],{"class":244},[129,49530,146],{"class":139},[129,49532,49534,49536,49538],{"class":131,"line":49533},221,[129,49535,33675],{"class":139},[129,49537,33777],{"class":244},[129,49539,146],{"class":139},[129,49541,49543],{"class":131,"line":49542},222,[129,49544,33785],{"class":139},[129,49546,49548],{"class":131,"line":49547},223,[129,49549,2414],{"emptyLinePlaceholder":56},[129,49551,49553],{"class":131,"line":49552},224,[129,49554,33796],{"class":198},[129,49556,49558,49560,49562,49564,49566],{"class":131,"line":49557},225,[129,49559,1545],{"class":135},[129,49561,31221],{"class":188},[129,49563,2963],{"class":135},[129,49565,31226],{"class":244},[129,49567,3753],{"class":139},[129,49569,49571],{"class":131,"line":49570},226,[129,49572,33815],{"class":198},[129,49574,49576,49578,49580],{"class":131,"line":49575},227,[129,49577,44547],{"class":139},[129,49579,185],{"class":135},[129,49581,44552],{"class":139},[129,49583,49585,49587,49589],{"class":131,"line":49584},228,[129,49586,33832],{"class":139},[129,49588,185],{"class":135},[129,49590,33837],{"class":139},[129,49592,49594,49596,49598,49600,49602,49604,49606],{"class":131,"line":49593},229,[129,49595,33394],{"class":139},[129,49597,185],{"class":135},[129,49599,44569],{"class":139},[129,49601,33850],{"class":5231},[129,49603,185],{"class":135},[129,49605,1046],{"class":188},[129,49607,146],{"class":139},[129,49609,49611],{"class":131,"line":49610},230,[129,49612,33862],{"class":139},[22013,49614,49616],{"id":49615},"_242测试代码","2.4.2.测试代码",[14,49618,49619],{},"使用测试集进行测试与推理",[120,49621,49623],{"className":30379,"code":49622,"language":30381,"meta":42,"style":42},"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",[126,49624,49625,49631,49641,49651,49662,49672,49676,49680,49688,49693,49697,49714,49718,49722,49726,49730,49734,49766,49770,49778,49782,49794,49798,49802,49806,49810,49814,49818,49822,49826,49844,49858,49862,49872,49882,49892,49898,49902,49906,49914,49918,49934,49942,49946,49950,49958,49966,49970,49974,49978,49982,49988,49992,50002,50010,50018,50022,50026,50030,50038,50042,50058,50062,50066,50070,50082,50086,50098,50102,50106,50118,50122,50132,50136,50140,50152,50156,50164,50168,50172,50180,50184,50192,50196,50200,50204,50208,50212,50228,50236,50240,50244,50262,50268,50272,50282,50290,50298,50302,50306,50310,50314,50322,50326,50342,50346,50354,50362],{"__ignoreMap":42},[129,49626,49627,49629],{"class":131,"line":132},[129,49628,30393],{"class":135},[129,49630,30396],{"class":139},[129,49632,49633,49635,49637,49639],{"class":131,"line":51},[129,49634,30393],{"class":135},[129,49636,31416],{"class":139},[129,49638,31384],{"class":135},[129,49640,31421],{"class":139},[129,49642,49643,49645,49647,49649],{"class":131,"line":1194},[129,49644,30738],{"class":135},[129,49646,31399],{"class":139},[129,49648,30393],{"class":135},[129,49650,31404],{"class":139},[129,49652,49653,49655,49657,49659],{"class":131,"line":1209},[129,49654,30738],{"class":135},[129,49656,31369],{"class":139},[129,49658,30393],{"class":135},[129,49660,49661],{"class":139}," ImageFolder\n",[129,49663,49664,49666,49668,49670],{"class":131,"line":1215},[129,49665,30738],{"class":135},[129,49667,31915],{"class":139},[129,49669,30393],{"class":135},[129,49671,44641],{"class":139},[129,49673,49674],{"class":131,"line":1229},[129,49675,2414],{"emptyLinePlaceholder":56},[129,49677,49678],{"class":131,"line":1235},[129,49679,33952],{"class":198},[129,49681,49682,49684,49686],{"class":131,"line":1326},[129,49683,31948],{"class":135},[129,49685,33959],{"class":1977},[129,49687,31954],{"class":139},[129,49689,49690],{"class":131,"line":1332},[129,49691,49692],{"class":198},"   # 导入自己的数据集，并进行数据处理\n",[129,49694,49695],{"class":131,"line":1344},[129,49696,47962],{"class":198},[129,49698,49699,49701,49703,49705,49707,49709,49712],{"class":131,"line":1626},[129,49700,47967],{"class":188},[129,49702,185],{"class":135},[129,49704,809],{"class":135},[129,49706,390],{"class":244},[129,49708,697],{"class":188},[129,49710,49711],{"class":47978},"\u002Fdata\u002Ftest",[129,49713,25134],{"class":244},[129,49715,49716],{"class":131,"line":1631},[129,49717,2414],{"emptyLinePlaceholder":56},[129,49719,49720],{"class":131,"line":1637},[129,49721,47990],{"class":198},[129,49723,49724],{"class":131,"line":1642},[129,49725,47995],{"class":198},[129,49727,49728],{"class":131,"line":1656},[129,49729,48000],{"class":198},[129,49731,49732],{"class":131,"line":1661},[129,49733,48005],{"class":198},[129,49735,49736,49738,49740,49742,49744,49746,49748,49750,49752,49754,49756,49758,49760,49762,49764],{"class":131,"line":1667},[129,49737,48010],{"class":139},[129,49739,185],{"class":135},[129,49741,48015],{"class":139},[129,49743,48018],{"class":188},[129,49745,517],{"class":139},[129,49747,48023],{"class":188},[129,49749,517],{"class":139},[129,49751,48028],{"class":188},[129,49753,48031],{"class":139},[129,49755,48034],{"class":188},[129,49757,517],{"class":139},[129,49759,48039],{"class":188},[129,49761,517],{"class":139},[129,49763,48044],{"class":188},[129,49765,4671],{"class":139},[129,49767,49768],{"class":131,"line":1688},[129,49769,48051],{"class":198},[129,49771,49772,49774,49776],{"class":131,"line":1693},[129,49773,48056],{"class":139},[129,49775,185],{"class":135},[129,49777,48061],{"class":139},[129,49779,49780],{"class":131,"line":1707},[129,49781,48066],{"class":198},[129,49783,49784,49786,49788,49790,49792],{"class":131,"line":1712},[129,49785,48071],{"class":139},[129,49787,31502],{"class":188},[129,49789,517],{"class":139},[129,49791,31502],{"class":188},[129,49793,42623],{"class":139},[129,49795,49796],{"class":131,"line":1741},[129,49797,48084],{"class":198},[129,49799,49800],{"class":131,"line":1746},[129,49801,48089],{"class":139},[129,49803,49804],{"class":131,"line":1763},[129,49805,48094],{"class":139},[129,49807,49808],{"class":131,"line":1768},[129,49809,48099],{"class":198},[129,49811,49812],{"class":131,"line":1773},[129,49813,48104],{"class":198},[129,49815,49816],{"class":131,"line":1778},[129,49817,2414],{"emptyLinePlaceholder":56},[129,49819,49820],{"class":131,"line":1792},[129,49821,48113],{"class":198},[129,49823,49824],{"class":131,"line":1797},[129,49825,48118],{"class":198},[129,49827,49828,49830,49832,49834,49836,49838,49840,49842],{"class":131,"line":2591},[129,49829,33966],{"class":139},[129,49831,185],{"class":135},[129,49833,48127],{"class":139},[129,49835,48130],{"class":188},[129,49837,517],{"class":139},[129,49839,48135],{"class":5231},[129,49841,185],{"class":135},[129,49843,48140],{"class":139},[129,49845,49846,49848,49850,49852,49854,49856],{"class":131,"line":2605},[129,49847,34023],{"class":139},[129,49849,185],{"class":135},[129,49851,31535],{"class":139},[129,49853,31538],{"class":5231},[129,49855,185],{"class":135},[129,49857,34034],{"class":139},[129,49859,49860],{"class":131,"line":2613},[129,49861,34039],{"class":198},[129,49863,49864,49866,49868,49870],{"class":131,"line":2618},[129,49865,34044],{"class":5231},[129,49867,185],{"class":135},[129,49869,357],{"class":188},[129,49871,31467],{"class":139},[129,49873,49874,49876,49878,49880],{"class":131,"line":2624},[129,49875,34055],{"class":5231},[129,49877,185],{"class":135},[129,49879,31477],{"class":188},[129,49881,31467],{"class":139},[129,49883,49884,49886,49888,49890],{"class":131,"line":2630},[129,49885,34066],{"class":5231},[129,49887,185],{"class":135},[129,49889,331],{"class":188},[129,49891,146],{"class":139},[129,49893,49894,49896],{"class":131,"line":2635},[129,49895,4104],{"class":135},[129,49897,34079],{"class":139},[129,49899,49900],{"class":131,"line":7963},[129,49901,2414],{"emptyLinePlaceholder":56},[129,49903,49904],{"class":131,"line":7987},[129,49905,34088],{"class":198},[129,49907,49908,49910,49912],{"class":131,"line":7992},[129,49909,31948],{"class":135},[129,49911,34095],{"class":1977},[129,49913,34098],{"class":139},[129,49915,49916],{"class":131,"line":7998},[129,49917,34103],{"class":198},[129,49919,49920,49922,49924,49926,49928,49930,49932],{"class":131,"line":8025},[129,49921,31238],{"class":139},[129,49923,185],{"class":135},[129,49925,31245],{"class":244},[129,49927,1718],{"class":135},[129,49929,31250],{"class":139},[129,49931,1715],{"class":135},[129,49933,34120],{"class":244},[129,49935,49936,49938,49940],{"class":131,"line":8030},[129,49937,31290],{"class":139},[129,49939,185],{"class":135},[129,49941,32290],{"class":139},[129,49943,49944],{"class":131,"line":8036},[129,49945,2414],{"emptyLinePlaceholder":56},[129,49947,49948],{"class":131,"line":8048},[129,49949,34137],{"class":198},[129,49951,49952,49954,49956],{"class":131,"line":8060},[129,49953,34142],{"class":139},[129,49955,185],{"class":135},[129,49957,32343],{"class":188},[129,49959,49960,49962,49964],{"class":131,"line":8072},[129,49961,34151],{"class":139},[129,49963,185],{"class":135},[129,49965,3099],{"class":188},[129,49967,49968],{"class":131,"line":9731},[129,49969,2414],{"emptyLinePlaceholder":56},[129,49971,49972],{"class":131,"line":9756},[129,49973,34164],{"class":198},[129,49975,49976],{"class":131,"line":9779},[129,49977,34169],{"class":198},[129,49979,49980],{"class":131,"line":9803},[129,49981,34174],{"class":198},[129,49983,49984,49986],{"class":131,"line":9808},[129,49985,34179],{"class":135},[129,49987,32885],{"class":139},[129,49989,49990],{"class":131,"line":9813},[129,49991,34186],{"class":198},[129,49993,49994,49996,49998,50000],{"class":131,"line":9818},[129,49995,3417],{"class":135},[129,49997,34193],{"class":139},[129,49999,26044],{"class":135},[129,50001,34198],{"class":139},[129,50003,50004,50006,50008],{"class":131,"line":9827},[129,50005,34203],{"class":139},[129,50007,185],{"class":135},[129,50009,34208],{"class":139},[129,50011,50012,50014,50016],{"class":131,"line":9832},[129,50013,34213],{"class":139},[129,50015,185],{"class":135},[129,50017,34218],{"class":139},[129,50019,50020],{"class":131,"line":9838},[129,50021,34223],{"class":198},[129,50023,50024],{"class":131,"line":9859},[129,50025,32876],{"class":139},[129,50027,50028],{"class":131,"line":9865},[129,50029,34232],{"class":198},[129,50031,50032,50034,50036],{"class":131,"line":9879},[129,50033,32661],{"class":139},[129,50035,185],{"class":135},[129,50037,34241],{"class":139},[129,50039,50040],{"class":131,"line":9885},[129,50041,34246],{"class":198},[129,50043,50044,50046,50048,50050,50052,50054,50056],{"class":131,"line":9912},[129,50045,32678],{"class":139},[129,50047,185],{"class":135},[129,50049,32683],{"class":139},[129,50051,32686],{"class":5231},[129,50053,185],{"class":135},[129,50055,357],{"class":188},[129,50057,146],{"class":139},[129,50059,50060],{"class":131,"line":9921},[129,50061,34267],{"class":198},[129,50063,50064],{"class":131,"line":9927},[129,50065,34272],{"class":198},[129,50067,50068],{"class":131,"line":9935},[129,50069,34277],{"class":198},[129,50071,50072,50074,50076,50078,50080],{"class":131,"line":9940},[129,50073,34282],{"class":139},[129,50075,9492],{"class":135},[129,50077,32788],{"class":139},[129,50079,2963],{"class":135},[129,50081,34291],{"class":139},[129,50083,50084],{"class":131,"line":16619},[129,50085,34296],{"class":198},[129,50087,50088,50090,50092,50094,50096],{"class":131,"line":16625},[129,50089,34301],{"class":139},[129,50091,9492],{"class":135},[129,50093,34306],{"class":139},[129,50095,331],{"class":188},[129,50097,146],{"class":139},[129,50099,50100],{"class":131,"line":16648},[129,50101,2414],{"emptyLinePlaceholder":56},[129,50103,50104],{"class":131,"line":16654},[129,50105,34319],{"class":198},[129,50107,50108,50110,50112,50114,50116],{"class":131,"line":16677},[129,50109,34324],{"class":139},[129,50111,185],{"class":135},[129,50113,34329],{"class":139},[129,50115,723],{"class":135},[129,50117,34334],{"class":139},[129,50119,50120],{"class":131,"line":16691},[129,50121,34339],{"class":198},[129,50123,50124,50126,50128,50130],{"class":131,"line":16711},[129,50125,32452],{"class":188},[129,50127,140],{"class":139},[129,50129,34348],{"class":244},[129,50131,34351],{"class":139},[129,50133,50134],{"class":131,"line":16717},[129,50135,2414],{"emptyLinePlaceholder":56},[129,50137,50138],{"class":131,"line":16728},[129,50139,34360],{"class":198},[129,50141,50142,50144,50146,50148,50150],{"class":131,"line":16751},[129,50143,1545],{"class":135},[129,50145,31221],{"class":188},[129,50147,2963],{"class":135},[129,50149,31226],{"class":244},[129,50151,3753],{"class":139},[129,50153,50154],{"class":131,"line":16773},[129,50155,34377],{"class":198},[129,50157,50158,50160,50162],{"class":131,"line":16778},[129,50159,31290],{"class":139},[129,50161,185],{"class":135},[129,50163,44552],{"class":139},[129,50165,50166],{"class":131,"line":16784},[129,50167,34390],{"class":198},[129,50169,50170],{"class":131,"line":16798},[129,50171,34395],{"class":198},[129,50173,50174,50176,50178],{"class":131,"line":16811},[129,50175,34400],{"class":139},[129,50177,34403],{"class":244},[129,50179,30498],{"class":139},[129,50181,50182],{"class":131,"line":16816},[129,50183,34410],{"class":198},[129,50185,50186,50188,50190],{"class":131,"line":16830},[129,50187,34023],{"class":139},[129,50189,185],{"class":135},[129,50191,34419],{"class":139},[129,50193,50194],{"class":131,"line":16835},[129,50195,34424],{"class":198},[129,50197,50198],{"class":131,"line":16841},[129,50199,34429],{"class":139},[129,50201,50202],{"class":131,"line":16846},[129,50203,2414],{"emptyLinePlaceholder":56},[129,50205,50206],{"class":131,"line":16860},[129,50207,34438],{"class":198},[129,50209,50210],{"class":131,"line":16865},[129,50211,34443],{"class":198},[129,50213,50214,50216,50218,50220,50222,50224,50226],{"class":131,"line":16870},[129,50215,31238],{"class":139},[129,50217,185],{"class":135},[129,50219,31245],{"class":244},[129,50221,1718],{"class":135},[129,50223,31250],{"class":139},[129,50225,1715],{"class":135},[129,50227,34120],{"class":244},[129,50229,50230,50232,50234],{"class":131,"line":16884},[129,50231,31290],{"class":139},[129,50233,185],{"class":135},[129,50235,32290],{"class":139},[129,50237,50238],{"class":131,"line":16896},[129,50239,34472],{"class":198},[129,50241,50242],{"class":131,"line":16901},[129,50243,34477],{"class":198},[129,50245,50246,50248,50250,50252,50255,50257,50260],{"class":131,"line":16914},[129,50247,34482],{"class":139},[129,50249,185],{"class":135},[129,50251,1029],{"class":139},[129,50253,50254],{"class":244},"'猫'",[129,50256,517],{"class":139},[129,50258,50259],{"class":244},"'狗'",[129,50261,33247],{"class":139},[129,50263,50264,50266],{"class":131,"line":16919},[129,50265,34179],{"class":135},[129,50267,32885],{"class":139},[129,50269,50270],{"class":131,"line":16924},[129,50271,34547],{"class":198},[129,50273,50274,50276,50278,50280],{"class":131,"line":16929},[129,50275,3417],{"class":135},[129,50277,34554],{"class":139},[129,50279,26044],{"class":135},[129,50281,34198],{"class":139},[129,50283,50284,50286,50288],{"class":131,"line":16942},[129,50285,32611],{"class":139},[129,50287,185],{"class":135},[129,50289,32616],{"class":139},[129,50291,50292,50294,50296],{"class":131,"line":16947},[129,50293,32626],{"class":139},[129,50295,185],{"class":135},[129,50297,32631],{"class":139},[129,50299,50300],{"class":131,"line":32634},[129,50301,2414],{"emptyLinePlaceholder":56},[129,50303,50304],{"class":131,"line":32640},[129,50305,34583],{"class":198},[129,50307,50308],{"class":131,"line":32646},[129,50309,32876],{"class":139},[129,50311,50312],{"class":131,"line":32652},[129,50313,34592],{"class":198},[129,50315,50316,50318,50320],{"class":131,"line":32658},[129,50317,32661],{"class":139},[129,50319,185],{"class":135},[129,50321,32666],{"class":139},[129,50323,50324],{"class":131,"line":32669},[129,50325,34605],{"class":198},[129,50327,50328,50330,50332,50334,50336,50338,50340],{"class":131,"line":32675},[129,50329,32678],{"class":139},[129,50331,185],{"class":135},[129,50333,32683],{"class":139},[129,50335,32686],{"class":5231},[129,50337,185],{"class":135},[129,50339,357],{"class":188},[129,50341,146],{"class":139},[129,50343,50344],{"class":131,"line":32695},[129,50345,34626],{"class":198},[129,50347,50348,50350,50352],{"class":131,"line":32701},[129,50349,34631],{"class":139},[129,50351,185],{"class":135},[129,50353,34636],{"class":139},[129,50355,50356,50358,50360],{"class":131,"line":32712},[129,50357,34641],{"class":139},[129,50359,185],{"class":135},[129,50361,34646],{"class":139},[129,50363,50364,50366,50368,50370,50372,50374,50376,50378],{"class":131,"line":32718},[129,50365,34651],{"class":188},[129,50367,140],{"class":139},[129,50369,34656],{"class":244},[129,50371,34659],{"class":139},[129,50373,34662],{"class":244},[129,50375,517],{"class":139},[129,50377,34667],{"class":244},[129,50379,34670],{"class":139},[5141,50381,50382],{},"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":42,"searchDepth":51,"depth":51,"links":50384},[50385,50386,50387,50388],{"id":30592,"depth":1194,"text":30593},{"id":37840,"depth":1194,"text":37841},{"id":41273,"depth":1194,"text":41274},{"id":45282,"depth":1194,"text":45283},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30584,"description":53},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50395,"title":50396,"body":50397,"description":53,"extension":54,"meta":50404,"navigation":56,"path":50405,"seo":50406,"stem":50407,"__hash__":50408},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50398,"toc":50402},[50399],[10,50400,50396],{"id":50401},"_3yolo模型学习",{"title":42,"searchDepth":51,"depth":51,"links":50403},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50396,"description":53},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50410,"title":50411,"body":50412,"description":50419,"extension":54,"meta":50420,"navigation":56,"path":50422,"seo":50423,"stem":50424,"__hash__":50425},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50413,"toc":50417},[50414],[14,50415,50416],{},"yolo模型还未补充",{"title":42,"searchDepth":51,"depth":51,"links":50418},[],"深度学习学习",{"category":50421},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50411,"description":50419},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50427,"title":50428,"body":50429,"description":53,"extension":54,"meta":50454,"navigation":56,"path":50455,"seo":50456,"stem":50457,"__hash__":50458},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50430,"toc":50452},[50431,50434,50437,50442,50449],[10,50432,50428],{"id":50433},"_1工具",[14,50435,50436],{},"提示错误插件：有问题会提前报错",[14,50438,50439],{},[40,50440],{"alt":42,"src":50441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50443,50444],{},[20,50445,50448],{"href":50446,"rel":50447},"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",[24],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50450,50451],{},"alt键加上下箭头可以实现语句的移动",{"title":42,"searchDepth":51,"depth":51,"links":50453},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50428,"description":53},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50460,"title":50461,"body":50462,"description":53,"extension":54,"meta":53326,"navigation":56,"path":53327,"seo":53328,"stem":53329,"__hash__":53330},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50463,"toc":53277},[50464,50467,50471,50475,50480,50483,50488,50492,50499,50504,50511,50516,50523,50528,50532,50537,50540,50544,50549,50553,50558,50561,50564,50567,50570,50573,50576,50579,50582,50587,50592,50597,50601,50604,50607,50611,50616,50619,50627,50632,50649,50657,50662,50667,50672,50677,50682,50685,50690,50695,50699,50708,50713,50718,50722,50727,50730,50734,50739,50747,50752,50757,50760,50765,50770,50775,50778,50781,50784,50789,50794,50797,50802,50805,50810,50813,50816,50819,50824,50827,50830,50845,50850,50855,50860,50863,50866,50869,50883,50886,50891,50896,50899,50902,50905,50908,50911,50914,50917,50921,50925,50930,50934,50937,50942,50947,50950,50955,50958,50962,50967,50970,50973,50976,50979,50982,50985,50988,50991,50994,50998,51003,51008,51013,51016,51019,51023,51028,51031,51035,51038,51041,51046,51049,51052,51056,51060,51063,51068,51073,51076,51105,51110,51115,51120,51125,51129,51134,51138,51143,51146,51150,51154,51159,51163,51168,51173,51177,51182,51185,51187,51190,51195,51199,51204,51208,51212,51217,51222,51227,51232,51236,51241,51246,51251,51254,51257,51262,51265,51270,51275,51280,51285,51289,52096,52100,52443,52448,52451,52454,52457,52460,52463,52466,52469,52472,52474,52477,52479,52482,52486,52491,52494,52497,52500,52504,52509,52514,52534,52537,52541,52546,52551,52568,52572,52601,52605,52627,52629,52668,52676,52682,52686,52689,52692,52697,52702,52705,52708,52711,52716,52721,52724,52727,52730,52733,52736,52739,52742,52745,52748,52751,52754,52756,52759,52762,52765,52768,52771,52774,52777,52780,52784,52789,52792,52797,52800,52803,52806,52809,52812,52815,52818,52820,52823,52826,52829,52832,52835,52838,52842,52845,52854,52857,52862,52865,52870,52873,52876,52879,52882,52885,52888,52891,52895,52899,52902,52905,52910,52915,52920,52924,52929,52934,52937,52940,52943,52946,52949,52954,52957,52962,52964,52969,52972,52976,52981,52984,52987,52992,52996,52999,53004,53007,53010,53039,53044,53047,53050,53053,53056,53059,53063,53066,53152,53156,53159,53164,53169,53176,53179,53182,53185,53188,53191,53196,53201,53204,53207,53210,53213,53216,53219,53222,53225,53228,53230,53233,53237,53242,53247,53252,53255,53260,53265,53268,53271,53274],[10,50465,50461],{"id":50466},"_2基础语法",[71,50468,50470],{"id":50469},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[100,50472,50474],{"id":50473},"_211-js组成","2.1.1 js组成",[83,50476,50477],{},[86,50478,50479],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50481,50482],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[83,50484,50485],{"start":51},[86,50486,50487],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[100,50489,50491],{"id":50490},"_212-js书写位置","2.1.2 js书写位置",[83,50493,50494],{},[86,50495,50496],{},[289,50497,50498],{},"内部 JavaScript",[14,50500,50501],{},[40,50502],{"alt":42,"src":50503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[83,50505,50506],{"start":51},[86,50507,50508],{},[289,50509,50510],{},"外部 JavaScript",[14,50512,50513],{},[40,50514],{"alt":42,"src":50515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[83,50517,50518],{"start":1194},[86,50519,50520],{},[289,50521,50522],{},"内联 JavaScript",[14,50524,50525],{},[40,50526],{"alt":42,"src":50527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[100,50529,50531],{"id":50530},"_213-javascript注释","2.1.3 JavaScript注释",[14,50533,50534],{},[40,50535],{"alt":42,"src":50536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50538,50539],{},"alt+shift+a一定要记住！",[100,50541,50543],{"id":50542},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50545,50546],{},[40,50547],{"alt":42,"src":50548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[100,50550,50552],{"id":50551},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[83,50554,50555],{},[86,50556,50557],{},"输出语法：",[14,50559,50560],{},"①document.write('要出的内容')",[14,50562,50563],{},"向body内输出内容；",[14,50565,50566],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50568,50569],{},"②alert('要出的内容')",[14,50571,50572],{},"页面弹出警告对话框",[14,50574,50575],{},"③console.log('控制台打印')",[14,50577,50578],{},"控制台输出语法，程序员调试使用",[14,50580,50581],{},"输入log就行，自动生成：",[14,50583,50584],{},[40,50585],{"alt":42,"src":50586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[83,50588,50589],{"start":51},[86,50590,50591],{},"输入语法：",[14,50593,50594],{},[40,50595],{"alt":42,"src":50596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[100,50598,50600],{"id":50599},"_2116-字面量","21.1.6 字面量",[14,50602,50603],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50605,50606],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[71,50608,50610],{"id":50609},"_22-变量","2.2 变量",[83,50612,50613],{},[86,50614,50615],{},"变量声明",[14,50617,50618],{},"let 变量名",[1146,50620,50621,50624],{},[86,50622,50623],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[86,50625,50626],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[83,50628,50629],{"start":51},[86,50630,50631],{},"变量赋值",[120,50633,50637],{"className":50634,"code":50635,"language":50636,"meta":42,"style":42},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[126,50638,50639,50644],{"__ignoreMap":42},[129,50640,50641],{"class":131,"line":132},[129,50642,50643],{"class":139},"let age\n",[129,50645,50646],{"class":131,"line":51},[129,50647,50648],{"class":139},"age=18\n",[83,50650,50651,50654],{"start":1194},[86,50652,50653],{},"连这些（变量的初始化）：let age=18",[86,50655,50656],{},"更新变量",[14,50658,50659],{},[40,50660],{"alt":42,"src":50661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[83,50663,50664],{"start":1215},[86,50665,50666],{},"声明多个变量",[14,50668,50669],{},[40,50670],{"alt":42,"src":50671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[83,50673,50674],{"start":1229},[86,50675,50676],{},"变量命名规则与规范",[14,50678,50679],{},[40,50680],{"alt":42,"src":50681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50683,50684],{},"遵守小驼峰！",[83,50686,50687],{"start":1235},[86,50688,50689],{},"变量拓展-let和var的区别",[14,50691,50692],{},[40,50693],{"alt":42,"src":50694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[71,50696,50698],{"id":50697},"_23-数组","2.3 数组",[120,50700,50702],{"className":50634,"code":50701,"language":50636,"meta":42,"style":42},"let arr = []\n",[126,50703,50704],{"__ignoreMap":42},[129,50705,50706],{"class":131,"line":132},[129,50707,50701],{"class":139},[14,50709,50710],{},[40,50711],{"alt":42,"src":50712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50714,50715],{},[40,50716],{"alt":42,"src":50717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[71,50719,50721],{"id":50720},"_24-常量","2.4 常量",[14,50723,50724],{},[40,50725],{"alt":42,"src":50726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50728,50729],{},"const — 类似于 let ，但是变量的值无法被修改",[71,50731,50733],{"id":50732},"_25-数据类型","2.5 数据类型",[14,50735,50736],{},[40,50737],{"alt":42,"src":50738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[83,50740,50741,50744],{},[86,50742,50743],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[86,50745,50746],{},"算数运算符：",[14,50748,50749],{},[40,50750],{"alt":42,"src":50751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[83,50753,50754],{"start":1194},[86,50755,50756],{},"数字类型（Number）",[14,50758,50759],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50761,50762],{},[40,50763],{"alt":42,"src":50764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[83,50766,50767],{"start":1209},[86,50768,50769],{},"字符串类型（string）",[14,50771,50772],{},[40,50773],{"alt":42,"src":50774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50776,50777],{},"反引号也是可以使用的",[14,50779,50780],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50782,50783],{},"例如：document.write(\"我今年\"+age+\"岁\")",[83,50785,50786],{"start":1215},[86,50787,50788],{},"模板字符串",[14,50790,50791],{},[40,50792],{"alt":42,"src":50793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50795,50796],{},"类似于python的字符串格式化",[83,50798,50799],{"start":1229},[86,50800,50801],{},"布尔类型",[14,50803,50804],{},"true 和 false",[83,50806,50807],{"start":1235},[86,50808,50809],{},"未定义类型（underfined）",[14,50811,50812],{},"表示没有赋值",[14,50814,50815],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50817,50818],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[83,50820,50821],{"start":1326},[86,50822,50823],{},"null（空类型）",[14,50825,50826],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50828,50829],{},"赋值了，但是内容为空",[120,50831,50833],{"className":50634,"code":50832,"language":50636,"meta":42,"style":42},"typeof null\n输出的是'object'，是一个对象数据类型\n",[126,50834,50835,50840],{"__ignoreMap":42},[129,50836,50837],{"class":131,"line":132},[129,50838,50839],{"class":139},"typeof null\n",[129,50841,50842],{"class":131,"line":51},[129,50843,50844],{"class":139},"输出的是'object'，是一个对象数据类型\n",[83,50846,50847],{"start":1332},[86,50848,50849],{},"控制台检测数据类型",[14,50851,50852],{},[40,50853],{"alt":42,"src":50854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[83,50856,50857],{"start":1344},[86,50858,50859],{},"类型转换",[14,50861,50862],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50864,50865],{},"转换方式：隐式转换和显示转换",[14,50867,50868],{},"①隐式转换",[1146,50870,50871,50874,50877,50880],{},[86,50872,50873],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[86,50875,50876],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[86,50878,50879],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[86,50881,50882],{},"任何数据和字符串相加结果都是字符串",[14,50884,50885],{},"②显示转换",[14,50887,50888],{},[40,50889],{"alt":42,"src":50890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50892,50893],{},[40,50894],{"alt":42,"src":50895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50897,50898],{},"在输入的时候要用好隐式转换，简单写起来",[14,50900,50901],{},"let num = +prompt(’请输入数字：‘)",[14,50903,50904],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50906,50907],{},"console.log(parseInt('12.333px'))",[14,50909,50910],{},"输出为：12",[14,50912,50913],{},"console.log(parseInt('a'a'a12.333px'))",[14,50915,50916],{},"输出：NaN",[71,50918,50920],{"id":50919},"_26-运算符","2.6 运算符",[100,50922,50924],{"id":50923},"_261-赋值运算符","2.6.1 赋值运算符",[14,50926,50927],{},[40,50928],{"alt":42,"src":50929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[100,50931,50933],{"id":50932},"_262-一元运算符","2.6.2 一元运算符",[14,50935,50936],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,50938,50939],{},[40,50940],{"alt":42,"src":50941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,50943,50944],{},[40,50945],{"alt":42,"src":50946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,50948,50949],{},"两者的区别：",[14,50951,50952],{},[40,50953],{"alt":42,"src":50954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,50956,50957],{},"前置先自加；后置后加，代码执行完之后再加",[100,50959,50961],{"id":50960},"_263-比较运算符","2.6.3 比较运算符",[14,50963,50964],{},[40,50965],{"alt":42,"src":50966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,50968,50969],{},"比较运算符也有隐式转换",[14,50971,50972],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,50974,50975],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,50977,50978],{},"要使用三等，开发的时候",[14,50980,50981],{},"NaN不等于任何人，包括它自己",[14,50983,50984],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,50986,50987],{},"7\u002F10=0.7",[14,50989,50990],{},"最后：0.5+0.2=0.7",[14,50992,50993],{},"字符串比较，比较的是字符对应的ASCII码",[100,50995,50997],{"id":50996},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,50999,51000],{},[40,51001],{"alt":42,"src":51002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51004,51005],{},[40,51006],{"alt":42,"src":51007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51009,51010],{},[40,51011],{"alt":42,"src":51012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51014,51015],{},"上述题目选D",[14,51017,51018],{},"与真2假1；或真1假2",[100,51020,51022],{"id":51021},"_265-运算符优先级","2.6.5 运算符优先级",[14,51024,51025],{},[40,51026],{"alt":42,"src":51027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51029,51030],{},"先算逻辑与，后算逻辑或",[71,51032,51034],{"id":51033},"_27-语句","2.7 语句",[14,51036,51037],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51039,51040],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51042,51043],{},[40,51044],{"alt":42,"src":51045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51047,51048],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51050,51051],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[100,51053,51055],{"id":51054},"_271-分支语句","2.7.1 分支语句",[22013,51057,51059],{"id":51058},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51061,51062],{},"if语句单行简单的话，可以不写{}，写在一行就行",[83,51064,51065],{},[86,51066,51067],{},"单分支语句",[14,51069,51070],{},[40,51071],{"alt":42,"src":51072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51074,51075],{},"除了0，所有数字都为真",[120,51077,51079],{"className":50634,"code":51078,"language":50636,"meta":42,"style":42},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[126,51080,51081,51086,51091,51096,51100],{"__ignoreMap":42},[129,51082,51083],{"class":131,"line":132},[129,51084,51085],{"class":139},"if（0) {\n",[129,51087,51088],{"class":131,"line":51},[129,51089,51090],{"class":139},"    let a=1\n",[129,51092,51093],{"class":131,"line":1194},[129,51094,51095],{"class":139},"    alert(typeof a)\n",[129,51097,51098],{"class":131,"line":1209},[129,51099,1579],{"class":139},[129,51101,51102],{"class":131,"line":1215},[129,51103,51104],{"class":139},"不输出，括号为假\n",[83,51106,51107],{"start":51},[86,51108,51109],{},"双分支语句",[14,51111,51112],{},[40,51113],{"alt":42,"src":51114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[83,51116,51117],{"start":1194},[86,51118,51119],{},"多分支语句",[14,51121,51122],{},[40,51123],{"alt":42,"src":51124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22013,51126,51128],{"id":51127},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51130,51131],{},[40,51132],{"alt":42,"src":51133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22013,51135,51137],{"id":51136},"_2713-switch语句","2.7.1.3 switch语句",[14,51139,51140],{},[40,51141],{"alt":42,"src":51142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51144,51145],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[100,51147,51149],{"id":51148},"_272-循环语句","2.7.2 循环语句",[22013,51151,51153],{"id":51152},"_2721-断点演示","2.7.2.1 断点演示",[14,51155,51156],{},[40,51157],{"alt":42,"src":51158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22013,51160,51162],{"id":51161},"_2722-while循环","2.7.2.2 while循环",[14,51164,51165],{},[40,51166],{"alt":42,"src":51167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51169,51170],{},[40,51171],{"alt":42,"src":51172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22013,51174,51176],{"id":51175},"_2723-for循环","2.7.2.3 for循环",[14,51178,51179],{},[40,51180],{"alt":42,"src":51181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51183,51184],{},"for(;;) {",[14,51186,1085],{},[14,51188,51189],{},"表示无限循环",[14,51191,51192],{},[40,51193],{"alt":42,"src":51194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22013,51196,51198],{"id":51197},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51200,51201],{},[40,51202],{"alt":42,"src":51203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[71,51205,51207],{"id":51206},"_28-数组","2.8 数组",[100,51209,51211],{"id":51210},"_281-基础认识","2.8.1 基础认识",[14,51213,51214],{},[40,51215],{"alt":42,"src":51216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51218,51219],{},[40,51220],{"alt":42,"src":51221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51223,51224],{},[40,51225],{"alt":42,"src":51226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51228,51229],{},[40,51230],{"alt":42,"src":51231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[100,51233,51235],{"id":51234},"_282-操作数组","2.8.2 操作数组",[14,51237,51238],{},[40,51239],{"alt":42,"src":51240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[83,51242,51243],{},[86,51244,51245],{},"添加元素",[14,51247,51248],{},[40,51249],{"alt":42,"src":51250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51252,51253],{},"console.log(arr.push('green'))",[14,51255,51256],{},"输出结果：为新数组的长度",[14,51258,51259],{},[40,51260],{"alt":42,"src":51261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51263,51264],{},"push用的非常多，一定要记住",[83,51266,51267],{},[86,51268,51269],{},"删除元素",[14,51271,51272],{},[40,51273],{"alt":42,"src":51274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51276,51277],{},[40,51278],{"alt":42,"src":51279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51281,51282],{},[40,51283],{"alt":42,"src":51284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[100,51286,51288],{"id":51287},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[120,51290,51292],{"className":50634,"code":51291,"language":50636,"meta":42,"style":42},"\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",[126,51293,51294,51309,51325,51329,51338,51356,51380,51402,51416,51424,51431,51443,51454,51458,51462,51469,51481,51496,51509,51528,51545,51560,51572,51584,51596,51600,51604,51615,51625,51637,51649,51661,51672,51676,51680,51692,51696,51710,51714,51718,51729,51743,51755,51769,51773,51782,51791,51795,51804,51808,51817,51822,51827,51840,51868,51873,51878,51903,51908,51912,51917,51922,51937,51941,51946,51976,51988,52004,52020,52034,52039,52046,52050,52055,52068,52076,52084,52088],{"__ignoreMap":42},[129,51295,51296,51299,51303,51306],{"class":131,"line":132},[129,51297,51298],{"class":139},"\u003C!",[129,51300,51302],{"class":51301},"s9eBZ","DOCTYPE",[129,51304,51305],{"class":1977}," html",[129,51307,51308],{"class":139},">\n",[129,51310,51311,51313,51315,51318,51320,51323],{"class":131,"line":51},[129,51312,1049],{"class":139},[129,51314,50636],{"class":51301},[129,51316,51317],{"class":1977}," lang",[129,51319,185],{"class":139},[129,51321,51322],{"class":244},"\"en\"",[129,51324,51308],{"class":139},[129,51326,51327],{"class":131,"line":1194},[129,51328,2414],{"emptyLinePlaceholder":56},[129,51330,51331,51333,51336],{"class":131,"line":1209},[129,51332,1049],{"class":139},[129,51334,51335],{"class":51301},"head",[129,51337,51308],{"class":139},[129,51339,51340,51343,51346,51349,51351,51354],{"class":131,"line":1215},[129,51341,51342],{"class":139},"    \u003C",[129,51344,51345],{"class":51301},"meta",[129,51347,51348],{"class":1977}," charset",[129,51350,185],{"class":139},[129,51352,51353],{"class":244},"\"UTF-8\"",[129,51355,51308],{"class":139},[129,51357,51358,51360,51362,51365,51367,51370,51373,51375,51378],{"class":131,"line":1229},[129,51359,51342],{"class":139},[129,51361,51345],{"class":51301},[129,51363,51364],{"class":1977}," http-equiv",[129,51366,185],{"class":139},[129,51368,51369],{"class":244},"\"X-UA-Compatible\"",[129,51371,51372],{"class":1977}," content",[129,51374,185],{"class":139},[129,51376,51377],{"class":244},"\"IE=edge\"",[129,51379,51308],{"class":139},[129,51381,51382,51384,51386,51388,51390,51393,51395,51397,51400],{"class":131,"line":1235},[129,51383,51342],{"class":139},[129,51385,51345],{"class":51301},[129,51387,14935],{"class":1977},[129,51389,185],{"class":139},[129,51391,51392],{"class":244},"\"viewport\"",[129,51394,51372],{"class":1977},[129,51396,185],{"class":139},[129,51398,51399],{"class":244},"\"width=device-width, initial-scale=1.0\"",[129,51401,51308],{"class":139},[129,51403,51404,51406,51409,51412,51414],{"class":131,"line":1326},[129,51405,51342],{"class":139},[129,51407,51408],{"class":51301},"title",[129,51410,51411],{"class":139},">Document\u003C\u002F",[129,51413,51408],{"class":51301},[129,51415,51308],{"class":139},[129,51417,51418,51420,51422],{"class":131,"line":1332},[129,51419,51342],{"class":139},[129,51421,5141],{"class":51301},[129,51423,51308],{"class":139},[129,51425,51426,51429],{"class":131,"line":1344},[129,51427,51428],{"class":51301},"        *",[129,51430,15587],{"class":139},[129,51432,51433,51436,51439,51441],{"class":131,"line":1626},[129,51434,51435],{"class":188},"            margin",[129,51437,51438],{"class":139},": ",[129,51440,331],{"class":188},[129,51442,1305],{"class":139},[129,51444,51445,51448,51450,51452],{"class":131,"line":1631},[129,51446,51447],{"class":188},"            padding",[129,51449,51438],{"class":139},[129,51451,331],{"class":188},[129,51453,1305],{"class":139},[129,51455,51456],{"class":131,"line":1637},[129,51457,2543],{"class":139},[129,51459,51460],{"class":131,"line":1642},[129,51461,2414],{"emptyLinePlaceholder":56},[129,51463,51464,51467],{"class":131,"line":1656},[129,51465,51466],{"class":1977},"        .box",[129,51468,15587],{"class":139},[129,51470,51471,51474,51476,51479],{"class":131,"line":1661},[129,51472,51473],{"class":188},"            display",[129,51475,51438],{"class":139},[129,51477,51478],{"class":188},"flex",[129,51480,1305],{"class":139},[129,51482,51483,51486,51488,51491,51494],{"class":131,"line":1667},[129,51484,51485],{"class":188},"            width",[129,51487,51438],{"class":139},[129,51489,51490],{"class":188},"700",[129,51492,51493],{"class":135},"px",[129,51495,1305],{"class":139},[129,51497,51498,51501,51503,51505,51507],{"class":131,"line":1688},[129,51499,51500],{"class":188},"            height",[129,51502,51438],{"class":139},[129,51504,3987],{"class":188},[129,51506,51493],{"class":135},[129,51508,1305],{"class":139},[129,51510,51511,51514,51516,51518,51520,51523,51526],{"class":131,"line":1693},[129,51512,51513],{"class":188},"            border-left",[129,51515,51438],{"class":139},[129,51517,357],{"class":188},[129,51519,51493],{"class":135},[129,51521,51522],{"class":188}," solid",[129,51524,51525],{"class":188}," pink",[129,51527,1305],{"class":139},[129,51529,51530,51533,51535,51537,51539,51541,51543],{"class":131,"line":1707},[129,51531,51532],{"class":188},"            border-bottom",[129,51534,51438],{"class":139},[129,51536,357],{"class":188},[129,51538,51493],{"class":135},[129,51540,51522],{"class":188},[129,51542,51525],{"class":188},[129,51544,1305],{"class":139},[129,51546,51547,51549,51551,51553,51555,51558],{"class":131,"line":1712},[129,51548,51435],{"class":188},[129,51550,51438],{"class":139},[129,51552,795],{"class":188},[129,51554,51493],{"class":135},[129,51556,51557],{"class":188}," auto",[129,51559,1305],{"class":139},[129,51561,51562,51565,51567,51570],{"class":131,"line":1741},[129,51563,51564],{"class":188},"            justify-content",[129,51566,51438],{"class":139},[129,51568,51569],{"class":188},"space-around",[129,51571,1305],{"class":139},[129,51573,51574,51577,51579,51582],{"class":131,"line":1746},[129,51575,51576],{"class":188},"            align-items",[129,51578,51438],{"class":139},[129,51580,51581],{"class":188},"flex-end",[129,51583,1305],{"class":139},[129,51585,51586,51589,51591,51594],{"class":131,"line":1763},[129,51587,51588],{"class":188},"            text-align",[129,51590,51438],{"class":139},[129,51592,51593],{"class":188},"center",[129,51595,1305],{"class":139},[129,51597,51598],{"class":131,"line":1768},[129,51599,2543],{"class":139},[129,51601,51602],{"class":131,"line":1773},[129,51603,2414],{"emptyLinePlaceholder":56},[129,51605,51606,51608,51610,51613],{"class":131,"line":1778},[129,51607,51466],{"class":1977},[129,51609,1099],{"class":135},[129,51611,51612],{"class":51301},"div",[129,51614,15587],{"class":139},[129,51616,51617,51619,51621,51623],{"class":131,"line":1792},[129,51618,51473],{"class":188},[129,51620,51438],{"class":139},[129,51622,51478],{"class":188},[129,51624,1305],{"class":139},[129,51626,51627,51629,51631,51633,51635],{"class":131,"line":1797},[129,51628,51485],{"class":188},[129,51630,51438],{"class":139},[129,51632,795],{"class":188},[129,51634,51493],{"class":135},[129,51636,1305],{"class":139},[129,51638,51639,51642,51644,51647],{"class":131,"line":2591},[129,51640,51641],{"class":188},"            background-color",[129,51643,51438],{"class":139},[129,51645,51646],{"class":188},"pink",[129,51648,1305],{"class":139},[129,51650,51651,51654,51656,51659],{"class":131,"line":2605},[129,51652,51653],{"class":188},"            flex-direction",[129,51655,51438],{"class":139},[129,51657,51658],{"class":188},"column",[129,51660,1305],{"class":139},[129,51662,51663,51665,51667,51670],{"class":131,"line":2613},[129,51664,51564],{"class":188},[129,51666,51438],{"class":139},[129,51668,51669],{"class":188},"space-between",[129,51671,1305],{"class":139},[129,51673,51674],{"class":131,"line":2618},[129,51675,2543],{"class":139},[129,51677,51678],{"class":131,"line":2624},[129,51679,2414],{"emptyLinePlaceholder":56},[129,51681,51682,51684,51687,51690],{"class":131,"line":2630},[129,51683,51466],{"class":1977},[129,51685,51686],{"class":51301}," div",[129,51688,51689],{"class":51301}," span",[129,51691,15587],{"class":139},[129,51693,51694],{"class":131,"line":2635},[129,51695,2414],{"emptyLinePlaceholder":56},[129,51697,51698,51701,51703,51706,51708],{"class":131,"line":7963},[129,51699,51700],{"class":188},"            margin-top",[129,51702,51438],{"class":139},[129,51704,51705],{"class":188},"-20",[129,51707,51493],{"class":135},[129,51709,1305],{"class":139},[129,51711,51712],{"class":131,"line":7987},[129,51713,2543],{"class":139},[129,51715,51716],{"class":131,"line":7992},[129,51717,2414],{"emptyLinePlaceholder":56},[129,51719,51720,51722,51724,51727],{"class":131,"line":7998},[129,51721,51466],{"class":1977},[129,51723,51686],{"class":51301},[129,51725,51726],{"class":51301}," h4",[129,51728,15587],{"class":139},[129,51730,51731,51734,51736,51739,51741],{"class":131,"line":8025},[129,51732,51733],{"class":188},"            margin-bottom",[129,51735,51438],{"class":139},[129,51737,51738],{"class":188},"-35",[129,51740,51493],{"class":135},[129,51742,1305],{"class":139},[129,51744,51745,51747,51749,51751,51753],{"class":131,"line":8030},[129,51746,51485],{"class":188},[129,51748,51438],{"class":139},[129,51750,495],{"class":188},[129,51752,51493],{"class":135},[129,51754,1305],{"class":139},[129,51756,51757,51760,51762,51765,51767],{"class":131,"line":8036},[129,51758,51759],{"class":188},"            margin-left",[129,51761,51438],{"class":139},[129,51763,51764],{"class":188},"-10",[129,51766,51493],{"class":135},[129,51768,1305],{"class":139},[129,51770,51771],{"class":131,"line":8048},[129,51772,2543],{"class":139},[129,51774,51775,51778,51780],{"class":131,"line":8060},[129,51776,51777],{"class":139},"    \u003C\u002F",[129,51779,5141],{"class":51301},[129,51781,51308],{"class":139},[129,51783,51784,51787,51789],{"class":131,"line":8072},[129,51785,51786],{"class":139},"\u003C\u002F",[129,51788,51335],{"class":51301},[129,51790,51308],{"class":139},[129,51792,51793],{"class":131,"line":9731},[129,51794,2414],{"emptyLinePlaceholder":56},[129,51796,51797,51799,51802],{"class":131,"line":9756},[129,51798,1049],{"class":139},[129,51800,51801],{"class":51301},"body",[129,51803,51308],{"class":139},[129,51805,51806],{"class":131,"line":9779},[129,51807,2414],{"emptyLinePlaceholder":56},[129,51809,51810,51812,51815],{"class":131,"line":9803},[129,51811,51342],{"class":139},[129,51813,51814],{"class":51301},"script",[129,51816,51308],{"class":139},[129,51818,51819],{"class":131,"line":9808},[129,51820,51821],{"class":198},"        \u002F\u002F 1. 四次弹框效果\n",[129,51823,51824],{"class":131,"line":9813},[129,51825,51826],{"class":198},"        \u002F\u002F 声明一个新的数组\n",[129,51828,51829,51832,51835,51837],{"class":131,"line":9818},[129,51830,51831],{"class":135},"        let",[129,51833,51834],{"class":139}," arr ",[129,51836,185],{"class":135},[129,51838,51839],{"class":139}," []\n",[129,51841,51842,51844,51846,51849,51851,51853,51855,51857,51859,51862,51864,51866],{"class":131,"line":9827},[129,51843,3417],{"class":135},[129,51845,1672],{"class":139},[129,51847,51848],{"class":135},"let",[129,51850,9453],{"class":139},[129,51852,185],{"class":135},[129,51854,25119],{"class":188},[129,51856,9460],{"class":139},[129,51858,1602],{"class":135},[129,51860,51861],{"class":188}," 4",[129,51863,3228],{"class":139},[129,51865,2306],{"class":135},[129,51867,12457],{"class":139},[129,51869,51870],{"class":131,"line":9832},[129,51871,51872],{"class":198},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[129,51874,51875],{"class":131,"line":9838},[129,51876,51877],{"class":198},"            \u002F\u002F arr.push(num)\n",[129,51879,51880,51883,51886,51888,51891,51893,51896,51898,51901],{"class":131,"line":9859},[129,51881,51882],{"class":139},"            arr.",[129,51884,51885],{"class":1977},"push",[129,51887,140],{"class":139},[129,51889,51890],{"class":1977},"prompt",[129,51892,140],{"class":139},[129,51894,51895],{"class":244},"`请输入第${",[129,51897,580],{"class":139},[129,51899,51900],{"class":244},"}季度的数据:`",[129,51902,30498],{"class":139},[129,51904,51905],{"class":131,"line":9865},[129,51906,51907],{"class":198},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[129,51909,51910],{"class":131,"line":9879},[129,51911,2543],{"class":139},[129,51913,51914],{"class":131,"line":9885},[129,51915,51916],{"class":198},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[129,51918,51919],{"class":131,"line":9912},[129,51920,51921],{"class":198},"        \u002F\u002F 盒子开头\n",[129,51923,51924,51927,51930,51932,51935],{"class":131,"line":9921},[129,51925,51926],{"class":139},"        document.",[129,51928,51929],{"class":1977},"write",[129,51931,140],{"class":139},[129,51933,51934],{"class":244},"` \u003Cdiv class=\"box\">`",[129,51936,146],{"class":139},[129,51938,51939],{"class":131,"line":9927},[129,51940,2414],{"emptyLinePlaceholder":56},[129,51942,51943],{"class":131,"line":9935},[129,51944,51945],{"class":198},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[129,51947,51948,51950,51952,51954,51956,51958,51960,51962,51964,51967,51970,51972,51974],{"class":131,"line":9940},[129,51949,3417],{"class":135},[129,51951,1672],{"class":139},[129,51953,51848],{"class":135},[129,51955,9453],{"class":139},[129,51957,185],{"class":135},[129,51959,4107],{"class":188},[129,51961,9460],{"class":139},[129,51963,1049],{"class":135},[129,51965,51966],{"class":139}," arr.",[129,51968,51969],{"class":188},"length",[129,51971,3228],{"class":139},[129,51973,2306],{"class":135},[129,51975,12457],{"class":139},[129,51977,51978,51981,51983,51985],{"class":131,"line":16619},[129,51979,51980],{"class":139},"            document.",[129,51982,51929],{"class":1977},[129,51984,140],{"class":139},[129,51986,51987],{"class":244},"`\n",[129,51989,51990,51993,51995,51997,51999,52001],{"class":131,"line":16625},[129,51991,51992],{"class":244},"              \u003Cdiv style=\"height: ${",[129,51994,3894],{"class":139},[129,51996,1029],{"class":244},[129,51998,580],{"class":139},[129,52000,1079],{"class":244},[129,52002,52003],{"class":244},"}px;\">\n",[129,52005,52006,52009,52011,52013,52015,52017],{"class":131,"line":16648},[129,52007,52008],{"class":244},"                \u003Cspan>${",[129,52010,3894],{"class":139},[129,52012,1029],{"class":244},[129,52014,580],{"class":139},[129,52016,1079],{"class":244},[129,52018,52019],{"class":244},"}\u003C\u002Fspan>\n",[129,52021,52022,52025,52027,52029,52031],{"class":131,"line":16654},[129,52023,52024],{"class":244},"                \u003Ch4>第${",[129,52026,580],{"class":139},[129,52028,45567],{"class":135},[129,52030,25119],{"class":188},[129,52032,52033],{"class":244},"}季度\u003C\u002Fh4>\n",[129,52035,52036],{"class":131,"line":16677},[129,52037,52038],{"class":244},"              \u003C\u002Fdiv>          \n",[129,52040,52041,52044],{"class":131,"line":16691},[129,52042,52043],{"class":244},"            `",[129,52045,146],{"class":139},[129,52047,52048],{"class":131,"line":16711},[129,52049,2543],{"class":139},[129,52051,52052],{"class":131,"line":16717},[129,52053,52054],{"class":198},"        \u002F\u002F 盒子结尾\n",[129,52056,52057,52059,52061,52063,52066],{"class":131,"line":16728},[129,52058,51926],{"class":139},[129,52060,51929],{"class":1977},[129,52062,140],{"class":139},[129,52064,52065],{"class":244},"` \u003C\u002Fdiv>`",[129,52067,146],{"class":139},[129,52069,52070,52072,52074],{"class":131,"line":16751},[129,52071,51777],{"class":139},[129,52073,51814],{"class":51301},[129,52075,51308],{"class":139},[129,52077,52078,52080,52082],{"class":131,"line":16773},[129,52079,51786],{"class":139},[129,52081,51801],{"class":51301},[129,52083,51308],{"class":139},[129,52085,52086],{"class":131,"line":16778},[129,52087,2414],{"emptyLinePlaceholder":56},[129,52089,52090,52092,52094],{"class":131,"line":16784},[129,52091,51786],{"class":139},[129,52093,50636],{"class":51301},[129,52095,51308],{"class":139},[100,52097,52099],{"id":52098},"_284-冒泡排序","2.8.4 冒泡排序",[120,52101,52103],{"className":50634,"code":52102,"language":50636,"meta":42,"style":42},"\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",[126,52104,52105,52115,52129,52133,52141,52156,52176,52188,52196,52200,52208,52216,52248,52281,52318,52323,52342,52347,52360,52375,52391,52395,52400,52404,52414,52423,52431,52435],{"__ignoreMap":42},[129,52106,52107,52109,52111,52113],{"class":131,"line":132},[129,52108,51298],{"class":139},[129,52110,51302],{"class":51301},[129,52112,51305],{"class":1977},[129,52114,51308],{"class":139},[129,52116,52117,52119,52121,52123,52125,52127],{"class":131,"line":51},[129,52118,1049],{"class":139},[129,52120,50636],{"class":51301},[129,52122,51317],{"class":1977},[129,52124,185],{"class":139},[129,52126,51322],{"class":244},[129,52128,51308],{"class":139},[129,52130,52131],{"class":131,"line":1194},[129,52132,2414],{"emptyLinePlaceholder":56},[129,52134,52135,52137,52139],{"class":131,"line":1209},[129,52136,1049],{"class":139},[129,52138,51335],{"class":51301},[129,52140,51308],{"class":139},[129,52142,52143,52146,52148,52150,52152,52154],{"class":131,"line":1215},[129,52144,52145],{"class":139},"  \u003C",[129,52147,51345],{"class":51301},[129,52149,51348],{"class":1977},[129,52151,185],{"class":139},[129,52153,51353],{"class":244},[129,52155,51308],{"class":139},[129,52157,52158,52160,52162,52164,52166,52168,52170,52172,52174],{"class":131,"line":1229},[129,52159,52145],{"class":139},[129,52161,51345],{"class":51301},[129,52163,14935],{"class":1977},[129,52165,185],{"class":139},[129,52167,51392],{"class":244},[129,52169,51372],{"class":1977},[129,52171,185],{"class":139},[129,52173,51399],{"class":244},[129,52175,51308],{"class":139},[129,52177,52178,52180,52182,52184,52186],{"class":131,"line":1235},[129,52179,52145],{"class":139},[129,52181,51408],{"class":51301},[129,52183,51411],{"class":139},[129,52185,51408],{"class":51301},[129,52187,51308],{"class":139},[129,52189,52190,52192,52194],{"class":131,"line":1326},[129,52191,51786],{"class":139},[129,52193,51335],{"class":51301},[129,52195,51308],{"class":139},[129,52197,52198],{"class":131,"line":1332},[129,52199,2414],{"emptyLinePlaceholder":56},[129,52201,52202,52204,52206],{"class":131,"line":1344},[129,52203,1049],{"class":139},[129,52205,51801],{"class":51301},[129,52207,51308],{"class":139},[129,52209,52210,52212,52214],{"class":131,"line":1626},[129,52211,52145],{"class":139},[129,52213,51814],{"class":51301},[129,52215,51308],{"class":139},[129,52217,52218,52221,52223,52225,52228,52230,52232,52234,52236,52238,52240,52242,52244,52246],{"class":131,"line":1631},[129,52219,52220],{"class":135},"    let",[129,52222,51834],{"class":139},[129,52224,185],{"class":135},[129,52226,52227],{"class":139}," [",[129,52229,458],{"class":188},[129,52231,12450],{"class":139},[129,52233,432],{"class":188},[129,52235,12450],{"class":139},[129,52237,211],{"class":188},[129,52239,12450],{"class":139},[129,52241,217],{"class":188},[129,52243,12450],{"class":139},[129,52245,357],{"class":188},[129,52247,33247],{"class":139},[129,52249,52250,52252,52254,52256,52258,52260,52262,52264,52266,52268,52270,52273,52275,52277,52279],{"class":131,"line":1637},[129,52251,3215],{"class":135},[129,52253,1672],{"class":139},[129,52255,51848],{"class":135},[129,52257,9453],{"class":139},[129,52259,185],{"class":135},[129,52261,4107],{"class":188},[129,52263,9460],{"class":139},[129,52265,1049],{"class":135},[129,52267,51966],{"class":139},[129,52269,51969],{"class":188},[129,52271,52272],{"class":135}," -",[129,52274,25119],{"class":188},[129,52276,3228],{"class":139},[129,52278,2306],{"class":135},[129,52280,12457],{"class":139},[129,52282,52283,52286,52288,52290,52292,52294,52296,52298,52300,52302,52304,52306,52308,52310,52312,52314,52316],{"class":131,"line":1642},[129,52284,52285],{"class":135},"      for",[129,52287,1672],{"class":139},[129,52289,51848],{"class":135},[129,52291,9515],{"class":139},[129,52293,185],{"class":135},[129,52295,4107],{"class":188},[129,52297,9522],{"class":139},[129,52299,1049],{"class":135},[129,52301,51966],{"class":139},[129,52303,51969],{"class":188},[129,52305,52272],{"class":135},[129,52307,9453],{"class":139},[129,52309,671],{"class":135},[129,52311,25119],{"class":188},[129,52313,9529],{"class":139},[129,52315,2306],{"class":135},[129,52317,12457],{"class":139},[129,52319,52320],{"class":131,"line":1656},[129,52321,52322],{"class":198},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[129,52324,52325,52327,52330,52332,52335,52337,52339],{"class":131,"line":1661},[129,52326,2511],{"class":135},[129,52328,52329],{"class":139}," (arr[j] ",[129,52331,1099],{"class":135},[129,52333,52334],{"class":139}," arr[j ",[129,52336,620],{"class":135},[129,52338,25119],{"class":188},[129,52340,52341],{"class":139},"]) {\n",[129,52343,52344],{"class":131,"line":1667},[129,52345,52346],{"class":198},"          \u002F\u002F 交换两个变量\n",[129,52348,52349,52352,52355,52357],{"class":131,"line":1688},[129,52350,52351],{"class":135},"          let",[129,52353,52354],{"class":139}," tmp ",[129,52356,185],{"class":135},[129,52358,52359],{"class":139}," arr[j]\n",[129,52361,52362,52365,52367,52369,52371,52373],{"class":131,"line":1693},[129,52363,52364],{"class":139},"          arr[j] ",[129,52366,185],{"class":135},[129,52368,52334],{"class":139},[129,52370,620],{"class":135},[129,52372,25119],{"class":188},[129,52374,33247],{"class":139},[129,52376,52377,52380,52382,52384,52386,52388],{"class":131,"line":1707},[129,52378,52379],{"class":139},"          arr[j ",[129,52381,620],{"class":135},[129,52383,25119],{"class":188},[129,52385,4457],{"class":139},[129,52387,185],{"class":135},[129,52389,52390],{"class":139}," tmp\n",[129,52392,52393],{"class":131,"line":1712},[129,52394,2543],{"class":139},[129,52396,52397],{"class":131,"line":1741},[129,52398,52399],{"class":139},"      }\n",[129,52401,52402],{"class":131,"line":1746},[129,52403,2201],{"class":139},[129,52405,52406,52409,52411],{"class":131,"line":1763},[129,52407,52408],{"class":139},"    document.",[129,52410,51929],{"class":1977},[129,52412,52413],{"class":139},"(arr)\n",[129,52415,52416,52419,52421],{"class":131,"line":1768},[129,52417,52418],{"class":139},"  \u003C\u002F",[129,52420,51814],{"class":51301},[129,52422,51308],{"class":139},[129,52424,52425,52427,52429],{"class":131,"line":1773},[129,52426,51786],{"class":139},[129,52428,51801],{"class":51301},[129,52430,51308],{"class":139},[129,52432,52433],{"class":131,"line":1778},[129,52434,2414],{"emptyLinePlaceholder":56},[129,52436,52437,52439,52441],{"class":131,"line":1792},[129,52438,51786],{"class":139},[129,52440,50636],{"class":51301},[129,52442,51308],{"class":139},[14,52444,52445],{},[40,52446],{"alt":42,"src":52447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52449,52450],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52452,52453],{},"let arr = [4, 2, 5, 1, 3]",[14,52455,52456],{},"\u002F\u002F 1.升序排列写法",[14,52458,52459],{},"arr.sort(function (a, b) {",[14,52461,52462],{},"return a - b",[14,52464,52465],{},"})",[14,52467,52468],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52470,52471],{},"\u002F\u002F 降序排列写法",[14,52473,52459],{},[14,52475,52476],{},"return b - a",[14,52478,52465],{},[14,52480,52481],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[71,52483,52485],{"id":52484},"_29-函数","2.9 函数",[14,52487,52488],{},[40,52489],{"alt":42,"src":52490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52492,52493],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52495,52496],{},"函数的声明用function",[14,52498,52499],{},"函数里边可以嵌套函数",[100,52501,52503],{"id":52502},"_291-函数传参","2.9.1 函数传参",[14,52505,52506],{},[40,52507],{"alt":42,"src":52508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52510,52511],{},[40,52512],{"alt":42,"src":52513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1146,52515,52516,52519,52522,52525,52528,52531],{},[86,52517,52518],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[86,52520,52521],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[86,52523,52524],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[86,52526,52527],{},"开发中尽量保持形参和实参个数一致",[86,52529,52530],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[86,52532,52533],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52535,52536],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[100,52538,52540],{"id":52539},"_292-函数的返回值","2.9.2 函数的返回值",[14,52542,52543],{},[40,52544],{"alt":42,"src":52545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52547,52548],{},[40,52549],{"alt":42,"src":52550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1146,52552,52553,52556,52559,52562,52565],{},[86,52554,52555],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[86,52557,52558],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[86,52560,52561],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[86,52563,52564],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[86,52566,52567],{},"断点调试:进入函数内部看执行过程F11",[100,52569,52571],{"id":52570},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[120,52573,52575],{"className":50634,"code":52574,"language":50636,"meta":42,"style":42},"    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",[126,52576,52577,52582,52587,52591,52596],{"__ignoreMap":42},[129,52578,52579],{"class":131,"line":132},[129,52580,52581],{"class":139},"    function fn(a, b) {\n",[129,52583,52584],{"class":131,"line":51},[129,52585,52586],{"class":139},"      console.log(a + b);\n",[129,52588,52589],{"class":131,"line":1194},[129,52590,2201],{"class":139},[129,52592,52593],{"class":131,"line":1209},[129,52594,52595],{"class":139},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[129,52597,52598],{"class":131,"line":1215},[129,52599,52600],{"class":139},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[100,52602,52604],{"id":52603},"_294-作用域","2.9.4 作用域",[1146,52606,52607,52613,52618,52621,52624],{},[86,52608,52609,52610],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[289,52611,52612],{},"作用域",[86,52614,52615],{},[289,52616,52617],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[86,52619,52620],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[86,52622,52623],{},"函数内部可以直接所使用全局变量",[86,52625,52626],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52628,14648],{},[120,52630,52632],{"className":50634,"code":52631,"language":50636,"meta":42,"style":42},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[126,52633,52634,52639,52644,52648,52653,52658,52663],{"__ignoreMap":42},[129,52635,52636],{"class":131,"line":132},[129,52637,52638],{"class":139},"    function fun() {\n",[129,52640,52641],{"class":131,"line":51},[129,52642,52643],{"class":139},"      num = 10\n",[129,52645,52646],{"class":131,"line":1194},[129,52647,2201],{"class":139},[129,52649,52650],{"class":131,"line":1209},[129,52651,52652],{"class":139},"    fun()\n",[129,52654,52655],{"class":131,"line":1215},[129,52656,52657],{"class":139},"    console.log(num)\n",[129,52659,52660],{"class":131,"line":1229},[129,52661,52662],{"class":139},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[129,52664,52665],{"class":131,"line":1235},[129,52666,52667],{"class":139},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1146,52669,52670,52673],{},[86,52671,52672],{},"函数内部的形参可以看做是局部变量",[86,52674,52675],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52677,52678,52679],{},"变量访问原则： ",[289,52680,52681],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[100,52683,52685],{"id":52684},"_295-匿名函数","2.9.5 匿名函数",[14,52687,52688],{},"函数可以分为具名函数和匿名函数",[14,52690,52691],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[83,52693,52694],{},[86,52695,52696],{},"函数表达式",[14,52698,52699],{},[40,52700],{"alt":42,"src":52701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52703,52704],{},"里边也可以写参数",[14,52706,52707],{},"具名函数调用位置可以随意调整；",[14,52709,52710],{},"匿名函数函数表达式形式只能在声明后才可以使用",[83,52712,52713],{"start":51},[86,52714,52715],{},"立即执行函数",[14,52717,52718],{},[40,52719],{"alt":42,"src":52720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52722,52723],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52725,52726],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52728,52729],{},"(function () {})();",[14,52731,52732],{},"不要落下最后的;",[14,52734,52735],{},"立即执行函数必须要加;",[14,52737,52738],{},"分号写前写后都没问题",[14,52740,52741],{},"写前：",[14,52743,52744],{},"(function() {})()",[14,52746,52747],{},";(function () {})();",[14,52749,52750],{},"写后:",[14,52752,52753],{},"(function() {})();",[14,52755,52729],{},[14,52757,52758],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52760,52761],{},"还有一种写法：",[14,52763,52764],{},"(function(){}());",[14,52766,52767],{},"或者:",[14,52769,52770],{},"!function(){}();",[14,52772,52773],{},"立即执行函数有时候也是可以加名字的：",[14,52775,52776],{},"(function flexible(window,document) {}(window,document));",[14,52778,52779],{},"省一些调用方法",[100,52781,52783],{"id":52782},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52785,52786],{},[40,52787],{"alt":42,"src":52788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52790,52791],{},"这样就不用非得给x,y初始化了",[14,52793,52794],{},[40,52795],{"alt":42,"src":52796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52798,52799],{},"代码执行时先看左边",[14,52801,52802],{},"例如：console.log(false && 3+5)",[14,52804,52805],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52807,52808],{},"&&都是真时，就返回最后一个真值",[14,52810,52811],{},"console.log(11 && 22)",[14,52813,52814],{},"输出22",[14,52816,52817],{},"逻辑与：遇真则真",[14,52819,14648],{},[14,52821,52822],{},"let age=1",[14,52824,52825],{},"console.log(11 || age++)",[14,52827,52828],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52830,52831],{},"console.log(11 || 22)",[14,52833,52834],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52836,52837],{},"||如果都是假的话，就取最后一个假的值了",[100,52839,52841],{"id":52840},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52843,52844],{},"显示转换：",[14,52846,52847,52850,52851],{},[289,52848,52849],{},"记忆","： ",[289,52852,52853],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52855,52856],{},"空字符串为假，其他字符串全为真",[14,52858,52859],{},[40,52860],{"alt":42,"src":52861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52863,52864],{},"隐式转换：",[14,52866,52867],{},[40,52868],{"alt":42,"src":52869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52871,52872],{},"隐式转换:",[14,52874,52875],{},"null+3=3",[14,52877,52878],{},"undefined+3=NaN",[14,52880,52881],{},"null==undefined 输出true,他两个都当0看",[14,52883,52884],{},"null===undefined 输出false",[14,52886,52887],{},"undefined做任何操作都是NaN",[14,52889,52890],{},"NaN不等于NaN，NaN表示计算错误",[71,52892,52894],{"id":52893},"_210-对象","2.10 对象",[100,52896,52898],{"id":52897},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52900,52901],{},"对象也是一种数据类型，里边的数据是无序的",[14,52903,52904],{},"对象由属性和方法组成",[14,52906,52907],{},[40,52908],{"alt":42,"src":52909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52911,52912],{},[40,52913],{"alt":42,"src":52914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52916,52917],{},[40,52918],{"alt":42,"src":52919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[100,52921,52923],{"id":52922},"_2102-对象属性","2.10.2 对象属性",[14,52925,52926],{},[40,52927],{"alt":42,"src":52928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[83,52930,52931],{},[86,52932,52933],{},"查询对象",[14,52935,52936],{},"对象名.属性 goods.uname",[14,52938,52939],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,52941,52942],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,52944,52945],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,52947,52948],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[83,52950,52951],{"start":51},[86,52952,52953],{},"重新赋值",[14,52955,52956],{},"对象名.属性=新值",[83,52958,52959],{"start":1194},[86,52960,52961],{},"增加新数据",[14,52963,52956],{},[83,52965,52966],{"start":1209},[86,52967,52968],{},"删除对象中的属性",[14,52970,52971],{},"delete 对象名.属性",[100,52973,52975],{"id":52974},"_2103-对象方法","2.10.3 对象方法",[14,52977,52978],{},[40,52979],{"alt":42,"src":52980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,52982,52983],{},"后边跟的是匿名函数",[14,52985,52986],{},"对象外面的叫函数；对象内部的叫方法",[14,52988,52989],{},[40,52990],{"alt":42,"src":52991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[100,52993,52995],{"id":52994},"_2104-遍历对象","2.10.4 遍历对象",[14,52997,52998],{},"理解为加括号的python字典遍历",[14,53000,53001],{},[40,53002],{"alt":42,"src":53003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53005,53006],{},"k是字符串类型",[14,53008,53009],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[120,53011,53013],{"className":50634,"code":53012,"language":50636,"meta":42,"style":42},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[126,53014,53015,53020,53025,53030,53035],{"__ignoreMap":42},[129,53016,53017],{"class":131,"line":132},[129,53018,53019],{"class":139},"   let arr = [1, 2, 3]\n",[129,53021,53022],{"class":131,"line":51},[129,53023,53024],{"class":139},"    for (let k in arr) {\n",[129,53026,53027],{"class":131,"line":1194},[129,53028,53029],{"class":139},"      console.log(k)\n",[129,53031,53032],{"class":131,"line":1209},[129,53033,53034],{"class":139},"      console.log(arr[k])\n",[129,53036,53037],{"class":131,"line":1215},[129,53038,2201],{"class":139},[14,53040,53041],{},[40,53042],{"alt":42,"src":53043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53045,53046],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53048,53049],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53051,53052],{},"for in 得到的k是属性名",[51814,53054,53055],{},"\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,53057,53058],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[100,53060,53062],{"id":53061},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53064,53065],{},"数组中放对象信息",[120,53067,53071],{"className":53068,"code":53069,"language":53070,"meta":42,"style":42},"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",[126,53072,53073,53081,53086,53091,53096,53101,53106,53111,53116,53121,53126,53131,53136,53140,53144],{"__ignoreMap":42},[129,53074,53075,53077,53079],{"class":131,"line":132},[129,53076,1049],{"class":139},[129,53078,51814],{"class":51301},[129,53080,51308],{"class":139},[129,53082,53083],{"class":131,"line":51},[129,53084,53085],{"class":139},"    let students = [\n",[129,53087,53088],{"class":131,"line":1194},[129,53089,53090],{"class":139},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[129,53092,53093],{"class":131,"line":1209},[129,53094,53095],{"class":139},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[129,53097,53098],{"class":131,"line":1215},[129,53099,53100],{"class":139},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[129,53102,53103],{"class":131,"line":1229},[129,53104,53105],{"class":139},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[129,53107,53108],{"class":131,"line":1235},[129,53109,53110],{"class":139},"    ]\n",[129,53112,53113],{"class":131,"line":1326},[129,53114,53115],{"class":139},"    for (let i = 0; i \u003C students.length; i++) {\n",[129,53117,53118],{"class":131,"line":1332},[129,53119,53120],{"class":139},"      for (let k in students[i]) {\n",[129,53122,53123],{"class":131,"line":1344},[129,53124,53125],{"class":139},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[129,53127,53128],{"class":131,"line":1626},[129,53129,53130],{"class":139},"        \u002F\u002F输出每个人的名字：\n",[129,53132,53133],{"class":131,"line":1631},[129,53134,53135],{"class":139},"        \u002F\u002Fconsole.log(students[i].name)\n",[129,53137,53138],{"class":131,"line":1637},[129,53139,52399],{"class":139},[129,53141,53142],{"class":131,"line":1642},[129,53143,2201],{"class":139},[129,53145,53146,53148,53150],{"class":131,"line":1656},[129,53147,52418],{"class":139},[129,53149,51814],{"class":51301},[129,53151,51308],{"class":139},[100,53153,53155],{"id":53154},"_2106-内置对象","2.10.6 内置对象",[14,53157,53158],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[83,53160,53161],{},[86,53162,53163],{},"数学对象Math",[14,53165,53166],{},[40,53167],{"alt":42,"src":53168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53170,53171],{},[20,53172,53175],{"href":53173,"rel":53174},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53177,53178],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53180,53181],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53183,53184],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53186,53187],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53189,53190],{},"null属于对象数据类型",[83,53192,53193],{"start":51},[86,53194,53195],{},"生成任意范围随机数",[14,53197,53198],{},[40,53199],{"alt":42,"src":53200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53202,53203],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53205,53206],{},"乘以几就取不到几",[14,53208,53209],{},"取数组中的随机元素：",[14,53211,53212],{},"let arr = ['red', 'green', 'blue']",[14,53214,53215],{},"let random = Math.floor(Math.random() * arr.length)",[14,53217,53218],{},"console.log(arr[random])",[14,53220,53221],{},"这个函数得到的是全闭区间",[14,53223,53224],{},"function getRandom(N, M) {",[14,53226,53227],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53229,1085],{},[14,53231,53232],{},"console.log(getRandom(4, 8))",[100,53234,53236],{"id":53235},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53238,53239],{},[40,53240],{"alt":42,"src":53241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53243,53244],{},[40,53245],{"alt":42,"src":53246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53248,53249],{},[40,53250],{"alt":42,"src":53251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53253,53254],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53256,53257],{},[40,53258],{"alt":42,"src":53259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53261,53262],{},[40,53263],{"alt":42,"src":53264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53266,53267],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53269,53270],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53272,53273],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5141,53275,53276],{},"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":42,"searchDepth":51,"depth":51,"links":53278},[53279,53287,53288,53289,53290,53291,53298,53302,53308,53317],{"id":50469,"depth":51,"text":50470,"children":53280},[53281,53282,53283,53284,53285,53286],{"id":50473,"depth":1194,"text":50474},{"id":50490,"depth":1194,"text":50491},{"id":50530,"depth":1194,"text":50531},{"id":50542,"depth":1194,"text":50543},{"id":50551,"depth":1194,"text":50552},{"id":50599,"depth":1194,"text":50600},{"id":50609,"depth":51,"text":50610},{"id":50697,"depth":51,"text":50698},{"id":50720,"depth":51,"text":50721},{"id":50732,"depth":51,"text":50733},{"id":50919,"depth":51,"text":50920,"children":53292},[53293,53294,53295,53296,53297],{"id":50923,"depth":1194,"text":50924},{"id":50932,"depth":1194,"text":50933},{"id":50960,"depth":1194,"text":50961},{"id":50996,"depth":1194,"text":50997},{"id":51021,"depth":1194,"text":51022},{"id":51033,"depth":51,"text":51034,"children":53299},[53300,53301],{"id":51054,"depth":1194,"text":51055},{"id":51148,"depth":1194,"text":51149},{"id":51206,"depth":51,"text":51207,"children":53303},[53304,53305,53306,53307],{"id":51210,"depth":1194,"text":51211},{"id":51234,"depth":1194,"text":51235},{"id":51287,"depth":1194,"text":51288},{"id":52098,"depth":1194,"text":52099},{"id":52484,"depth":51,"text":52485,"children":53309},[53310,53311,53312,53313,53314,53315,53316],{"id":52502,"depth":1194,"text":52503},{"id":52539,"depth":1194,"text":52540},{"id":52570,"depth":1194,"text":52571},{"id":52603,"depth":1194,"text":52604},{"id":52684,"depth":1194,"text":52685},{"id":52782,"depth":1194,"text":52783},{"id":52840,"depth":1194,"text":52841},{"id":52893,"depth":51,"text":52894,"children":53318},[53319,53320,53321,53322,53323,53324,53325],{"id":52897,"depth":1194,"text":52898},{"id":52922,"depth":1194,"text":52923},{"id":52974,"depth":1194,"text":52975},{"id":52994,"depth":1194,"text":52995},{"id":53061,"depth":1194,"text":53062},{"id":53154,"depth":1194,"text":53155},{"id":53235,"depth":1194,"text":53236},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50461,"description":53},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53332,"title":53333,"body":53334,"description":53,"extension":54,"meta":76674,"navigation":56,"path":76675,"seo":76676,"stem":76677,"__hash__":76678},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53335,"toc":76614},[53336,53339,53342,53345,53350,53353,53356,53359,53363,53367,53373,53378,53386,53393,53396,53400,53405,53410,53415,53418,53421,53432,53435,53439,53442,53445,53450,53455,53460,53463,53466,53558,53561,53566,53569,53574,53577,53580,53585,53588,53593,53597,53600,53614,53618,53623,53626,53629,53633,53638,53641,53645,53649,53654,53658,53663,53666,53669,53672,53675,53678,53681,53686,53691,53719,53722,53725,53728,53733,53736,53739,53742,53745,53749,53778,53782,53787,53792,53795,53798,53801,53806,53921,53926,53931,54092,54097,54100,54104,54109,54114,54117,54120,54123,54126,54129,54132,54135,54138,54141,54144,54147,54150,54153,54156,54158,54161,54164,54167,54172,54176,54573,54576,54582,54586,54591,55873,55878,55881,55884,55887,55892,57088,57092,57098,57103,57106,57111,57116,57120,57124,57129,57132,57137,57140,57143,57147,58055,58058,58062,58283,58286,58289,58292,58518,58521,58745,58748,58752,58757,58760,58763,58991,58994,59027,59030,59034,59039,59043,59046,59049,59052,59055,59058,59061,59064,59069,60349,60353,60356,61449,61453,61456,61459,61462,61465,61469,61472,61475,61477,61485,62966,62970,62973,62976,62979,63188,63191,63195,63199,63204,63209,63212,63215,63220,63224,63229,63232,63341,63345,63350,63355,63358,63361,63365,63370,63375,63380,63383,63386,63397,63400,63405,63410,63413,63416,63489,63493,63498,63501,63503,63514,63518,63523,64849,64852,64855,64858,64860,64863,64866,64869,64872,64875,64878,64881,64884,64887,64890,64893,64896,64898,64900,64903,64907,66001,66004,66007,66023,66037,66040,66045,66051,66056,66060,66064,66069,66073,66078,66520,66525,66528,66532,66537,66540,66543,66547,66552,66556,66561,66566,66570,66575,66580,66583,66588,66593,66597,66602,66607,66711,66714,66718,66723,67089,67092,67095,67098,67101,67104,67107,67110,67113,68409,68413,68418,68423,68426,68429,68432,68435,68437,68442,68447,68450,68454,68459,68464,68469,68472,68475,68478,68481,68484,68489,68492,68496,68501,68506,68510,68515,68518,68523,68526,68529,68532,68535,68538,68543,68546,68549,68552,68555,68559,68564,68567,68571,68576,68579,68582,68586,68615,68618,68622,68626,68631,68635,68640,68643,68646,68649,68652,68655,68658,68661,68664,68667,68670,68673,68676,68679,68682,68686,68691,68696,68699,68703,68707,68712,68715,68719,68722,68725,68730,68735,68740,68745,68750,68753,68756,68761,68766,68770,68775,68778,68783,68786,68789,68792,68795,68800,68803,68812,68816,68821,68824,68827,68831,68834,68839,68843,68846,68852,68858,68862,68888,68891,70452,70455,70951,70954,70959,70964,70969,70973,70978,70983,70988,70992,70997,71000,71003,71006,71009,71013,71016,71021,71024,71029,71033,71038,71041,71046,71051,71056,71059,71062,71067,71072,71075,71078,71082,71085,71090,71093,71098,71101,71106,71111,71116,71119,71124,71189,71192,71203,71207,71212,71384,71388,71393,71396,71399,71402,71406,71417,71421,71424,71429,71434,71437,71440,71443,71446,71449,71451,71454,71457,71460,71465,71468,71473,71476,71480,71483,71486,71500,71504,71507,71562,71567,71570,71573,71578,71581,71585,71590,71720,71724,71729,71734,71815,71820,71824,71827,71832,71837,71843,71846,71849,71852,71856,71861,71864,71875,71879,71896,74943,74947,74950,74953,74956,74977,74981,74984,74992,74995,75000,75003,75006,75011,75016,75020,75041,75045,75050,75053,75056,75059,75062,75066,75071,75074,75078,75083,75086,75091,75094,75099,75102,75107,76310,76314,76319,76322,76327,76611],[10,53337,53333],{"id":53338},"_3web-apis",[14,53340,53341],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53343,53344],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53346,53347],{},[40,53348],{"alt":42,"src":53349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53351,53352],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53354,53355],{},"建议数组和对象使用 const 来声明",[14,53357,53358],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[71,53360,53362],{"id":53361},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[100,53364,53366],{"id":53365},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53368,53369,53372],{},[126,53370,53371],{},"document"," = HTML 文件解析后的对象化表示；",[14,53374,53375,53377],{},[126,53376,53371],{}," ≠ HTML 文件本身",[14,53379,53380,53385],{},[289,53381,53382],{},[126,53383,53384],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53387,53388,53392],{},[289,53389,53390],{},[126,53391,53371],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53394,53395],{},"document实际上为window.document的简写",[100,53397,53399],{"id":53398},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53401,53402],{},[40,53403],{"alt":42,"src":53404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53406,53407],{},[40,53408],{"alt":42,"src":53409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53411,53412],{},[40,53413],{"alt":42,"src":53414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53416,53417],{},"console.dir()",[14,53419,53420],{},"dir用来打印对象",[1146,53422,53423,53426,53429],{},[86,53424,53425],{},"任何一个标签，都是一个对象",[86,53427,53428],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[86,53430,53431],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53433,53434],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[100,53436,53438],{"id":53437},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53440,53441],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53443,53444],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53446,53447],{},[289,53448,53449],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[83,53451,53452],{},[86,53453,53454],{},"利用CSS选择器来获取标签元素",[14,53456,53457],{},[40,53458],{"alt":42,"src":53459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53461,53462],{},"里边的选择器必须必须加引号！！！",[14,53464,53465],{},"只选择第一个元素",[120,53467,53469],{"className":53068,"code":53468,"language":53070,"meta":42,"style":42},"\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",[126,53470,53471,53479,53500,53519,53527,53532,53537,53542,53550],{"__ignoreMap":42},[129,53472,53473,53475,53477],{"class":131,"line":132},[129,53474,1049],{"class":139},[129,53476,51801],{"class":51301},[129,53478,51308],{"class":139},[129,53480,53481,53483,53485,53488,53490,53493,53496,53498],{"class":131,"line":51},[129,53482,52145],{"class":139},[129,53484,51612],{"class":51301},[129,53486,53487],{"class":1977}," class",[129,53489,185],{"class":139},[129,53491,53492],{"class":244},"\"box\"",[129,53494,53495],{"class":139},">123\u003C\u002F",[129,53497,51612],{"class":51301},[129,53499,51308],{"class":139},[129,53501,53502,53504,53506,53508,53510,53512,53515,53517],{"class":131,"line":1194},[129,53503,52145],{"class":139},[129,53505,51612],{"class":51301},[129,53507,53487],{"class":1977},[129,53509,185],{"class":139},[129,53511,53492],{"class":244},[129,53513,53514],{"class":139},">456\u003C\u002F",[129,53516,51612],{"class":51301},[129,53518,51308],{"class":139},[129,53520,53521,53523,53525],{"class":131,"line":1209},[129,53522,52145],{"class":139},[129,53524,51814],{"class":51301},[129,53526,51308],{"class":139},[129,53528,53529],{"class":131,"line":1215},[129,53530,53531],{"class":139},"    \u002F\u002F 1.获取匹配的第一个元素\n",[129,53533,53534],{"class":131,"line":1229},[129,53535,53536],{"class":139},"    const box = document.querySelector('div')\n",[129,53538,53539],{"class":131,"line":1235},[129,53540,53541],{"class":139},"    console.dir(box)\n",[129,53543,53544,53546,53548],{"class":131,"line":1326},[129,53545,52418],{"class":139},[129,53547,51814],{"class":51301},[129,53549,51308],{"class":139},[129,53551,53552,53554,53556],{"class":131,"line":1332},[129,53553,51786],{"class":139},[129,53555,51801],{"class":51301},[129,53557,51308],{"class":139},[14,53559,53560],{},"只选123，不选456",[14,53562,53563],{},[40,53564],{"alt":42,"src":53565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53567,53568],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53570,53571],{},[40,53572],{"alt":42,"src":53573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53575,53576],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53578,53579],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[83,53581,53582],{"start":51},[86,53583,53584],{},"其他方法来获取标签元素",[14,53586,53587],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53589,53590],{},[40,53591],{"alt":42,"src":53592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[100,53594,53596],{"id":53595},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53598,53599],{},"设置修改DOM元素内容有两种方式：",[1146,53601,53602,53605,53608,53611],{},[86,53603,53604],{},"元素.innerText=''",[86,53606,53607],{},"元素.innerHTML=''",[86,53609,53610],{},"不写字符串输出数字也是可以的",[86,53612,53613],{},"元素.innerHtml=1",[22013,53615,53617],{"id":53616},"_3131-innertext","3.1.3.1 innerText",[14,53619,53620],{},[40,53621],{"alt":42,"src":53622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53624,53625],{},"思路：实现了修改盒子中的内容！",[14,53627,53628],{},"它只显示纯文本，不解析标签",[22013,53630,53632],{"id":53631},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53634,53635],{},[40,53636],{"alt":42,"src":53637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53639,53640],{},"相比于innerText，他的强大之处在于可以解析标签",[100,53642,53644],{"id":53643},"_314-操作元素属性","3.1.4 操作元素属性",[22013,53646,53648],{"id":53647},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53650,53651],{},[40,53652],{"alt":42,"src":53653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22013,53655,53657],{"id":53656},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53659,53660],{},[40,53661],{"alt":42,"src":53662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53664,53665],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53667,53668],{},"div.style.backgroundColor = 'hotpink'",[14,53670,53671],{},"如果按照css的写法，-表示减，就会出错",[14,53673,53674],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53676,53677],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53679,53680],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53682,53683],{},[40,53684],{"alt":42,"src":53685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53687,53688],{},[40,53689],{"alt":42,"src":53690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[83,53692,53693,53696,53699,53702,53705,53708],{},[86,53694,53695],{},"className这个方式就是修改很多样式的时候来使用的！",[86,53697,53698],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[86,53700,53701],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[86,53703,53704],{},"className为属性名，如果还用class的话就导致与关键字冲突",[86,53706,53707],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[86,53709,53710,53711,53716],{},"解析标签的时候就变为了",[51612,53712],{"className":53713},[53714,53715],"nav","box",[53717,53718],"br",{},[14,53720,53721],{},"例子：",[51612,53723],{"className":53724},[53714],[51814,53726,53727],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53729,53730],{},[40,53731],{"alt":42,"src":53732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53734,53735],{},"追加和删除类名用classList",[14,53737,53738],{},"常用于类似于开关的操作",[14,53740,53741],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53743,53744],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22013,53746,53748],{"id":53747},"_3143-牢记点","3.1.4.3 牢记点",[83,53750,53751,53754,53757,53760,53763,53766,53769,53772,53775],{},[86,53752,53753],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[86,53755,53756],{},"使用style属性操作css时不要忘记引号",[86,53758,53759],{},"使用className或者classList时也不要忘记引号",[86,53761,53762],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[86,53764,53765],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[86,53767,53768],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[86,53770,53771],{},"若： let arr=['1','2',3] arr[0]=1",[86,53773,53774],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[86,53776,53777],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[100,53779,53781],{"id":53780},"_315-操作表单元素","3.1.5 操作表单元素",[83,53783,53784],{},[86,53785,53786],{},"天生的属性",[14,53788,53789],{},[40,53790],{"alt":42,"src":53791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53793,53794],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53796,53797],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53799,53800],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53802,53803],{},[40,53804],{"alt":42,"src":53805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[120,53807,53809],{"className":50634,"code":53808,"language":50636,"meta":42,"style":42},"在复选框中如果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",[126,53810,53811,53816,53848,53853,53858,53863,53868,53872,53877,53882,53899,53911,53916],{"__ignoreMap":42},[129,53812,53813],{"class":131,"line":132},[129,53814,53815],{"class":139},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[129,53817,53818,53820,53823,53826,53828,53831,53833,53835,53837,53839,53841,53843,53846],{"class":131,"line":51},[129,53819,1049],{"class":139},[129,53821,53822],{"class":51301},"input",[129,53824,53825],{"class":1977}," type",[129,53827,185],{"class":139},[129,53829,53830],{"class":244},"\"checkbox\"",[129,53832,14935],{"class":1977},[129,53834,185],{"class":139},[129,53836,7667],{"class":244},[129,53838,14974],{"class":1977},[129,53840,185],{"class":139},[129,53842,7667],{"class":244},[129,53844,53845],{"class":1977}," checked",[129,53847,51308],{"class":139},[129,53849,53850],{"class":131,"line":1194},[129,53851,53852],{"class":139},"不选的话：\n",[129,53854,53855],{"class":131,"line":1209},[129,53856,53857],{"class":139},"const input = document.querySelector('input')\n",[129,53859,53860],{"class":131,"line":1215},[129,53861,53862],{"class":139},"input.checked=false\n",[129,53864,53865],{"class":131,"line":1229},[129,53866,53867],{"class":139},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[129,53869,53870],{"class":131,"line":1235},[129,53871,2414],{"emptyLinePlaceholder":56},[129,53873,53874],{"class":131,"line":1326},[129,53875,53876],{"class":139},"禁用按钮：\n",[129,53878,53879],{"class":131,"line":1332},[129,53880,53881],{"class":139},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[129,53883,53884,53886,53889,53892,53895,53897],{"class":131,"line":1344},[129,53885,1049],{"class":139},[129,53887,53888],{"class":51301},"button",[129,53890,53891],{"class":1977}," disabled",[129,53893,53894],{"class":139},">点击\u003C\u002F",[129,53896,53888],{"class":51301},[129,53898,51308],{"class":139},[129,53900,53901,53903,53905,53907,53909],{"class":131,"line":1626},[129,53902,1049],{"class":139},[129,53904,53888],{"class":51301},[129,53906,53894],{"class":139},[129,53908,53888],{"class":51301},[129,53910,51308],{"class":139},[129,53912,53913],{"class":131,"line":1631},[129,53914,53915],{"class":139},"const bt = document.querySelector('button')\n",[129,53917,53918],{"class":131,"line":1637},[129,53919,53920],{"class":139},"bt.disabled = false\n",[83,53922,53923],{"start":51},[86,53924,53925],{},"自定义属性",[14,53927,53928],{},[40,53929],{"alt":42,"src":53930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[120,53932,53934],{"className":53068,"code":53933,"language":53070,"meta":42,"style":42},"\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",[126,53935,53936,53944,53972,53991,54010,54029,54048,54056,54061,54066,54071,54076,54084],{"__ignoreMap":42},[129,53937,53938,53940,53942],{"class":131,"line":132},[129,53939,1049],{"class":139},[129,53941,51801],{"class":51301},[129,53943,51308],{"class":139},[129,53945,53946,53948,53950,53953,53955,53957,53960,53962,53965,53968,53970],{"class":131,"line":51},[129,53947,52145],{"class":139},[129,53949,51612],{"class":51301},[129,53951,53952],{"class":1977}," data-id",[129,53954,185],{"class":139},[129,53956,3692],{"class":244},[129,53958,53959],{"class":1977}," data-spm",[129,53961,185],{"class":139},[129,53963,53964],{"class":244},"\"我不知道\"",[129,53966,53967],{"class":139},">1\u003C\u002F",[129,53969,51612],{"class":51301},[129,53971,51308],{"class":139},[129,53973,53974,53976,53978,53980,53982,53984,53987,53989],{"class":131,"line":1194},[129,53975,52145],{"class":139},[129,53977,51612],{"class":51301},[129,53979,53952],{"class":1977},[129,53981,185],{"class":139},[129,53983,3715],{"class":244},[129,53985,53986],{"class":139},">2\u003C\u002F",[129,53988,51612],{"class":51301},[129,53990,51308],{"class":139},[129,53992,53993,53995,53997,53999,54001,54003,54006,54008],{"class":131,"line":1209},[129,53994,52145],{"class":139},[129,53996,51612],{"class":51301},[129,53998,53952],{"class":1977},[129,54000,185],{"class":139},[129,54002,3728],{"class":244},[129,54004,54005],{"class":139},">3\u003C\u002F",[129,54007,51612],{"class":51301},[129,54009,51308],{"class":139},[129,54011,54012,54014,54016,54018,54020,54022,54025,54027],{"class":131,"line":1215},[129,54013,52145],{"class":139},[129,54015,51612],{"class":51301},[129,54017,53952],{"class":1977},[129,54019,185],{"class":139},[129,54021,3741],{"class":244},[129,54023,54024],{"class":139},">4\u003C\u002F",[129,54026,51612],{"class":51301},[129,54028,51308],{"class":139},[129,54030,54031,54033,54035,54037,54039,54041,54044,54046],{"class":131,"line":1229},[129,54032,52145],{"class":139},[129,54034,51612],{"class":51301},[129,54036,53952],{"class":1977},[129,54038,185],{"class":139},[129,54040,3762],{"class":244},[129,54042,54043],{"class":139},">5\u003C\u002F",[129,54045,51612],{"class":51301},[129,54047,51308],{"class":139},[129,54049,54050,54052,54054],{"class":131,"line":1235},[129,54051,52145],{"class":139},[129,54053,51814],{"class":51301},[129,54055,51308],{"class":139},[129,54057,54058],{"class":131,"line":1326},[129,54059,54060],{"class":139},"    const one = document.querySelector('div')\n",[129,54062,54063],{"class":131,"line":1332},[129,54064,54065],{"class":139},"    console.log(one.dataset)\n",[129,54067,54068],{"class":131,"line":1344},[129,54069,54070],{"class":139},"    console.log(one.dataset.id)\n",[129,54072,54073],{"class":131,"line":1626},[129,54074,54075],{"class":139},"    console.log(one.dataset.spm)\n",[129,54077,54078,54080,54082],{"class":131,"line":1631},[129,54079,52418],{"class":139},[129,54081,51814],{"class":51301},[129,54083,51308],{"class":139},[129,54085,54086,54088,54090],{"class":131,"line":1637},[129,54087,51786],{"class":139},[129,54089,51801],{"class":51301},[129,54091,51308],{"class":139},[14,54093,54094],{},[40,54095],{"alt":42,"src":54096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54098,54099],{},"document.querySelector选择的是第一个对象（元素）",[100,54101,54103],{"id":54102},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54105,54106],{},[40,54107],{"alt":42,"src":54108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54110,54111],{},[40,54112],{"alt":42,"src":54113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54115,54116],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51814,54118,54119],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54121,54122],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51814,54124,54125],{},"\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,54127,54128],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54130,54131],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54133,54134],{},"单位为毫秒！！！",[14,54136,54137],{},"可以搭配匿名函数来用！！！",[14,54139,54140],{},"setInterval(function () {",[14,54142,54143],{},"alert('两秒执行一次')",[14,54145,54146],{},"}, 2000)",[14,54148,54149],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54151,54152],{},"function fn() {",[14,54154,54155],{},"document.write(1)",[14,54157,1085],{},[14,54159,54160],{},"setInterval(fn, 1000)",[14,54162,54163],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54165,54166],{},"setInterval('fn()', 1000)",[14,54168,54169],{},[40,54170],{"alt":42,"src":54171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22013,54173,54175],{"id":54174},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[120,54177,54179],{"className":50634,"code":54178,"language":50636,"meta":42,"style":42},"\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",[126,54180,54181,54191,54205,54209,54217,54231,54251,54263,54271,54275,54283,54320,54325,54330,54335,54343,54351,54373,54381,54386,54408,54413,54418,54429,54434,54454,54462,54477,54492,54503,54508,54518,54528,54532,54541,54545,54553,54561,54565],{"__ignoreMap":42},[129,54182,54183,54185,54187,54189],{"class":131,"line":132},[129,54184,51298],{"class":139},[129,54186,51302],{"class":51301},[129,54188,51305],{"class":1977},[129,54190,51308],{"class":139},[129,54192,54193,54195,54197,54199,54201,54203],{"class":131,"line":51},[129,54194,1049],{"class":139},[129,54196,50636],{"class":51301},[129,54198,51317],{"class":1977},[129,54200,185],{"class":139},[129,54202,51322],{"class":244},[129,54204,51308],{"class":139},[129,54206,54207],{"class":131,"line":1194},[129,54208,2414],{"emptyLinePlaceholder":56},[129,54210,54211,54213,54215],{"class":131,"line":1209},[129,54212,1049],{"class":139},[129,54214,51335],{"class":51301},[129,54216,51308],{"class":139},[129,54218,54219,54221,54223,54225,54227,54229],{"class":131,"line":1215},[129,54220,52145],{"class":139},[129,54222,51345],{"class":51301},[129,54224,51348],{"class":1977},[129,54226,185],{"class":139},[129,54228,51353],{"class":244},[129,54230,51308],{"class":139},[129,54232,54233,54235,54237,54239,54241,54243,54245,54247,54249],{"class":131,"line":1229},[129,54234,52145],{"class":139},[129,54236,51345],{"class":51301},[129,54238,14935],{"class":1977},[129,54240,185],{"class":139},[129,54242,51392],{"class":244},[129,54244,51372],{"class":1977},[129,54246,185],{"class":139},[129,54248,51399],{"class":244},[129,54250,51308],{"class":139},[129,54252,54253,54255,54257,54259,54261],{"class":131,"line":1235},[129,54254,52145],{"class":139},[129,54256,51408],{"class":51301},[129,54258,51411],{"class":139},[129,54260,51408],{"class":51301},[129,54262,51308],{"class":139},[129,54264,54265,54267,54269],{"class":131,"line":1326},[129,54266,51786],{"class":139},[129,54268,51335],{"class":51301},[129,54270,51308],{"class":139},[129,54272,54273],{"class":131,"line":1332},[129,54274,2414],{"emptyLinePlaceholder":56},[129,54276,54277,54279,54281],{"class":131,"line":1344},[129,54278,1049],{"class":139},[129,54280,51801],{"class":51301},[129,54282,51308],{"class":139},[129,54284,54285,54287,54290,54292,54294,54296,54298,54300,54302,54305,54307,54310,54313,54315,54318],{"class":131,"line":1626},[129,54286,52145],{"class":139},[129,54288,54289],{"class":51301},"textarea",[129,54291,14935],{"class":1977},[129,54293,185],{"class":139},[129,54295,7667],{"class":244},[129,54297,14974],{"class":1977},[129,54299,185],{"class":139},[129,54301,7667],{"class":244},[129,54303,54304],{"class":1977}," cols",[129,54306,185],{"class":139},[129,54308,54309],{"class":244},"\"30\"",[129,54311,54312],{"class":1977}," rows",[129,54314,185],{"class":139},[129,54316,54317],{"class":244},"\"10\"",[129,54319,51308],{"class":139},[129,54321,54322],{"class":131,"line":1631},[129,54323,54324],{"class":139},"        用户注册协议\n",[129,54326,54327],{"class":131,"line":1637},[129,54328,54329],{"class":139},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[129,54331,54332],{"class":131,"line":1642},[129,54333,54334],{"class":139},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[129,54336,54337,54339,54341],{"class":131,"line":1656},[129,54338,51777],{"class":139},[129,54340,54289],{"class":51301},[129,54342,51308],{"class":139},[129,54344,54345,54347,54349],{"class":131,"line":1661},[129,54346,52145],{"class":139},[129,54348,53717],{"class":51301},[129,54350,51308],{"class":139},[129,54352,54353,54355,54357,54359,54361,54364,54366,54369,54371],{"class":131,"line":1667},[129,54354,52145],{"class":139},[129,54356,53888],{"class":51301},[129,54358,53487],{"class":1977},[129,54360,185],{"class":139},[129,54362,54363],{"class":244},"\"btn\"",[129,54365,53891],{"class":1977},[129,54367,54368],{"class":139},">我已经阅读用户协议(5)\u003C\u002F",[129,54370,53888],{"class":51301},[129,54372,51308],{"class":139},[129,54374,54375,54377,54379],{"class":131,"line":1688},[129,54376,52145],{"class":139},[129,54378,51814],{"class":51301},[129,54380,51308],{"class":139},[129,54382,54383],{"class":131,"line":1693},[129,54384,54385],{"class":198},"    \u002F\u002F 1. 获取元素\n",[129,54387,54388,54390,54393,54395,54398,54401,54403,54406],{"class":131,"line":1707},[129,54389,11236],{"class":135},[129,54391,54392],{"class":188}," btn",[129,54394,13579],{"class":135},[129,54396,54397],{"class":139}," document.",[129,54399,54400],{"class":1977},"querySelector",[129,54402,140],{"class":139},[129,54404,54405],{"class":244},"'.btn'",[129,54407,146],{"class":139},[129,54409,54410],{"class":131,"line":1712},[129,54411,54412],{"class":198},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[129,54414,54415],{"class":131,"line":1741},[129,54416,54417],{"class":198},"    \u002F\u002F 2. 倒计时\n",[129,54419,54420,54422,54424,54426],{"class":131,"line":1746},[129,54421,52220],{"class":135},[129,54423,9453],{"class":139},[129,54425,185],{"class":135},[129,54427,54428],{"class":188}," 5\n",[129,54430,54431],{"class":131,"line":1763},[129,54432,54433],{"class":198},"    \u002F\u002F 2.1 开启定时器\n",[129,54435,54436,54438,54441,54443,54446,54448,54451],{"class":131,"line":1768},[129,54437,52220],{"class":135},[129,54439,54440],{"class":139}," n ",[129,54442,185],{"class":135},[129,54444,54445],{"class":1977}," setInterval",[129,54447,140],{"class":139},[129,54449,54450],{"class":135},"function",[129,54452,54453],{"class":139}," () {\n",[129,54455,54456,54459],{"class":131,"line":1773},[129,54457,54458],{"class":139},"      i",[129,54460,54461],{"class":135},"--\n",[129,54463,54464,54467,54469,54472,54474],{"class":131,"line":1778},[129,54465,54466],{"class":139},"      btn.innerHTML ",[129,54468,185],{"class":135},[129,54470,54471],{"class":244}," `我已经阅读用户协议(${",[129,54473,580],{"class":139},[129,54475,54476],{"class":244},"})`\n",[129,54478,54479,54482,54485,54488,54490],{"class":131,"line":1792},[129,54480,54481],{"class":135},"      if",[129,54483,54484],{"class":139}," (i ",[129,54486,54487],{"class":135},"===",[129,54489,4107],{"class":188},[129,54491,12457],{"class":139},[129,54493,54494,54497,54500],{"class":131,"line":1797},[129,54495,54496],{"class":1977},"        clearInterval",[129,54498,54499],{"class":139},"(n)  ",[129,54501,54502],{"class":198},"\u002F\u002F 关闭定时器\n",[129,54504,54505],{"class":131,"line":2591},[129,54506,54507],{"class":198},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[129,54509,54510,54513,54515],{"class":131,"line":2605},[129,54511,54512],{"class":139},"        btn.disabled ",[129,54514,185],{"class":135},[129,54516,54517],{"class":188}," false\n",[129,54519,54520,54523,54525],{"class":131,"line":2613},[129,54521,54522],{"class":139},"        btn.innerHTML ",[129,54524,185],{"class":135},[129,54526,54527],{"class":244}," '同意'\n",[129,54529,54530],{"class":131,"line":2618},[129,54531,52399],{"class":139},[129,54533,54534,54537,54539],{"class":131,"line":2624},[129,54535,54536],{"class":139},"    }, ",[129,54538,6425],{"class":188},[129,54540,146],{"class":139},[129,54542,54543],{"class":131,"line":2630},[129,54544,2414],{"emptyLinePlaceholder":56},[129,54546,54547,54549,54551],{"class":131,"line":2635},[129,54548,52418],{"class":139},[129,54550,51814],{"class":51301},[129,54552,51308],{"class":139},[129,54554,54555,54557,54559],{"class":131,"line":7963},[129,54556,51786],{"class":139},[129,54558,51801],{"class":51301},[129,54560,51308],{"class":139},[129,54562,54563],{"class":131,"line":7987},[129,54564,2414],{"emptyLinePlaceholder":56},[129,54566,54567,54569,54571],{"class":131,"line":7992},[129,54568,51786],{"class":139},[129,54570,50636],{"class":51301},[129,54572,51308],{"class":139},[14,54574,54575],{},"不要一直想着用死循环,避免死循环",[14,54577,54578,54581],{},[126,54579,54580],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22013,54583,54585],{"id":54584},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[83,54587,54588],{},[86,54589,54590],{},"法1",[120,54592,54594],{"className":50634,"code":54593,"language":50636,"meta":42,"style":42},"\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",[126,54595,54596,54606,54620,54624,54632,54646,54666,54678,54686,54692,54703,54714,54718,54722,54729,54741,54745,54749,54756,54768,54782,54795,54809,54813,54817,54824,54835,54846,54857,54869,54881,54893,54897,54901,54909,54919,54932,54944,54957,54961,54965,54972,54982,54994,55006,55017,55028,55038,55050,55062,55066,55070,55079,55091,55103,55131,55144,55148,55152,55159,55170,55174,55182,55190,55194,55202,55216,55231,55255,55263,55278,55291,55299,55320,55332,55344,55356,55368,55380,55392,55404,55413,55421,55429,55437,55449,55472,55491,55510,55529,55548,55567,55586,55606,55610,55630,55649,55669,55690,55701,55718,55728,55738,55748,55753,55758,55763,55768,55793,55806,55810,55833,55837,55845,55853,55861,55865],{"__ignoreMap":42},[129,54597,54598,54600,54602,54604],{"class":131,"line":132},[129,54599,51298],{"class":139},[129,54601,51302],{"class":51301},[129,54603,51305],{"class":1977},[129,54605,51308],{"class":139},[129,54607,54608,54610,54612,54614,54616,54618],{"class":131,"line":51},[129,54609,1049],{"class":139},[129,54611,50636],{"class":51301},[129,54613,51317],{"class":1977},[129,54615,185],{"class":139},[129,54617,51322],{"class":244},[129,54619,51308],{"class":139},[129,54621,54622],{"class":131,"line":1194},[129,54623,2414],{"emptyLinePlaceholder":56},[129,54625,54626,54628,54630],{"class":131,"line":1209},[129,54627,1049],{"class":139},[129,54629,51335],{"class":51301},[129,54631,51308],{"class":139},[129,54633,54634,54636,54638,54640,54642,54644],{"class":131,"line":1215},[129,54635,52145],{"class":139},[129,54637,51345],{"class":51301},[129,54639,51348],{"class":1977},[129,54641,185],{"class":139},[129,54643,51353],{"class":244},[129,54645,51308],{"class":139},[129,54647,54648,54650,54652,54654,54656,54658,54660,54662,54664],{"class":131,"line":1229},[129,54649,52145],{"class":139},[129,54651,51345],{"class":51301},[129,54653,14935],{"class":1977},[129,54655,185],{"class":139},[129,54657,51392],{"class":244},[129,54659,51372],{"class":1977},[129,54661,185],{"class":139},[129,54663,51399],{"class":244},[129,54665,51308],{"class":139},[129,54667,54668,54670,54672,54674,54676],{"class":131,"line":1235},[129,54669,52145],{"class":139},[129,54671,51408],{"class":51301},[129,54673,51411],{"class":139},[129,54675,51408],{"class":51301},[129,54677,51308],{"class":139},[129,54679,54680,54682,54684],{"class":131,"line":1326},[129,54681,52145],{"class":139},[129,54683,5141],{"class":51301},[129,54685,51308],{"class":139},[129,54687,54688,54690],{"class":131,"line":1332},[129,54689,6418],{"class":51301},[129,54691,15587],{"class":139},[129,54693,54694,54697,54699,54701],{"class":131,"line":1344},[129,54695,54696],{"class":188},"      padding",[129,54698,51438],{"class":139},[129,54700,331],{"class":188},[129,54702,1305],{"class":139},[129,54704,54705,54708,54710,54712],{"class":131,"line":1626},[129,54706,54707],{"class":188},"      margin",[129,54709,51438],{"class":139},[129,54711,331],{"class":188},[129,54713,1305],{"class":139},[129,54715,54716],{"class":131,"line":1631},[129,54717,2201],{"class":139},[129,54719,54720],{"class":131,"line":1637},[129,54721,2414],{"emptyLinePlaceholder":56},[129,54723,54724,54727],{"class":131,"line":1642},[129,54725,54726],{"class":51301},"    li",[129,54728,15587],{"class":139},[129,54730,54731,54734,54736,54739],{"class":131,"line":1656},[129,54732,54733],{"class":188},"      list-style",[129,54735,51438],{"class":139},[129,54737,54738],{"class":188},"none",[129,54740,1305],{"class":139},[129,54742,54743],{"class":131,"line":1661},[129,54744,2201],{"class":139},[129,54746,54747],{"class":131,"line":1667},[129,54748,2414],{"emptyLinePlaceholder":56},[129,54750,54751,54754],{"class":131,"line":1688},[129,54752,54753],{"class":1977},"    .box",[129,54755,15587],{"class":139},[129,54757,54758,54761,54763,54766],{"class":131,"line":1693},[129,54759,54760],{"class":188},"      position",[129,54762,51438],{"class":139},[129,54764,54765],{"class":188},"relative",[129,54767,1305],{"class":139},[129,54769,54770,54773,54775,54778,54780],{"class":131,"line":1707},[129,54771,54772],{"class":188},"      width",[129,54774,51438],{"class":139},[129,54776,54777],{"class":188},"976",[129,54779,51493],{"class":135},[129,54781,1305],{"class":139},[129,54783,54784,54787,54789,54791,54793],{"class":131,"line":1712},[129,54785,54786],{"class":188},"      height",[129,54788,51438],{"class":139},[129,54790,1553],{"class":188},[129,54792,51493],{"class":135},[129,54794,1305],{"class":139},[129,54796,54797,54799,54801,54803,54805,54807],{"class":131,"line":1741},[129,54798,54707],{"class":188},[129,54800,51438],{"class":139},[129,54802,450],{"class":188},[129,54804,51493],{"class":135},[129,54806,51557],{"class":188},[129,54808,1305],{"class":139},[129,54810,54811],{"class":131,"line":1746},[129,54812,2201],{"class":139},[129,54814,54815],{"class":131,"line":1763},[129,54816,2414],{"emptyLinePlaceholder":56},[129,54818,54819,54822],{"class":131,"line":1768},[129,54820,54821],{"class":1977},"    .slider-footer",[129,54823,15587],{"class":139},[129,54825,54826,54828,54830,54833],{"class":131,"line":1773},[129,54827,54760],{"class":188},[129,54829,51438],{"class":139},[129,54831,54832],{"class":188},"absolute",[129,54834,1305],{"class":139},[129,54836,54837,54840,54842,54844],{"class":131,"line":1778},[129,54838,54839],{"class":188},"      left",[129,54841,51438],{"class":139},[129,54843,331],{"class":188},[129,54845,1305],{"class":139},[129,54847,54848,54851,54853,54855],{"class":131,"line":1792},[129,54849,54850],{"class":188},"      bottom",[129,54852,51438],{"class":139},[129,54854,331],{"class":188},[129,54856,1305],{"class":139},[129,54858,54859,54861,54863,54865,54867],{"class":131,"line":1797},[129,54860,54772],{"class":188},[129,54862,51438],{"class":139},[129,54864,450],{"class":188},[129,54866,467],{"class":135},[129,54868,1305],{"class":139},[129,54870,54871,54873,54875,54877,54879],{"class":131,"line":2591},[129,54872,54786],{"class":188},[129,54874,51438],{"class":139},[129,54876,714],{"class":188},[129,54878,467],{"class":135},[129,54880,1305],{"class":139},[129,54882,54883,54886,54888,54891],{"class":131,"line":2605},[129,54884,54885],{"class":188},"      background-color",[129,54887,51438],{"class":139},[129,54889,54890],{"class":188},"skyblue",[129,54892,1305],{"class":139},[129,54894,54895],{"class":131,"line":2613},[129,54896,2201],{"class":139},[129,54898,54899],{"class":131,"line":2618},[129,54900,2414],{"emptyLinePlaceholder":56},[129,54902,54903,54905,54907],{"class":131,"line":2624},[129,54904,54821],{"class":1977},[129,54906,6840],{"class":51301},[129,54908,15587],{"class":139},[129,54910,54911,54913,54915,54917],{"class":131,"line":2630},[129,54912,54760],{"class":188},[129,54914,51438],{"class":139},[129,54916,54832],{"class":188},[129,54918,1305],{"class":139},[129,54920,54921,54924,54926,54928,54930],{"class":131,"line":2635},[129,54922,54923],{"class":188},"      font-size",[129,54925,51438],{"class":139},[129,54927,1040],{"class":188},[129,54929,51493],{"class":135},[129,54931,1305],{"class":139},[129,54933,54934,54936,54938,54940,54942],{"class":131,"line":7963},[129,54935,54839],{"class":188},[129,54937,51438],{"class":139},[129,54939,839],{"class":188},[129,54941,51493],{"class":135},[129,54943,1305],{"class":139},[129,54945,54946,54949,54951,54953,54955],{"class":131,"line":7987},[129,54947,54948],{"class":188},"      top",[129,54950,51438],{"class":139},[129,54952,458],{"class":188},[129,54954,51493],{"class":135},[129,54956,1305],{"class":139},[129,54958,54959],{"class":131,"line":7992},[129,54960,2201],{"class":139},[129,54962,54963],{"class":131,"line":7998},[129,54964,2414],{"emptyLinePlaceholder":56},[129,54966,54967,54970],{"class":131,"line":8025},[129,54968,54969],{"class":51301},"    ul",[129,54971,15587],{"class":139},[129,54973,54974,54976,54978,54980],{"class":131,"line":8030},[129,54975,54760],{"class":188},[129,54977,51438],{"class":139},[129,54979,54832],{"class":188},[129,54981,1305],{"class":139},[129,54983,54984,54986,54988,54990,54992],{"class":131,"line":8036},[129,54985,54948],{"class":188},[129,54987,51438],{"class":139},[129,54989,920],{"class":188},[129,54991,51493],{"class":135},[129,54993,1305],{"class":139},[129,54995,54996,54998,55000,55002,55004],{"class":131,"line":8048},[129,54997,54839],{"class":188},[129,54999,51438],{"class":139},[129,55001,839],{"class":188},[129,55003,51493],{"class":135},[129,55005,1305],{"class":139},[129,55007,55008,55011,55013,55015],{"class":131,"line":8060},[129,55009,55010],{"class":188},"      display",[129,55012,51438],{"class":139},[129,55014,51478],{"class":188},[129,55016,1305],{"class":139},[129,55018,55019,55022,55024,55026],{"class":131,"line":8072},[129,55020,55021],{"class":188},"      justify-content",[129,55023,51438],{"class":139},[129,55025,51669],{"class":188},[129,55027,1305],{"class":139},[129,55029,55030,55032,55034,55036],{"class":131,"line":9731},[129,55031,54760],{"class":188},[129,55033,51438],{"class":139},[129,55035,54832],{"class":188},[129,55037,1305],{"class":139},[129,55039,55040,55042,55044,55046,55048],{"class":131,"line":9756},[129,55041,54772],{"class":188},[129,55043,51438],{"class":139},[129,55045,4006],{"class":188},[129,55047,51493],{"class":135},[129,55049,1305],{"class":139},[129,55051,55052,55054,55056,55058,55060],{"class":131,"line":9779},[129,55053,54786],{"class":188},[129,55055,51438],{"class":139},[129,55057,839],{"class":188},[129,55059,51493],{"class":135},[129,55061,1305],{"class":139},[129,55063,55064],{"class":131,"line":9803},[129,55065,2201],{"class":139},[129,55067,55068],{"class":131,"line":9808},[129,55069,2414],{"emptyLinePlaceholder":56},[129,55071,55072,55074,55077],{"class":131,"line":9813},[129,55073,54969],{"class":51301},[129,55075,55076],{"class":51301}," li",[129,55078,15587],{"class":139},[129,55080,55081,55083,55085,55087,55089],{"class":131,"line":9818},[129,55082,54772],{"class":188},[129,55084,51438],{"class":139},[129,55086,839],{"class":188},[129,55088,51493],{"class":135},[129,55090,1305],{"class":139},[129,55092,55093,55095,55097,55099,55101],{"class":131,"line":9827},[129,55094,54786],{"class":188},[129,55096,51438],{"class":139},[129,55098,839],{"class":188},[129,55100,51493],{"class":135},[129,55102,1305],{"class":139},[129,55104,55105,55107,55109,55112,55114,55116,55118,55120,55122,55124,55126,55129],{"class":131,"line":9832},[129,55106,54885],{"class":188},[129,55108,51438],{"class":139},[129,55110,55111],{"class":188},"rgba",[129,55113,140],{"class":139},[129,55115,331],{"class":188},[129,55117,12450],{"class":139},[129,55119,331],{"class":188},[129,55121,12450],{"class":139},[129,55123,331],{"class":188},[129,55125,12450],{"class":139},[129,55127,55128],{"class":188},".4",[129,55130,2733],{"class":139},[129,55132,55133,55136,55138,55140,55142],{"class":131,"line":9838},[129,55134,55135],{"class":188},"      border-radius",[129,55137,51438],{"class":139},[129,55139,585],{"class":188},[129,55141,51493],{"class":135},[129,55143,1305],{"class":139},[129,55145,55146],{"class":131,"line":9859},[129,55147,2201],{"class":139},[129,55149,55150],{"class":131,"line":9865},[129,55151,2414],{"emptyLinePlaceholder":56},[129,55153,55154,55157],{"class":131,"line":9879},[129,55155,55156],{"class":1977},"    .activate",[129,55158,15587],{"class":139},[129,55160,55161,55163,55165,55168],{"class":131,"line":9885},[129,55162,54885],{"class":188},[129,55164,51438],{"class":139},[129,55166,55167],{"class":188},"#f7f7f7",[129,55169,1305],{"class":139},[129,55171,55172],{"class":131,"line":9912},[129,55173,2201],{"class":139},[129,55175,55176,55178,55180],{"class":131,"line":9921},[129,55177,52418],{"class":139},[129,55179,5141],{"class":51301},[129,55181,51308],{"class":139},[129,55183,55184,55186,55188],{"class":131,"line":9927},[129,55185,51786],{"class":139},[129,55187,51335],{"class":51301},[129,55189,51308],{"class":139},[129,55191,55192],{"class":131,"line":9935},[129,55193,2414],{"emptyLinePlaceholder":56},[129,55195,55196,55198,55200],{"class":131,"line":9940},[129,55197,1049],{"class":139},[129,55199,51801],{"class":51301},[129,55201,51308],{"class":139},[129,55203,55204,55206,55208,55210,55212,55214],{"class":131,"line":16619},[129,55205,52145],{"class":139},[129,55207,51612],{"class":51301},[129,55209,53487],{"class":1977},[129,55211,185],{"class":139},[129,55213,53492],{"class":244},[129,55215,51308],{"class":139},[129,55217,55218,55220,55222,55224,55226,55229],{"class":131,"line":16625},[129,55219,51342],{"class":139},[129,55221,51612],{"class":51301},[129,55223,53487],{"class":1977},[129,55225,185],{"class":139},[129,55227,55228],{"class":244},"\"slider-wrapper\"",[129,55230,51308],{"class":139},[129,55232,55233,55236,55238,55241,55243,55246,55249,55251,55253],{"class":131,"line":16648},[129,55234,55235],{"class":139},"      \u003C",[129,55237,40],{"class":51301},[129,55239,55240],{"class":1977}," src",[129,55242,185],{"class":139},[129,55244,55245],{"class":244},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[129,55247,55248],{"class":1977}," alt",[129,55250,185],{"class":139},[129,55252,7667],{"class":244},[129,55254,51308],{"class":139},[129,55256,55257,55259,55261],{"class":131,"line":16654},[129,55258,51777],{"class":139},[129,55260,51612],{"class":51301},[129,55262,51308],{"class":139},[129,55264,55265,55267,55269,55271,55273,55276],{"class":131,"line":16677},[129,55266,51342],{"class":139},[129,55268,51612],{"class":51301},[129,55270,53487],{"class":1977},[129,55272,185],{"class":139},[129,55274,55275],{"class":244},"\"slider-footer\"",[129,55277,51308],{"class":139},[129,55279,55280,55282,55284,55287,55289],{"class":131,"line":16691},[129,55281,55235],{"class":139},[129,55283,14],{"class":51301},[129,55285,55286],{"class":139},">对人类来说会不会太超前了?\u003C\u002F",[129,55288,14],{"class":51301},[129,55290,51308],{"class":139},[129,55292,55293,55295,55297],{"class":131,"line":16711},[129,55294,55235],{"class":139},[129,55296,1146],{"class":51301},[129,55298,51308],{"class":139},[129,55300,55301,55304,55306,55308,55310,55313,55316,55318],{"class":131,"line":16717},[129,55302,55303],{"class":139},"        \u003C",[129,55305,86],{"class":51301},[129,55307,53487],{"class":1977},[129,55309,185],{"class":139},[129,55311,55312],{"class":244},"\"activate\"",[129,55314,55315],{"class":139},">\u003C\u002F",[129,55317,86],{"class":51301},[129,55319,51308],{"class":139},[129,55321,55322,55324,55326,55328,55330],{"class":131,"line":16728},[129,55323,55303],{"class":139},[129,55325,86],{"class":51301},[129,55327,55315],{"class":139},[129,55329,86],{"class":51301},[129,55331,51308],{"class":139},[129,55333,55334,55336,55338,55340,55342],{"class":131,"line":16751},[129,55335,55303],{"class":139},[129,55337,86],{"class":51301},[129,55339,55315],{"class":139},[129,55341,86],{"class":51301},[129,55343,51308],{"class":139},[129,55345,55346,55348,55350,55352,55354],{"class":131,"line":16773},[129,55347,55303],{"class":139},[129,55349,86],{"class":51301},[129,55351,55315],{"class":139},[129,55353,86],{"class":51301},[129,55355,51308],{"class":139},[129,55357,55358,55360,55362,55364,55366],{"class":131,"line":16778},[129,55359,55303],{"class":139},[129,55361,86],{"class":51301},[129,55363,55315],{"class":139},[129,55365,86],{"class":51301},[129,55367,51308],{"class":139},[129,55369,55370,55372,55374,55376,55378],{"class":131,"line":16784},[129,55371,55303],{"class":139},[129,55373,86],{"class":51301},[129,55375,55315],{"class":139},[129,55377,86],{"class":51301},[129,55379,51308],{"class":139},[129,55381,55382,55384,55386,55388,55390],{"class":131,"line":16798},[129,55383,55303],{"class":139},[129,55385,86],{"class":51301},[129,55387,55315],{"class":139},[129,55389,86],{"class":51301},[129,55391,51308],{"class":139},[129,55393,55394,55396,55398,55400,55402],{"class":131,"line":16811},[129,55395,55303],{"class":139},[129,55397,86],{"class":51301},[129,55399,55315],{"class":139},[129,55401,86],{"class":51301},[129,55403,51308],{"class":139},[129,55405,55406,55409,55411],{"class":131,"line":16816},[129,55407,55408],{"class":139},"      \u003C\u002F",[129,55410,1146],{"class":51301},[129,55412,51308],{"class":139},[129,55414,55415,55417,55419],{"class":131,"line":16830},[129,55416,51777],{"class":139},[129,55418,51612],{"class":51301},[129,55420,51308],{"class":139},[129,55422,55423,55425,55427],{"class":131,"line":16835},[129,55424,52418],{"class":139},[129,55426,51612],{"class":51301},[129,55428,51308],{"class":139},[129,55430,55431,55433,55435],{"class":131,"line":16841},[129,55432,52145],{"class":139},[129,55434,51814],{"class":51301},[129,55436,51308],{"class":139},[129,55438,55439,55441,55444,55446],{"class":131,"line":16846},[129,55440,11236],{"class":135},[129,55442,55443],{"class":188}," arrImage",[129,55445,13579],{"class":135},[129,55447,55448],{"class":139}," [\n",[129,55450,55451,55454,55457,55460,55463,55466,55469],{"class":131,"line":16860},[129,55452,55453],{"class":139},"      { url: ",[129,55455,55456],{"class":244},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[129,55458,55459],{"class":139},", title: ",[129,55461,55462],{"class":244},"'对人类来说会不会太超前了?'",[129,55464,55465],{"class":139},", color: ",[129,55467,55468],{"class":244},"'rgba(100,67,68)'",[129,55470,55471],{"class":139}," },\n",[129,55473,55474,55476,55479,55481,55484,55486,55489],{"class":131,"line":16865},[129,55475,55453],{"class":139},[129,55477,55478],{"class":244},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[129,55480,55459],{"class":139},[129,55482,55483],{"class":244},"'开启剑与雪的黑暗传说!'",[129,55485,55465],{"class":139},[129,55487,55488],{"class":244},"'rgba(43,35,26)'",[129,55490,55471],{"class":139},[129,55492,55493,55495,55498,55500,55503,55505,55508],{"class":131,"line":16870},[129,55494,55453],{"class":139},[129,55496,55497],{"class":244},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[129,55499,55459],{"class":139},[129,55501,55502],{"class":244},"'真正的jo厨出现了!'",[129,55504,55465],{"class":139},[129,55506,55507],{"class":244},"'rgba(36,31,33)'",[129,55509,55471],{"class":139},[129,55511,55512,55514,55517,55519,55522,55524,55527],{"class":131,"line":16884},[129,55513,55453],{"class":139},[129,55515,55516],{"class":244},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[129,55518,55459],{"class":139},[129,55520,55521],{"class":244},"'李玉刚:让世界通过b站看到东方大国文化'",[129,55523,55465],{"class":139},[129,55525,55526],{"class":244},"'rgba(139,98,66)'",[129,55528,55471],{"class":139},[129,55530,55531,55533,55536,55538,55541,55543,55546],{"class":131,"line":16896},[129,55532,55453],{"class":139},[129,55534,55535],{"class":244},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[129,55537,55459],{"class":139},[129,55539,55540],{"class":244},"'快来分享你的寒假日常吧'",[129,55542,55465],{"class":139},[129,55544,55545],{"class":244},"'rgba(67,90,92)'",[129,55547,55471],{"class":139},[129,55549,55550,55552,55555,55557,55560,55562,55565],{"class":131,"line":16901},[129,55551,55453],{"class":139},[129,55553,55554],{"class":244},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[129,55556,55459],{"class":139},[129,55558,55559],{"class":244},"'哔哩哔哩小年YEAR'",[129,55561,55465],{"class":139},[129,55563,55564],{"class":244},"'rgba(166,131,143)'",[129,55566,55471],{"class":139},[129,55568,55569,55571,55574,55576,55579,55581,55584],{"class":131,"line":16914},[129,55570,55453],{"class":139},[129,55572,55573],{"class":244},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[129,55575,55459],{"class":139},[129,55577,55578],{"class":244},"'一站式解决你的电脑配置问题'",[129,55580,55465],{"class":139},[129,55582,55583],{"class":244},"'rgba(53,29,25)'",[129,55585,55471],{"class":139},[129,55587,55588,55590,55593,55595,55598,55600,55603],{"class":131,"line":16919},[129,55589,55453],{"class":139},[129,55591,55592],{"class":244},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[129,55594,55459],{"class":139},[129,55596,55597],{"class":244},"'谁不想和小猫咪贴贴呢?'",[129,55599,55465],{"class":139},[129,55601,55602],{"class":244},"'rgba(99,72,114)'",[129,55604,55605],{"class":139}," }\n",[129,55607,55608],{"class":131,"line":16924},[129,55609,53110],{"class":139},[129,55611,55612,55614,55617,55619,55621,55623,55625,55628],{"class":131,"line":16929},[129,55613,11236],{"class":135},[129,55615,55616],{"class":188}," img",[129,55618,13579],{"class":135},[129,55620,54397],{"class":139},[129,55622,54400],{"class":1977},[129,55624,140],{"class":139},[129,55626,55627],{"class":244},"'.slider-wrapper img'",[129,55629,146],{"class":139},[129,55631,55632,55634,55636,55638,55640,55642,55644,55647],{"class":131,"line":16942},[129,55633,11236],{"class":135},[129,55635,6840],{"class":188},[129,55637,13579],{"class":135},[129,55639,54397],{"class":139},[129,55641,54400],{"class":1977},[129,55643,140],{"class":139},[129,55645,55646],{"class":244},"'.slider-footer p'",[129,55648,146],{"class":139},[129,55650,55651,55653,55656,55658,55660,55662,55664,55667],{"class":131,"line":16947},[129,55652,11236],{"class":135},[129,55654,55655],{"class":188}," color",[129,55657,13579],{"class":135},[129,55659,54397],{"class":139},[129,55661,54400],{"class":1977},[129,55663,140],{"class":139},[129,55665,55666],{"class":244},"'.slider-footer'",[129,55668,146],{"class":139},[129,55670,55671,55673,55676,55678,55680,55683,55685,55688],{"class":131,"line":32634},[129,55672,11236],{"class":135},[129,55674,55675],{"class":188}," lis",[129,55677,13579],{"class":135},[129,55679,54397],{"class":139},[129,55681,55682],{"class":1977},"querySelectorAll",[129,55684,140],{"class":139},[129,55686,55687],{"class":244},"'.slider-footer ul li'",[129,55689,146],{"class":139},[129,55691,55692,55694,55696,55698],{"class":131,"line":32640},[129,55693,52220],{"class":135},[129,55695,9453],{"class":139},[129,55697,185],{"class":135},[129,55699,55700],{"class":188}," 1\n",[129,55702,55703,55705,55708,55710,55712,55714,55716],{"class":131,"line":32646},[129,55704,52220],{"class":135},[129,55706,55707],{"class":139}," timer ",[129,55709,185],{"class":135},[129,55711,54445],{"class":1977},[129,55713,140],{"class":139},[129,55715,54450],{"class":135},[129,55717,54453],{"class":139},[129,55719,55720,55723,55725],{"class":131,"line":32652},[129,55721,55722],{"class":139},"      img.src ",[129,55724,185],{"class":135},[129,55726,55727],{"class":139}," arrImage[i].url\n",[129,55729,55730,55733,55735],{"class":131,"line":32658},[129,55731,55732],{"class":139},"      p.innerHTML ",[129,55734,185],{"class":135},[129,55736,55737],{"class":139}," arrImage[i].title\n",[129,55739,55740,55743,55745],{"class":131,"line":32669},[129,55741,55742],{"class":139},"      color.style.backgroundColor ",[129,55744,185],{"class":135},[129,55746,55747],{"class":139}," arrImage[i].color\n",[129,55749,55750],{"class":131,"line":32675},[129,55751,55752],{"class":198},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[129,55754,55755],{"class":131,"line":32695},[129,55756,55757],{"class":198},"      \u002F\u002F li.classList.add('activate')\n",[129,55759,55760],{"class":131,"line":32701},[129,55761,55762],{"class":198},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[129,55764,55765],{"class":131,"line":32712},[129,55766,55767],{"class":198},"      \u002F\u002F lis[i].classList.remove('activate')\n",[129,55769,55770,55773,55775,55777,55780,55783,55786,55788,55791],{"class":131,"line":32718},[129,55771,55772],{"class":139},"      document.",[129,55774,54400],{"class":1977},[129,55776,140],{"class":139},[129,55778,55779],{"class":244},"'.activate'",[129,55781,55782],{"class":139},")?.classList.",[129,55784,55785],{"class":1977},"toggle",[129,55787,140],{"class":139},[129,55789,55790],{"class":244},"'activate'",[129,55792,146],{"class":139},[129,55794,55795,55798,55800,55802,55804],{"class":131,"line":32724},[129,55796,55797],{"class":139},"      lis[i].classList.",[129,55799,5349],{"class":1977},[129,55801,140],{"class":139},[129,55803,55790],{"class":244},[129,55805,146],{"class":139},[129,55807,55808],{"class":131,"line":32730},[129,55809,2414],{"emptyLinePlaceholder":56},[129,55811,55812,55815,55817,55819,55821,55823,55825,55827,55830],{"class":131,"line":32736},[129,55813,55814],{"class":139},"      i ",[129,55816,185],{"class":135},[129,55818,54484],{"class":139},[129,55820,620],{"class":135},[129,55822,25119],{"class":188},[129,55824,13729],{"class":139},[129,55826,467],{"class":135},[129,55828,55829],{"class":139}," arrImage.",[129,55831,55832],{"class":188},"length\n",[129,55834,55835],{"class":131,"line":32742},[129,55836,2414],{"emptyLinePlaceholder":56},[129,55838,55839,55841,55843],{"class":131,"line":32748},[129,55840,54536],{"class":139},[129,55842,6425],{"class":188},[129,55844,146],{"class":139},[129,55846,55847,55849,55851],{"class":131,"line":32754},[129,55848,52418],{"class":139},[129,55850,51814],{"class":51301},[129,55852,51308],{"class":139},[129,55854,55855,55857,55859],{"class":131,"line":32774},[129,55856,51786],{"class":139},[129,55858,51801],{"class":51301},[129,55860,51308],{"class":139},[129,55862,55863],{"class":131,"line":32780},[129,55864,2414],{"emptyLinePlaceholder":56},[129,55866,55867,55869,55871],{"class":131,"line":32796},[129,55868,51786],{"class":139},[129,55870,50636],{"class":51301},[129,55872,51308],{"class":139},[14,55874,55875],{},[40,55876],{"alt":42,"src":55877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55879,55880],{},"?.就是短路保护,确保输出正常进行",[14,55882,55883],{},"不要忘记取余%,有时候可以用",[14,55885,55886],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[83,55888,55889],{"start":51},[86,55890,55891],{},"法2",[120,55893,55895],{"className":50634,"code":55894,"language":50636,"meta":42,"style":42},"\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",[126,55896,55897,55907,55921,55925,55933,55947,55967,55979,55987,55993,56003,56013,56017,56021,56027,56037,56041,56045,56051,56061,56073,56085,56099,56103,56107,56113,56123,56133,56143,56155,56167,56177,56181,56185,56193,56203,56215,56227,56239,56243,56247,56253,56263,56275,56287,56297,56307,56317,56329,56341,56345,56349,56357,56369,56381,56407,56419,56423,56427,56433,56443,56447,56455,56463,56467,56475,56489,56503,56523,56531,56545,56557,56565,56583,56595,56607,56619,56631,56643,56655,56667,56675,56683,56691,56699,56710,56726,56742,56758,56774,56790,56806,56822,56838,56842,56847,56865,56883,56893,56898,56903,56914,56920,56935,56944,56948,56953,56962,56967,56976,56981,56986,56991,57014,57044,57048,57056,57060,57068,57076,57080],{"__ignoreMap":42},[129,55898,55899,55901,55903,55905],{"class":131,"line":132},[129,55900,51298],{"class":139},[129,55902,51302],{"class":51301},[129,55904,51305],{"class":1977},[129,55906,51308],{"class":139},[129,55908,55909,55911,55913,55915,55917,55919],{"class":131,"line":51},[129,55910,1049],{"class":139},[129,55912,50636],{"class":51301},[129,55914,51317],{"class":1977},[129,55916,185],{"class":139},[129,55918,51322],{"class":244},[129,55920,51308],{"class":139},[129,55922,55923],{"class":131,"line":1194},[129,55924,2414],{"emptyLinePlaceholder":56},[129,55926,55927,55929,55931],{"class":131,"line":1209},[129,55928,1049],{"class":139},[129,55930,51335],{"class":51301},[129,55932,51308],{"class":139},[129,55934,55935,55937,55939,55941,55943,55945],{"class":131,"line":1215},[129,55936,52145],{"class":139},[129,55938,51345],{"class":51301},[129,55940,51348],{"class":1977},[129,55942,185],{"class":139},[129,55944,51353],{"class":244},[129,55946,51308],{"class":139},[129,55948,55949,55951,55953,55955,55957,55959,55961,55963,55965],{"class":131,"line":1229},[129,55950,52145],{"class":139},[129,55952,51345],{"class":51301},[129,55954,14935],{"class":1977},[129,55956,185],{"class":139},[129,55958,51392],{"class":244},[129,55960,51372],{"class":1977},[129,55962,185],{"class":139},[129,55964,51399],{"class":244},[129,55966,51308],{"class":139},[129,55968,55969,55971,55973,55975,55977],{"class":131,"line":1235},[129,55970,52145],{"class":139},[129,55972,51408],{"class":51301},[129,55974,51411],{"class":139},[129,55976,51408],{"class":51301},[129,55978,51308],{"class":139},[129,55980,55981,55983,55985],{"class":131,"line":1326},[129,55982,52145],{"class":139},[129,55984,5141],{"class":51301},[129,55986,51308],{"class":139},[129,55988,55989,55991],{"class":131,"line":1332},[129,55990,6418],{"class":51301},[129,55992,15587],{"class":139},[129,55994,55995,55997,55999,56001],{"class":131,"line":1344},[129,55996,54696],{"class":188},[129,55998,51438],{"class":139},[129,56000,331],{"class":188},[129,56002,1305],{"class":139},[129,56004,56005,56007,56009,56011],{"class":131,"line":1626},[129,56006,54707],{"class":188},[129,56008,51438],{"class":139},[129,56010,331],{"class":188},[129,56012,1305],{"class":139},[129,56014,56015],{"class":131,"line":1631},[129,56016,2201],{"class":139},[129,56018,56019],{"class":131,"line":1637},[129,56020,2414],{"emptyLinePlaceholder":56},[129,56022,56023,56025],{"class":131,"line":1642},[129,56024,54726],{"class":51301},[129,56026,15587],{"class":139},[129,56028,56029,56031,56033,56035],{"class":131,"line":1656},[129,56030,54733],{"class":188},[129,56032,51438],{"class":139},[129,56034,54738],{"class":188},[129,56036,1305],{"class":139},[129,56038,56039],{"class":131,"line":1661},[129,56040,2201],{"class":139},[129,56042,56043],{"class":131,"line":1667},[129,56044,2414],{"emptyLinePlaceholder":56},[129,56046,56047,56049],{"class":131,"line":1688},[129,56048,54753],{"class":1977},[129,56050,15587],{"class":139},[129,56052,56053,56055,56057,56059],{"class":131,"line":1693},[129,56054,54760],{"class":188},[129,56056,51438],{"class":139},[129,56058,54765],{"class":188},[129,56060,1305],{"class":139},[129,56062,56063,56065,56067,56069,56071],{"class":131,"line":1707},[129,56064,54772],{"class":188},[129,56066,51438],{"class":139},[129,56068,54777],{"class":188},[129,56070,51493],{"class":135},[129,56072,1305],{"class":139},[129,56074,56075,56077,56079,56081,56083],{"class":131,"line":1712},[129,56076,54786],{"class":188},[129,56078,51438],{"class":139},[129,56080,1553],{"class":188},[129,56082,51493],{"class":135},[129,56084,1305],{"class":139},[129,56086,56087,56089,56091,56093,56095,56097],{"class":131,"line":1741},[129,56088,54707],{"class":188},[129,56090,51438],{"class":139},[129,56092,450],{"class":188},[129,56094,51493],{"class":135},[129,56096,51557],{"class":188},[129,56098,1305],{"class":139},[129,56100,56101],{"class":131,"line":1746},[129,56102,2201],{"class":139},[129,56104,56105],{"class":131,"line":1763},[129,56106,2414],{"emptyLinePlaceholder":56},[129,56108,56109,56111],{"class":131,"line":1768},[129,56110,54821],{"class":1977},[129,56112,15587],{"class":139},[129,56114,56115,56117,56119,56121],{"class":131,"line":1773},[129,56116,54760],{"class":188},[129,56118,51438],{"class":139},[129,56120,54832],{"class":188},[129,56122,1305],{"class":139},[129,56124,56125,56127,56129,56131],{"class":131,"line":1778},[129,56126,54839],{"class":188},[129,56128,51438],{"class":139},[129,56130,331],{"class":188},[129,56132,1305],{"class":139},[129,56134,56135,56137,56139,56141],{"class":131,"line":1792},[129,56136,54850],{"class":188},[129,56138,51438],{"class":139},[129,56140,331],{"class":188},[129,56142,1305],{"class":139},[129,56144,56145,56147,56149,56151,56153],{"class":131,"line":1797},[129,56146,54772],{"class":188},[129,56148,51438],{"class":139},[129,56150,450],{"class":188},[129,56152,467],{"class":135},[129,56154,1305],{"class":139},[129,56156,56157,56159,56161,56163,56165],{"class":131,"line":2591},[129,56158,54786],{"class":188},[129,56160,51438],{"class":139},[129,56162,714],{"class":188},[129,56164,467],{"class":135},[129,56166,1305],{"class":139},[129,56168,56169,56171,56173,56175],{"class":131,"line":2605},[129,56170,54885],{"class":188},[129,56172,51438],{"class":139},[129,56174,54890],{"class":188},[129,56176,1305],{"class":139},[129,56178,56179],{"class":131,"line":2613},[129,56180,2201],{"class":139},[129,56182,56183],{"class":131,"line":2618},[129,56184,2414],{"emptyLinePlaceholder":56},[129,56186,56187,56189,56191],{"class":131,"line":2624},[129,56188,54821],{"class":1977},[129,56190,6840],{"class":51301},[129,56192,15587],{"class":139},[129,56194,56195,56197,56199,56201],{"class":131,"line":2630},[129,56196,54760],{"class":188},[129,56198,51438],{"class":139},[129,56200,54832],{"class":188},[129,56202,1305],{"class":139},[129,56204,56205,56207,56209,56211,56213],{"class":131,"line":2635},[129,56206,54923],{"class":188},[129,56208,51438],{"class":139},[129,56210,1040],{"class":188},[129,56212,51493],{"class":135},[129,56214,1305],{"class":139},[129,56216,56217,56219,56221,56223,56225],{"class":131,"line":7963},[129,56218,54839],{"class":188},[129,56220,51438],{"class":139},[129,56222,839],{"class":188},[129,56224,51493],{"class":135},[129,56226,1305],{"class":139},[129,56228,56229,56231,56233,56235,56237],{"class":131,"line":7987},[129,56230,54948],{"class":188},[129,56232,51438],{"class":139},[129,56234,458],{"class":188},[129,56236,51493],{"class":135},[129,56238,1305],{"class":139},[129,56240,56241],{"class":131,"line":7992},[129,56242,2201],{"class":139},[129,56244,56245],{"class":131,"line":7998},[129,56246,2414],{"emptyLinePlaceholder":56},[129,56248,56249,56251],{"class":131,"line":8025},[129,56250,54969],{"class":51301},[129,56252,15587],{"class":139},[129,56254,56255,56257,56259,56261],{"class":131,"line":8030},[129,56256,54760],{"class":188},[129,56258,51438],{"class":139},[129,56260,54832],{"class":188},[129,56262,1305],{"class":139},[129,56264,56265,56267,56269,56271,56273],{"class":131,"line":8036},[129,56266,54948],{"class":188},[129,56268,51438],{"class":139},[129,56270,920],{"class":188},[129,56272,51493],{"class":135},[129,56274,1305],{"class":139},[129,56276,56277,56279,56281,56283,56285],{"class":131,"line":8048},[129,56278,54839],{"class":188},[129,56280,51438],{"class":139},[129,56282,839],{"class":188},[129,56284,51493],{"class":135},[129,56286,1305],{"class":139},[129,56288,56289,56291,56293,56295],{"class":131,"line":8060},[129,56290,55010],{"class":188},[129,56292,51438],{"class":139},[129,56294,51478],{"class":188},[129,56296,1305],{"class":139},[129,56298,56299,56301,56303,56305],{"class":131,"line":8072},[129,56300,55021],{"class":188},[129,56302,51438],{"class":139},[129,56304,51669],{"class":188},[129,56306,1305],{"class":139},[129,56308,56309,56311,56313,56315],{"class":131,"line":9731},[129,56310,54760],{"class":188},[129,56312,51438],{"class":139},[129,56314,54832],{"class":188},[129,56316,1305],{"class":139},[129,56318,56319,56321,56323,56325,56327],{"class":131,"line":9756},[129,56320,54772],{"class":188},[129,56322,51438],{"class":139},[129,56324,4006],{"class":188},[129,56326,51493],{"class":135},[129,56328,1305],{"class":139},[129,56330,56331,56333,56335,56337,56339],{"class":131,"line":9779},[129,56332,54786],{"class":188},[129,56334,51438],{"class":139},[129,56336,839],{"class":188},[129,56338,51493],{"class":135},[129,56340,1305],{"class":139},[129,56342,56343],{"class":131,"line":9803},[129,56344,2201],{"class":139},[129,56346,56347],{"class":131,"line":9808},[129,56348,2414],{"emptyLinePlaceholder":56},[129,56350,56351,56353,56355],{"class":131,"line":9813},[129,56352,54969],{"class":51301},[129,56354,55076],{"class":51301},[129,56356,15587],{"class":139},[129,56358,56359,56361,56363,56365,56367],{"class":131,"line":9818},[129,56360,54772],{"class":188},[129,56362,51438],{"class":139},[129,56364,839],{"class":188},[129,56366,51493],{"class":135},[129,56368,1305],{"class":139},[129,56370,56371,56373,56375,56377,56379],{"class":131,"line":9827},[129,56372,54786],{"class":188},[129,56374,51438],{"class":139},[129,56376,839],{"class":188},[129,56378,51493],{"class":135},[129,56380,1305],{"class":139},[129,56382,56383,56385,56387,56389,56391,56393,56395,56397,56399,56401,56403,56405],{"class":131,"line":9832},[129,56384,54885],{"class":188},[129,56386,51438],{"class":139},[129,56388,55111],{"class":188},[129,56390,140],{"class":139},[129,56392,331],{"class":188},[129,56394,12450],{"class":139},[129,56396,331],{"class":188},[129,56398,12450],{"class":139},[129,56400,331],{"class":188},[129,56402,12450],{"class":139},[129,56404,55128],{"class":188},[129,56406,2733],{"class":139},[129,56408,56409,56411,56413,56415,56417],{"class":131,"line":9838},[129,56410,55135],{"class":188},[129,56412,51438],{"class":139},[129,56414,585],{"class":188},[129,56416,51493],{"class":135},[129,56418,1305],{"class":139},[129,56420,56421],{"class":131,"line":9859},[129,56422,2201],{"class":139},[129,56424,56425],{"class":131,"line":9865},[129,56426,2414],{"emptyLinePlaceholder":56},[129,56428,56429,56431],{"class":131,"line":9879},[129,56430,55156],{"class":1977},[129,56432,15587],{"class":139},[129,56434,56435,56437,56439,56441],{"class":131,"line":9885},[129,56436,54885],{"class":188},[129,56438,51438],{"class":139},[129,56440,55167],{"class":188},[129,56442,1305],{"class":139},[129,56444,56445],{"class":131,"line":9912},[129,56446,2201],{"class":139},[129,56448,56449,56451,56453],{"class":131,"line":9921},[129,56450,52418],{"class":139},[129,56452,5141],{"class":51301},[129,56454,51308],{"class":139},[129,56456,56457,56459,56461],{"class":131,"line":9927},[129,56458,51786],{"class":139},[129,56460,51335],{"class":51301},[129,56462,51308],{"class":139},[129,56464,56465],{"class":131,"line":9935},[129,56466,2414],{"emptyLinePlaceholder":56},[129,56468,56469,56471,56473],{"class":131,"line":9940},[129,56470,1049],{"class":139},[129,56472,51801],{"class":51301},[129,56474,51308],{"class":139},[129,56476,56477,56479,56481,56483,56485,56487],{"class":131,"line":16619},[129,56478,52145],{"class":139},[129,56480,51612],{"class":51301},[129,56482,53487],{"class":1977},[129,56484,185],{"class":139},[129,56486,53492],{"class":244},[129,56488,51308],{"class":139},[129,56490,56491,56493,56495,56497,56499,56501],{"class":131,"line":16625},[129,56492,51342],{"class":139},[129,56494,51612],{"class":51301},[129,56496,53487],{"class":1977},[129,56498,185],{"class":139},[129,56500,55228],{"class":244},[129,56502,51308],{"class":139},[129,56504,56505,56507,56509,56511,56513,56515,56517,56519,56521],{"class":131,"line":16648},[129,56506,55235],{"class":139},[129,56508,40],{"class":51301},[129,56510,55240],{"class":1977},[129,56512,185],{"class":139},[129,56514,55245],{"class":244},[129,56516,55248],{"class":1977},[129,56518,185],{"class":139},[129,56520,7667],{"class":244},[129,56522,51308],{"class":139},[129,56524,56525,56527,56529],{"class":131,"line":16654},[129,56526,51777],{"class":139},[129,56528,51612],{"class":51301},[129,56530,51308],{"class":139},[129,56532,56533,56535,56537,56539,56541,56543],{"class":131,"line":16677},[129,56534,51342],{"class":139},[129,56536,51612],{"class":51301},[129,56538,53487],{"class":1977},[129,56540,185],{"class":139},[129,56542,55275],{"class":244},[129,56544,51308],{"class":139},[129,56546,56547,56549,56551,56553,56555],{"class":131,"line":16691},[129,56548,55235],{"class":139},[129,56550,14],{"class":51301},[129,56552,55286],{"class":139},[129,56554,14],{"class":51301},[129,56556,51308],{"class":139},[129,56558,56559,56561,56563],{"class":131,"line":16711},[129,56560,55235],{"class":139},[129,56562,1146],{"class":51301},[129,56564,51308],{"class":139},[129,56566,56567,56569,56571,56573,56575,56577,56579,56581],{"class":131,"line":16717},[129,56568,55303],{"class":139},[129,56570,86],{"class":51301},[129,56572,53487],{"class":1977},[129,56574,185],{"class":139},[129,56576,55312],{"class":244},[129,56578,55315],{"class":139},[129,56580,86],{"class":51301},[129,56582,51308],{"class":139},[129,56584,56585,56587,56589,56591,56593],{"class":131,"line":16728},[129,56586,55303],{"class":139},[129,56588,86],{"class":51301},[129,56590,55315],{"class":139},[129,56592,86],{"class":51301},[129,56594,51308],{"class":139},[129,56596,56597,56599,56601,56603,56605],{"class":131,"line":16751},[129,56598,55303],{"class":139},[129,56600,86],{"class":51301},[129,56602,55315],{"class":139},[129,56604,86],{"class":51301},[129,56606,51308],{"class":139},[129,56608,56609,56611,56613,56615,56617],{"class":131,"line":16773},[129,56610,55303],{"class":139},[129,56612,86],{"class":51301},[129,56614,55315],{"class":139},[129,56616,86],{"class":51301},[129,56618,51308],{"class":139},[129,56620,56621,56623,56625,56627,56629],{"class":131,"line":16778},[129,56622,55303],{"class":139},[129,56624,86],{"class":51301},[129,56626,55315],{"class":139},[129,56628,86],{"class":51301},[129,56630,51308],{"class":139},[129,56632,56633,56635,56637,56639,56641],{"class":131,"line":16784},[129,56634,55303],{"class":139},[129,56636,86],{"class":51301},[129,56638,55315],{"class":139},[129,56640,86],{"class":51301},[129,56642,51308],{"class":139},[129,56644,56645,56647,56649,56651,56653],{"class":131,"line":16798},[129,56646,55303],{"class":139},[129,56648,86],{"class":51301},[129,56650,55315],{"class":139},[129,56652,86],{"class":51301},[129,56654,51308],{"class":139},[129,56656,56657,56659,56661,56663,56665],{"class":131,"line":16811},[129,56658,55303],{"class":139},[129,56660,86],{"class":51301},[129,56662,55315],{"class":139},[129,56664,86],{"class":51301},[129,56666,51308],{"class":139},[129,56668,56669,56671,56673],{"class":131,"line":16816},[129,56670,55408],{"class":139},[129,56672,1146],{"class":51301},[129,56674,51308],{"class":139},[129,56676,56677,56679,56681],{"class":131,"line":16830},[129,56678,51777],{"class":139},[129,56680,51612],{"class":51301},[129,56682,51308],{"class":139},[129,56684,56685,56687,56689],{"class":131,"line":16835},[129,56686,52418],{"class":139},[129,56688,51612],{"class":51301},[129,56690,51308],{"class":139},[129,56692,56693,56695,56697],{"class":131,"line":16841},[129,56694,52145],{"class":139},[129,56696,51814],{"class":51301},[129,56698,51308],{"class":139},[129,56700,56701,56703,56706,56708],{"class":131,"line":16846},[129,56702,11236],{"class":135},[129,56704,56705],{"class":188}," sliderData",[129,56707,13579],{"class":135},[129,56709,55448],{"class":139},[129,56711,56712,56714,56716,56718,56720,56722,56724],{"class":131,"line":16860},[129,56713,55453],{"class":139},[129,56715,55456],{"class":244},[129,56717,55459],{"class":139},[129,56719,55462],{"class":244},[129,56721,55465],{"class":139},[129,56723,55468],{"class":244},[129,56725,55471],{"class":139},[129,56727,56728,56730,56732,56734,56736,56738,56740],{"class":131,"line":16865},[129,56729,55453],{"class":139},[129,56731,55478],{"class":244},[129,56733,55459],{"class":139},[129,56735,55483],{"class":244},[129,56737,55465],{"class":139},[129,56739,55488],{"class":244},[129,56741,55471],{"class":139},[129,56743,56744,56746,56748,56750,56752,56754,56756],{"class":131,"line":16870},[129,56745,55453],{"class":139},[129,56747,55497],{"class":244},[129,56749,55459],{"class":139},[129,56751,55502],{"class":244},[129,56753,55465],{"class":139},[129,56755,55507],{"class":244},[129,56757,55471],{"class":139},[129,56759,56760,56762,56764,56766,56768,56770,56772],{"class":131,"line":16884},[129,56761,55453],{"class":139},[129,56763,55516],{"class":244},[129,56765,55459],{"class":139},[129,56767,55521],{"class":244},[129,56769,55465],{"class":139},[129,56771,55526],{"class":244},[129,56773,55471],{"class":139},[129,56775,56776,56778,56780,56782,56784,56786,56788],{"class":131,"line":16896},[129,56777,55453],{"class":139},[129,56779,55535],{"class":244},[129,56781,55459],{"class":139},[129,56783,55540],{"class":244},[129,56785,55465],{"class":139},[129,56787,55545],{"class":244},[129,56789,55471],{"class":139},[129,56791,56792,56794,56796,56798,56800,56802,56804],{"class":131,"line":16901},[129,56793,55453],{"class":139},[129,56795,55554],{"class":244},[129,56797,55459],{"class":139},[129,56799,55559],{"class":244},[129,56801,55465],{"class":139},[129,56803,55564],{"class":244},[129,56805,55471],{"class":139},[129,56807,56808,56810,56812,56814,56816,56818,56820],{"class":131,"line":16914},[129,56809,55453],{"class":139},[129,56811,55573],{"class":244},[129,56813,55459],{"class":139},[129,56815,55578],{"class":244},[129,56817,55465],{"class":139},[129,56819,55583],{"class":244},[129,56821,55471],{"class":139},[129,56823,56824,56826,56828,56830,56832,56834,56836],{"class":131,"line":16919},[129,56825,55453],{"class":139},[129,56827,55592],{"class":244},[129,56829,55459],{"class":139},[129,56831,55597],{"class":244},[129,56833,55465],{"class":139},[129,56835,55602],{"class":244},[129,56837,55605],{"class":139},[129,56839,56840],{"class":131,"line":16924},[129,56841,53110],{"class":139},[129,56843,56844],{"class":131,"line":16929},[129,56845,56846],{"class":198},"    \u002F\u002F 1.获取元素\n",[129,56848,56849,56851,56853,56855,56857,56859,56861,56863],{"class":131,"line":16942},[129,56850,11236],{"class":135},[129,56852,55616],{"class":188},[129,56854,13579],{"class":135},[129,56856,54397],{"class":139},[129,56858,54400],{"class":1977},[129,56860,140],{"class":139},[129,56862,55627],{"class":244},[129,56864,146],{"class":139},[129,56866,56867,56869,56871,56873,56875,56877,56879,56881],{"class":131,"line":16947},[129,56868,11236],{"class":135},[129,56870,6840],{"class":188},[129,56872,13579],{"class":135},[129,56874,54397],{"class":139},[129,56876,54400],{"class":1977},[129,56878,140],{"class":139},[129,56880,55646],{"class":244},[129,56882,146],{"class":139},[129,56884,56885,56887,56889,56891],{"class":131,"line":32634},[129,56886,52220],{"class":135},[129,56888,9453],{"class":139},[129,56890,185],{"class":135},[129,56892,47334],{"class":188},[129,56894,56895],{"class":131,"line":32640},[129,56896,56897],{"class":198},"    \u002F\u002F 2.开启定时器\n",[129,56899,56900],{"class":131,"line":32646},[129,56901,56902],{"class":198},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[129,56904,56905,56908,56910,56912],{"class":131,"line":32652},[129,56906,56907],{"class":1977},"    setInterval",[129,56909,140],{"class":139},[129,56911,54450],{"class":135},[129,56913,54453],{"class":139},[129,56915,56916,56918],{"class":131,"line":32658},[129,56917,54458],{"class":139},[129,56919,2716],{"class":135},[129,56921,56922,56924,56926,56928,56931,56933],{"class":131,"line":32669},[129,56923,54481],{"class":135},[129,56925,54484],{"class":139},[129,56927,1724],{"class":135},[129,56929,56930],{"class":139}," sliderData.",[129,56932,51969],{"class":188},[129,56934,12457],{"class":139},[129,56936,56937,56940,56942],{"class":131,"line":32675},[129,56938,56939],{"class":139},"        i ",[129,56941,185],{"class":135},[129,56943,47334],{"class":188},[129,56945,56946],{"class":131,"line":32695},[129,56947,52399],{"class":139},[129,56949,56950],{"class":131,"line":32701},[129,56951,56952],{"class":198},"      \u002F\u002F 更换图片路径\n",[129,56954,56955,56957,56959],{"class":131,"line":32712},[129,56956,55722],{"class":139},[129,56958,185],{"class":135},[129,56960,56961],{"class":139}," sliderData[i].url\n",[129,56963,56964],{"class":131,"line":32718},[129,56965,56966],{"class":198},"      \u002F\u002F 把文字写到p里面\n",[129,56968,56969,56971,56973],{"class":131,"line":32724},[129,56970,55732],{"class":139},[129,56972,185],{"class":135},[129,56974,56975],{"class":139}," sliderData[i].title\n",[129,56977,56978],{"class":131,"line":32730},[129,56979,56980],{"class":198},"      \u002F\u002F 小圆点\n",[129,56982,56983],{"class":131,"line":32736},[129,56984,56985],{"class":198},"      \u002F\u002F 先删除以前的active\n",[129,56987,56988],{"class":131,"line":32742},[129,56989,56990],{"class":198},"      \u002F\u002F 只让当前li添加active\n",[129,56992,56993,56995,56997,56999,57002,57005,57008,57010,57012],{"class":131,"line":32748},[129,56994,55772],{"class":139},[129,56996,54400],{"class":1977},[129,56998,140],{"class":139},[129,57000,57001],{"class":244},"'.slider-footer .activate'",[129,57003,57004],{"class":139},").classList.",[129,57006,57007],{"class":1977},"remove",[129,57009,140],{"class":139},[129,57011,55790],{"class":244},[129,57013,146],{"class":139},[129,57015,57016,57018,57020,57022,57025,57027,57029,57031,57034,57036,57038,57040,57042],{"class":131,"line":32754},[129,57017,55772],{"class":139},[129,57019,54400],{"class":1977},[129,57021,140],{"class":139},[129,57023,57024],{"class":244},"`.slider-footer ul li:nth-child(${",[129,57026,580],{"class":139},[129,57028,45567],{"class":135},[129,57030,25119],{"class":188},[129,57032,57033],{"class":244},"})`",[129,57035,57004],{"class":139},[129,57037,5349],{"class":1977},[129,57039,140],{"class":139},[129,57041,55790],{"class":244},[129,57043,146],{"class":139},[129,57045,57046],{"class":131,"line":32774},[129,57047,2414],{"emptyLinePlaceholder":56},[129,57049,57050,57052,57054],{"class":131,"line":32780},[129,57051,54536],{"class":139},[129,57053,6425],{"class":188},[129,57055,146],{"class":139},[129,57057,57058],{"class":131,"line":32796},[129,57059,2414],{"emptyLinePlaceholder":56},[129,57061,57062,57064,57066],{"class":131,"line":32802},[129,57063,52418],{"class":139},[129,57065,51814],{"class":51301},[129,57067,51308],{"class":139},[129,57069,57070,57072,57074],{"class":131,"line":32816},[129,57071,51786],{"class":139},[129,57073,51801],{"class":51301},[129,57075,51308],{"class":139},[129,57077,57078],{"class":131,"line":32822},[129,57079,2414],{"emptyLinePlaceholder":56},[129,57081,57082,57084,57086],{"class":131,"line":32837},[129,57083,51786],{"class":139},[129,57085,50636],{"class":51301},[129,57087,51308],{"class":139},[100,57089,57091],{"id":57090},"_317-重要知识点","3.1.7 重要知识点",[14,57093,57094,57095],{},"浏览器在渲染文本时， ",[289,57096,57097],{},"没有空格或换行符就没有“断行点”",[14,57099,57100],{},[40,57101],{"alt":42,"src":57102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57104,57105],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57107,57108],{},[40,57109],{"alt":42,"src":57110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57112,57113],{},[40,57114],{"alt":42,"src":57115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[71,57117,57119],{"id":57118},"_32-dom事件基础","3.2 DOM事件基础",[100,57121,57123],{"id":57122},"_321-事件监听","3.2.1 事件监听",[14,57125,57126],{},[40,57127],{"alt":42,"src":57128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57130,57131],{},"事件监听有响应的发生",[14,57133,57134],{},[40,57135],{"alt":42,"src":57136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57138,57139],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57141,57142],{},"对于有名函数,要执行的函数名后边不要加()",[100,57144,57146],{"id":57145},"_322-随机点名案例","3.2.2 随机点名案例",[120,57148,57150],{"className":50634,"code":57149,"language":50636,"meta":42,"style":42},"\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",[126,57151,57152,57162,57176,57180,57188,57202,57222,57234,57242,57248,57258,57268,57272,57276,57283,57294,57298,57302,57308,57320,57334,57344,57356,57369,57373,57377,57384,57388,57401,57413,57425,57429,57433,57437,57444,57454,57458,57462,57471,57483,57495,57510,57514,57522,57530,57534,57542,57555,57569,57582,57602,57610,57625,57645,57665,57673,57677,57685,57690,57726,57746,57751,57770,57775,57786,57791,57802,57807,57826,57841,57846,57872,57882,57891,57896,57912,57917,57922,57927,57942,57946,57950,57955,57974,57991,57999,58004,58019,58023,58027,58035,58043,58047],{"__ignoreMap":42},[129,57153,57154,57156,57158,57160],{"class":131,"line":132},[129,57155,51298],{"class":139},[129,57157,51302],{"class":51301},[129,57159,51305],{"class":1977},[129,57161,51308],{"class":139},[129,57163,57164,57166,57168,57170,57172,57174],{"class":131,"line":51},[129,57165,1049],{"class":139},[129,57167,50636],{"class":51301},[129,57169,51317],{"class":1977},[129,57171,185],{"class":139},[129,57173,51322],{"class":244},[129,57175,51308],{"class":139},[129,57177,57178],{"class":131,"line":1194},[129,57179,2414],{"emptyLinePlaceholder":56},[129,57181,57182,57184,57186],{"class":131,"line":1209},[129,57183,1049],{"class":139},[129,57185,51335],{"class":51301},[129,57187,51308],{"class":139},[129,57189,57190,57192,57194,57196,57198,57200],{"class":131,"line":1215},[129,57191,52145],{"class":139},[129,57193,51345],{"class":51301},[129,57195,51348],{"class":1977},[129,57197,185],{"class":139},[129,57199,51353],{"class":244},[129,57201,51308],{"class":139},[129,57203,57204,57206,57208,57210,57212,57214,57216,57218,57220],{"class":131,"line":1229},[129,57205,52145],{"class":139},[129,57207,51345],{"class":51301},[129,57209,14935],{"class":1977},[129,57211,185],{"class":139},[129,57213,51392],{"class":244},[129,57215,51372],{"class":1977},[129,57217,185],{"class":139},[129,57219,51399],{"class":244},[129,57221,51308],{"class":139},[129,57223,57224,57226,57228,57230,57232],{"class":131,"line":1235},[129,57225,52145],{"class":139},[129,57227,51408],{"class":51301},[129,57229,51411],{"class":139},[129,57231,51408],{"class":51301},[129,57233,51308],{"class":139},[129,57235,57236,57238,57240],{"class":131,"line":1326},[129,57237,52145],{"class":139},[129,57239,5141],{"class":51301},[129,57241,51308],{"class":139},[129,57243,57244,57246],{"class":131,"line":1332},[129,57245,6418],{"class":51301},[129,57247,15587],{"class":139},[129,57249,57250,57252,57254,57256],{"class":131,"line":1344},[129,57251,54707],{"class":188},[129,57253,51438],{"class":139},[129,57255,331],{"class":188},[129,57257,1305],{"class":139},[129,57259,57260,57262,57264,57266],{"class":131,"line":1626},[129,57261,54696],{"class":188},[129,57263,51438],{"class":139},[129,57265,331],{"class":188},[129,57267,1305],{"class":139},[129,57269,57270],{"class":131,"line":1631},[129,57271,2201],{"class":139},[129,57273,57274],{"class":131,"line":1637},[129,57275,2414],{"emptyLinePlaceholder":56},[129,57277,57278,57281],{"class":131,"line":1642},[129,57279,57280],{"class":51301},"    h2",[129,57282,15587],{"class":139},[129,57284,57285,57288,57290,57292],{"class":131,"line":1656},[129,57286,57287],{"class":188},"      text-align",[129,57289,51438],{"class":139},[129,57291,51593],{"class":188},[129,57293,1305],{"class":139},[129,57295,57296],{"class":131,"line":1661},[129,57297,2201],{"class":139},[129,57299,57300],{"class":131,"line":1667},[129,57301,2414],{"emptyLinePlaceholder":56},[129,57303,57304,57306],{"class":131,"line":1688},[129,57305,54753],{"class":1977},[129,57307,15587],{"class":139},[129,57309,57310,57312,57314,57316,57318],{"class":131,"line":1693},[129,57311,54772],{"class":188},[129,57313,51438],{"class":139},[129,57315,1553],{"class":188},[129,57317,51493],{"class":135},[129,57319,1305],{"class":139},[129,57321,57322,57324,57326,57328,57330,57332],{"class":131,"line":1707},[129,57323,54707],{"class":188},[129,57325,51438],{"class":139},[129,57327,795],{"class":188},[129,57329,51493],{"class":135},[129,57331,51557],{"class":188},[129,57333,1305],{"class":139},[129,57335,57336,57338,57340,57342],{"class":131,"line":1712},[129,57337,55010],{"class":188},[129,57339,51438],{"class":139},[129,57341,51478],{"class":188},[129,57343,1305],{"class":139},[129,57345,57346,57348,57350,57352,57354],{"class":131,"line":1741},[129,57347,54923],{"class":188},[129,57349,51438],{"class":139},[129,57351,964],{"class":188},[129,57353,51493],{"class":135},[129,57355,1305],{"class":139},[129,57357,57358,57361,57363,57365,57367],{"class":131,"line":1746},[129,57359,57360],{"class":188},"      line-height",[129,57362,51438],{"class":139},[129,57364,540],{"class":188},[129,57366,51493],{"class":135},[129,57368,1305],{"class":139},[129,57370,57371],{"class":131,"line":1763},[129,57372,2201],{"class":139},[129,57374,57375],{"class":131,"line":1768},[129,57376,2414],{"emptyLinePlaceholder":56},[129,57378,57379,57382],{"class":131,"line":1773},[129,57380,57381],{"class":1977},"    .qs",[129,57383,15587],{"class":139},[129,57385,57386],{"class":131,"line":1778},[129,57387,2414],{"emptyLinePlaceholder":56},[129,57389,57390,57392,57394,57397,57399],{"class":131,"line":1792},[129,57391,54772],{"class":188},[129,57393,51438],{"class":139},[129,57395,57396],{"class":188},"450",[129,57398,51493],{"class":135},[129,57400,1305],{"class":139},[129,57402,57403,57405,57407,57409,57411],{"class":131,"line":1797},[129,57404,54786],{"class":188},[129,57406,51438],{"class":139},[129,57408,540],{"class":188},[129,57410,51493],{"class":135},[129,57412,1305],{"class":139},[129,57414,57415,57418,57420,57423],{"class":131,"line":2591},[129,57416,57417],{"class":188},"      color",[129,57419,51438],{"class":139},[129,57421,57422],{"class":188},"red",[129,57424,1305],{"class":139},[129,57426,57427],{"class":131,"line":2605},[129,57428,2414],{"emptyLinePlaceholder":56},[129,57430,57431],{"class":131,"line":2613},[129,57432,2201],{"class":139},[129,57434,57435],{"class":131,"line":2618},[129,57436,2414],{"emptyLinePlaceholder":56},[129,57438,57439,57442],{"class":131,"line":2624},[129,57440,57441],{"class":1977},"    .btns",[129,57443,15587],{"class":139},[129,57445,57446,57448,57450,57452],{"class":131,"line":2630},[129,57447,57287],{"class":188},[129,57449,51438],{"class":139},[129,57451,51593],{"class":188},[129,57453,1305],{"class":139},[129,57455,57456],{"class":131,"line":2635},[129,57457,2201],{"class":139},[129,57459,57460],{"class":131,"line":7963},[129,57461,2414],{"emptyLinePlaceholder":56},[129,57463,57464,57466,57469],{"class":131,"line":7987},[129,57465,57441],{"class":1977},[129,57467,57468],{"class":51301}," button",[129,57470,15587],{"class":139},[129,57472,57473,57475,57477,57479,57481],{"class":131,"line":7992},[129,57474,54772],{"class":188},[129,57476,51438],{"class":139},[129,57478,956],{"class":188},[129,57480,51493],{"class":135},[129,57482,1305],{"class":139},[129,57484,57485,57487,57489,57491,57493],{"class":131,"line":7998},[129,57486,54786],{"class":188},[129,57488,51438],{"class":139},[129,57490,412],{"class":188},[129,57492,51493],{"class":135},[129,57494,1305],{"class":139},[129,57496,57497,57499,57501,57503,57506,57508],{"class":131,"line":8025},[129,57498,54707],{"class":188},[129,57500,51438],{"class":139},[129,57502,331],{"class":188},[129,57504,57505],{"class":188}," 50",[129,57507,51493],{"class":135},[129,57509,1305],{"class":139},[129,57511,57512],{"class":131,"line":8030},[129,57513,2201],{"class":139},[129,57515,57516,57518,57520],{"class":131,"line":8036},[129,57517,52418],{"class":139},[129,57519,5141],{"class":51301},[129,57521,51308],{"class":139},[129,57523,57524,57526,57528],{"class":131,"line":8048},[129,57525,51786],{"class":139},[129,57527,51335],{"class":51301},[129,57529,51308],{"class":139},[129,57531,57532],{"class":131,"line":8060},[129,57533,2414],{"emptyLinePlaceholder":56},[129,57535,57536,57538,57540],{"class":131,"line":8072},[129,57537,1049],{"class":139},[129,57539,51801],{"class":51301},[129,57541,51308],{"class":139},[129,57543,57544,57546,57548,57551,57553],{"class":131,"line":9731},[129,57545,52145],{"class":139},[129,57547,71],{"class":51301},[129,57549,57550],{"class":139},">随机点名\u003C\u002F",[129,57552,71],{"class":51301},[129,57554,51308],{"class":139},[129,57556,57557,57559,57561,57563,57565,57567],{"class":131,"line":9756},[129,57558,52145],{"class":139},[129,57560,51612],{"class":51301},[129,57562,53487],{"class":1977},[129,57564,185],{"class":139},[129,57566,53492],{"class":244},[129,57568,51308],{"class":139},[129,57570,57571,57573,57575,57578,57580],{"class":131,"line":9779},[129,57572,51342],{"class":139},[129,57574,129],{"class":51301},[129,57576,57577],{"class":139},">名字是：\u003C\u002F",[129,57579,129],{"class":51301},[129,57581,51308],{"class":139},[129,57583,57584,57586,57588,57590,57592,57595,57598,57600],{"class":131,"line":9803},[129,57585,51342],{"class":139},[129,57587,51612],{"class":51301},[129,57589,53487],{"class":1977},[129,57591,185],{"class":139},[129,57593,57594],{"class":244},"\"qs\"",[129,57596,57597],{"class":139},">这里显示姓名\u003C\u002F",[129,57599,51612],{"class":51301},[129,57601,51308],{"class":139},[129,57603,57604,57606,57608],{"class":131,"line":9808},[129,57605,52418],{"class":139},[129,57607,51612],{"class":51301},[129,57609,51308],{"class":139},[129,57611,57612,57614,57616,57618,57620,57623],{"class":131,"line":9813},[129,57613,52145],{"class":139},[129,57615,51612],{"class":51301},[129,57617,53487],{"class":1977},[129,57619,185],{"class":139},[129,57621,57622],{"class":244},"\"btns\"",[129,57624,51308],{"class":139},[129,57626,57627,57629,57631,57633,57635,57638,57641,57643],{"class":131,"line":9818},[129,57628,51342],{"class":139},[129,57630,53888],{"class":51301},[129,57632,53487],{"class":1977},[129,57634,185],{"class":139},[129,57636,57637],{"class":244},"\"start\"",[129,57639,57640],{"class":139},">开始\u003C\u002F",[129,57642,53888],{"class":51301},[129,57644,51308],{"class":139},[129,57646,57647,57649,57651,57653,57655,57658,57661,57663],{"class":131,"line":9827},[129,57648,51342],{"class":139},[129,57650,53888],{"class":51301},[129,57652,53487],{"class":1977},[129,57654,185],{"class":139},[129,57656,57657],{"class":244},"\"end\"",[129,57659,57660],{"class":139},">结束\u003C\u002F",[129,57662,53888],{"class":51301},[129,57664,51308],{"class":139},[129,57666,57667,57669,57671],{"class":131,"line":9832},[129,57668,52418],{"class":139},[129,57670,51612],{"class":51301},[129,57672,51308],{"class":139},[129,57674,57675],{"class":131,"line":9838},[129,57676,2414],{"emptyLinePlaceholder":56},[129,57678,57679,57681,57683],{"class":131,"line":9859},[129,57680,52145],{"class":139},[129,57682,51814],{"class":51301},[129,57684,51308],{"class":139},[129,57686,57687],{"class":131,"line":9865},[129,57688,57689],{"class":198},"    \u002F\u002F 数据数组\n",[129,57691,57692,57694,57697,57699,57701,57704,57706,57709,57711,57714,57716,57719,57721,57724],{"class":131,"line":9879},[129,57693,11236],{"class":135},[129,57695,57696],{"class":188}," arr",[129,57698,13579],{"class":135},[129,57700,52227],{"class":139},[129,57702,57703],{"class":244},"'马超'",[129,57705,12450],{"class":139},[129,57707,57708],{"class":244},"'黄忠'",[129,57710,12450],{"class":139},[129,57712,57713],{"class":244},"'赵云'",[129,57715,12450],{"class":139},[129,57717,57718],{"class":244},"'关羽'",[129,57720,12450],{"class":139},[129,57722,57723],{"class":244},"'张飞'",[129,57725,33247],{"class":139},[129,57727,57728,57730,57733,57735,57737,57739,57741,57744],{"class":131,"line":9885},[129,57729,11236],{"class":135},[129,57731,57732],{"class":188}," qs",[129,57734,13579],{"class":135},[129,57736,54397],{"class":139},[129,57738,54400],{"class":1977},[129,57740,140],{"class":139},[129,57742,57743],{"class":244},"'.qs'",[129,57745,146],{"class":139},[129,57747,57748],{"class":131,"line":9912},[129,57749,57750],{"class":198},"    \u002F\u002F 1.业务1.开始按钮模块\n",[129,57752,57753,57755,57757,57759,57761,57763,57765,57768],{"class":131,"line":9921},[129,57754,11236],{"class":135},[129,57756,4198],{"class":188},[129,57758,13579],{"class":135},[129,57760,54397],{"class":139},[129,57762,54400],{"class":1977},[129,57764,140],{"class":139},[129,57766,57767],{"class":244},"'.start'",[129,57769,146],{"class":139},[129,57771,57772],{"class":131,"line":9927},[129,57773,57774],{"class":198},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[129,57776,57777,57779,57782,57784],{"class":131,"line":9935},[129,57778,52220],{"class":135},[129,57780,57781],{"class":139}," timerId ",[129,57783,185],{"class":135},[129,57785,47334],{"class":188},[129,57787,57788],{"class":131,"line":9940},[129,57789,57790],{"class":198},"    \u002F\u002F 随机号要全局变量\n",[129,57792,57793,57795,57798,57800],{"class":131,"line":16619},[129,57794,52220],{"class":135},[129,57796,57797],{"class":139}," random ",[129,57799,185],{"class":135},[129,57801,47334],{"class":188},[129,57803,57804],{"class":131,"line":16625},[129,57805,57806],{"class":198},"    \u002F\u002F 1.1 添加点击事件\n",[129,57808,57809,57812,57815,57817,57820,57822,57824],{"class":131,"line":16648},[129,57810,57811],{"class":139},"    start.",[129,57813,57814],{"class":1977},"addEventListener",[129,57816,140],{"class":139},[129,57818,57819],{"class":244},"'click'",[129,57821,12450],{"class":139},[129,57823,54450],{"class":135},[129,57825,54453],{"class":139},[129,57827,57828,57831,57833,57835,57837,57839],{"class":131,"line":16654},[129,57829,57830],{"class":139},"      timerId ",[129,57832,185],{"class":135},[129,57834,54445],{"class":1977},[129,57836,140],{"class":139},[129,57838,54450],{"class":135},[129,57840,54453],{"class":139},[129,57842,57843],{"class":131,"line":16677},[129,57844,57845],{"class":198},"        \u002F\u002F 随机数\n",[129,57847,57848,57851,57853,57856,57859,57862,57864,57866,57868,57870],{"class":131,"line":16691},[129,57849,57850],{"class":139},"        random ",[129,57852,185],{"class":135},[129,57854,57855],{"class":1977}," parseInt",[129,57857,57858],{"class":139},"(Math.",[129,57860,57861],{"class":1977},"random",[129,57863,13065],{"class":139},[129,57865,594],{"class":135},[129,57867,51966],{"class":139},[129,57869,51969],{"class":188},[129,57871,146],{"class":139},[129,57873,57874,57877,57879],{"class":131,"line":16711},[129,57875,57876],{"class":139},"        qs.innerHTML ",[129,57878,185],{"class":135},[129,57880,57881],{"class":139}," arr[random]\n",[129,57883,57884,57887,57889],{"class":131,"line":16717},[129,57885,57886],{"class":139},"      }, ",[129,57888,412],{"class":188},[129,57890,146],{"class":139},[129,57892,57893],{"class":131,"line":16728},[129,57894,57895],{"class":198},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[129,57897,57898,57900,57903,57905,57908,57910],{"class":131,"line":16751},[129,57899,54481],{"class":135},[129,57901,57902],{"class":139}," (arr.",[129,57904,51969],{"class":188},[129,57906,57907],{"class":135}," ===",[129,57909,25119],{"class":188},[129,57911,12457],{"class":139},[129,57913,57914],{"class":131,"line":16773},[129,57915,57916],{"class":198},"        \u002F\u002F start.disabled = true\n",[129,57918,57919],{"class":131,"line":16778},[129,57920,57921],{"class":198},"        \u002F\u002F end.disabled = true\n",[129,57923,57924],{"class":131,"line":16784},[129,57925,57926],{"class":198},"        \u002F\u002F 可以合起来写\n",[129,57928,57929,57932,57934,57937,57939],{"class":131,"line":16798},[129,57930,57931],{"class":139},"        start.disabled ",[129,57933,185],{"class":135},[129,57935,57936],{"class":139}," end.disabled ",[129,57938,185],{"class":135},[129,57940,57941],{"class":188}," true\n",[129,57943,57944],{"class":131,"line":16811},[129,57945,52399],{"class":139},[129,57947,57948],{"class":131,"line":16816},[129,57949,33462],{"class":139},[129,57951,57952],{"class":131,"line":16830},[129,57953,57954],{"class":198},"    \u002F\u002F 1.2 关闭按钮模块\n",[129,57956,57957,57959,57961,57963,57965,57967,57969,57972],{"class":131,"line":16835},[129,57958,11236],{"class":135},[129,57960,4214],{"class":188},[129,57962,13579],{"class":135},[129,57964,54397],{"class":139},[129,57966,54400],{"class":1977},[129,57968,140],{"class":139},[129,57970,57971],{"class":244},"'.end'",[129,57973,146],{"class":139},[129,57975,57976,57979,57981,57983,57985,57987,57989],{"class":131,"line":16841},[129,57977,57978],{"class":139},"    end.",[129,57980,57814],{"class":1977},[129,57982,140],{"class":139},[129,57984,57819],{"class":244},[129,57986,12450],{"class":139},[129,57988,54450],{"class":135},[129,57990,54453],{"class":139},[129,57992,57993,57996],{"class":131,"line":16846},[129,57994,57995],{"class":1977},"      clearInterval",[129,57997,57998],{"class":139},"(timerId)\n",[129,58000,58001],{"class":131,"line":16860},[129,58002,58003],{"class":198},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[129,58005,58006,58009,58012,58015,58017],{"class":131,"line":16865},[129,58007,58008],{"class":139},"      arr.",[129,58010,58011],{"class":1977},"splice",[129,58013,58014],{"class":139},"(random, ",[129,58016,357],{"class":188},[129,58018,146],{"class":139},[129,58020,58021],{"class":131,"line":16870},[129,58022,33462],{"class":139},[129,58024,58025],{"class":131,"line":16884},[129,58026,2414],{"emptyLinePlaceholder":56},[129,58028,58029,58031,58033],{"class":131,"line":16896},[129,58030,52418],{"class":139},[129,58032,51814],{"class":51301},[129,58034,51308],{"class":139},[129,58036,58037,58039,58041],{"class":131,"line":16901},[129,58038,51786],{"class":139},[129,58040,51801],{"class":51301},[129,58042,51308],{"class":139},[129,58044,58045],{"class":131,"line":16914},[129,58046,2414],{"emptyLinePlaceholder":56},[129,58048,58049,58051,58053],{"class":131,"line":16919},[129,58050,51786],{"class":139},[129,58052,50636],{"class":51301},[129,58054,51308],{"class":139},[14,58056,58057],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[100,58059,58061],{"id":58060},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[120,58063,58065],{"className":50634,"code":58064,"language":50636,"meta":42,"style":42},"\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",[126,58066,58067,58077,58091,58095,58103,58117,58137,58149,58157,58161,58169,58181,58189,58208,58225,58241,58251,58255,58263,58271,58275],{"__ignoreMap":42},[129,58068,58069,58071,58073,58075],{"class":131,"line":132},[129,58070,51298],{"class":139},[129,58072,51302],{"class":51301},[129,58074,51305],{"class":1977},[129,58076,51308],{"class":139},[129,58078,58079,58081,58083,58085,58087,58089],{"class":131,"line":51},[129,58080,1049],{"class":139},[129,58082,50636],{"class":51301},[129,58084,51317],{"class":1977},[129,58086,185],{"class":139},[129,58088,51322],{"class":244},[129,58090,51308],{"class":139},[129,58092,58093],{"class":131,"line":1194},[129,58094,2414],{"emptyLinePlaceholder":56},[129,58096,58097,58099,58101],{"class":131,"line":1209},[129,58098,1049],{"class":139},[129,58100,51335],{"class":51301},[129,58102,51308],{"class":139},[129,58104,58105,58107,58109,58111,58113,58115],{"class":131,"line":1215},[129,58106,52145],{"class":139},[129,58108,51345],{"class":51301},[129,58110,51348],{"class":1977},[129,58112,185],{"class":139},[129,58114,51353],{"class":244},[129,58116,51308],{"class":139},[129,58118,58119,58121,58123,58125,58127,58129,58131,58133,58135],{"class":131,"line":1229},[129,58120,52145],{"class":139},[129,58122,51345],{"class":51301},[129,58124,14935],{"class":1977},[129,58126,185],{"class":139},[129,58128,51392],{"class":244},[129,58130,51372],{"class":1977},[129,58132,185],{"class":139},[129,58134,51399],{"class":244},[129,58136,51308],{"class":139},[129,58138,58139,58141,58143,58145,58147],{"class":131,"line":1235},[129,58140,52145],{"class":139},[129,58142,51408],{"class":51301},[129,58144,51411],{"class":139},[129,58146,51408],{"class":51301},[129,58148,51308],{"class":139},[129,58150,58151,58153,58155],{"class":131,"line":1326},[129,58152,51786],{"class":139},[129,58154,51335],{"class":51301},[129,58156,51308],{"class":139},[129,58158,58159],{"class":131,"line":1332},[129,58160,2414],{"emptyLinePlaceholder":56},[129,58162,58163,58165,58167],{"class":131,"line":1344},[129,58164,1049],{"class":139},[129,58166,51801],{"class":51301},[129,58168,51308],{"class":139},[129,58170,58171,58173,58175,58177,58179],{"class":131,"line":1626},[129,58172,52145],{"class":139},[129,58174,53888],{"class":51301},[129,58176,53894],{"class":139},[129,58178,53888],{"class":51301},[129,58180,51308],{"class":139},[129,58182,58183,58185,58187],{"class":131,"line":1631},[129,58184,52145],{"class":139},[129,58186,51814],{"class":51301},[129,58188,51308],{"class":139},[129,58190,58191,58193,58195,58197,58199,58201,58203,58206],{"class":131,"line":1637},[129,58192,11236],{"class":135},[129,58194,54392],{"class":188},[129,58196,13579],{"class":135},[129,58198,54397],{"class":139},[129,58200,54400],{"class":1977},[129,58202,140],{"class":139},[129,58204,58205],{"class":244},"'button'",[129,58207,146],{"class":139},[129,58209,58210,58213,58215,58217,58219,58221,58223],{"class":131,"line":1642},[129,58211,58212],{"class":139},"    btn.",[129,58214,57814],{"class":1977},[129,58216,140],{"class":139},[129,58218,57819],{"class":244},[129,58220,12450],{"class":139},[129,58222,54450],{"class":135},[129,58224,54453],{"class":139},[129,58226,58227,58230,58232,58234,58237,58239],{"class":131,"line":1656},[129,58228,58229],{"class":135},"      const",[129,58231,2254],{"class":188},[129,58233,13579],{"class":135},[129,58235,58236],{"class":139}," Math.",[129,58238,57861],{"class":1977},[129,58240,1990],{"class":139},[129,58242,58243,58246,58249],{"class":131,"line":1661},[129,58244,58245],{"class":139},"      console.",[129,58247,58248],{"class":1977},"log",[129,58250,153],{"class":139},[129,58252,58253],{"class":131,"line":1667},[129,58254,33462],{"class":139},[129,58256,58257,58259,58261],{"class":131,"line":1688},[129,58258,52418],{"class":139},[129,58260,51814],{"class":51301},[129,58262,51308],{"class":139},[129,58264,58265,58267,58269],{"class":131,"line":1693},[129,58266,51786],{"class":139},[129,58268,51801],{"class":51301},[129,58270,51308],{"class":139},[129,58272,58273],{"class":131,"line":1707},[129,58274,2414],{"emptyLinePlaceholder":56},[129,58276,58277,58279,58281],{"class":131,"line":1712},[129,58278,51786],{"class":139},[129,58280,50636],{"class":51301},[129,58282,51308],{"class":139},[14,58284,58285],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58287,58288],{},"常量不可以重新赋值",[14,58290,58291],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[120,58293,58295],{"className":50634,"code":58294,"language":50636,"meta":42,"style":42},"\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",[126,58296,58297,58307,58321,58325,58333,58347,58367,58379,58387,58391,58399,58411,58419,58430,58448,58464,58478,58486,58490,58498,58506,58510],{"__ignoreMap":42},[129,58298,58299,58301,58303,58305],{"class":131,"line":132},[129,58300,51298],{"class":139},[129,58302,51302],{"class":51301},[129,58304,51305],{"class":1977},[129,58306,51308],{"class":139},[129,58308,58309,58311,58313,58315,58317,58319],{"class":131,"line":51},[129,58310,1049],{"class":139},[129,58312,50636],{"class":51301},[129,58314,51317],{"class":1977},[129,58316,185],{"class":139},[129,58318,51322],{"class":244},[129,58320,51308],{"class":139},[129,58322,58323],{"class":131,"line":1194},[129,58324,2414],{"emptyLinePlaceholder":56},[129,58326,58327,58329,58331],{"class":131,"line":1209},[129,58328,1049],{"class":139},[129,58330,51335],{"class":51301},[129,58332,51308],{"class":139},[129,58334,58335,58337,58339,58341,58343,58345],{"class":131,"line":1215},[129,58336,52145],{"class":139},[129,58338,51345],{"class":51301},[129,58340,51348],{"class":1977},[129,58342,185],{"class":139},[129,58344,51353],{"class":244},[129,58346,51308],{"class":139},[129,58348,58349,58351,58353,58355,58357,58359,58361,58363,58365],{"class":131,"line":1229},[129,58350,52145],{"class":139},[129,58352,51345],{"class":51301},[129,58354,14935],{"class":1977},[129,58356,185],{"class":139},[129,58358,51392],{"class":244},[129,58360,51372],{"class":1977},[129,58362,185],{"class":139},[129,58364,51399],{"class":244},[129,58366,51308],{"class":139},[129,58368,58369,58371,58373,58375,58377],{"class":131,"line":1235},[129,58370,52145],{"class":139},[129,58372,51408],{"class":51301},[129,58374,51411],{"class":139},[129,58376,51408],{"class":51301},[129,58378,51308],{"class":139},[129,58380,58381,58383,58385],{"class":131,"line":1326},[129,58382,51786],{"class":139},[129,58384,51335],{"class":51301},[129,58386,51308],{"class":139},[129,58388,58389],{"class":131,"line":1332},[129,58390,2414],{"emptyLinePlaceholder":56},[129,58392,58393,58395,58397],{"class":131,"line":1344},[129,58394,1049],{"class":139},[129,58396,51801],{"class":51301},[129,58398,51308],{"class":139},[129,58400,58401,58403,58405,58407,58409],{"class":131,"line":1626},[129,58402,52145],{"class":139},[129,58404,53888],{"class":51301},[129,58406,53894],{"class":139},[129,58408,53888],{"class":51301},[129,58410,51308],{"class":139},[129,58412,58413,58415,58417],{"class":131,"line":1631},[129,58414,52145],{"class":139},[129,58416,51814],{"class":51301},[129,58418,51308],{"class":139},[129,58420,58421,58423,58425,58427],{"class":131,"line":1637},[129,58422,11236],{"class":135},[129,58424,2254],{"class":188},[129,58426,13579],{"class":135},[129,58428,58429],{"class":188}," 10\n",[129,58431,58432,58434,58436,58438,58440,58442,58444,58446],{"class":131,"line":1642},[129,58433,11236],{"class":135},[129,58435,54392],{"class":188},[129,58437,13579],{"class":135},[129,58439,54397],{"class":139},[129,58441,54400],{"class":1977},[129,58443,140],{"class":139},[129,58445,58205],{"class":244},[129,58447,146],{"class":139},[129,58449,58450,58452,58454,58456,58458,58460,58462],{"class":131,"line":1656},[129,58451,58212],{"class":139},[129,58453,57814],{"class":1977},[129,58455,140],{"class":139},[129,58457,57819],{"class":244},[129,58459,12450],{"class":139},[129,58461,54450],{"class":135},[129,58463,54453],{"class":139},[129,58465,58466,58468,58470,58472,58474,58476],{"class":131,"line":1661},[129,58467,58229],{"class":135},[129,58469,2254],{"class":188},[129,58471,13579],{"class":135},[129,58473,58236],{"class":139},[129,58475,57861],{"class":1977},[129,58477,1990],{"class":139},[129,58479,58480,58482,58484],{"class":131,"line":1667},[129,58481,58245],{"class":139},[129,58483,58248],{"class":1977},[129,58485,153],{"class":139},[129,58487,58488],{"class":131,"line":1688},[129,58489,33462],{"class":139},[129,58491,58492,58494,58496],{"class":131,"line":1693},[129,58493,52418],{"class":139},[129,58495,51814],{"class":51301},[129,58497,51308],{"class":139},[129,58499,58500,58502,58504],{"class":131,"line":1707},[129,58501,51786],{"class":139},[129,58503,51801],{"class":51301},[129,58505,51308],{"class":139},[129,58507,58508],{"class":131,"line":1712},[129,58509,2414],{"emptyLinePlaceholder":56},[129,58511,58512,58514,58516],{"class":131,"line":1741},[129,58513,51786],{"class":139},[129,58515,50636],{"class":51301},[129,58517,51308],{"class":139},[14,58519,58520],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[120,58522,58524],{"className":50634,"code":58523,"language":50636,"meta":42,"style":42},"\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",[126,58525,58526,58536,58550,58554,58562,58576,58596,58608,58616,58620,58628,58640,58648,58658,58676,58692,58705,58713,58717,58725,58733,58737],{"__ignoreMap":42},[129,58527,58528,58530,58532,58534],{"class":131,"line":132},[129,58529,51298],{"class":139},[129,58531,51302],{"class":51301},[129,58533,51305],{"class":1977},[129,58535,51308],{"class":139},[129,58537,58538,58540,58542,58544,58546,58548],{"class":131,"line":51},[129,58539,1049],{"class":139},[129,58541,50636],{"class":51301},[129,58543,51317],{"class":1977},[129,58545,185],{"class":139},[129,58547,51322],{"class":244},[129,58549,51308],{"class":139},[129,58551,58552],{"class":131,"line":1194},[129,58553,2414],{"emptyLinePlaceholder":56},[129,58555,58556,58558,58560],{"class":131,"line":1209},[129,58557,1049],{"class":139},[129,58559,51335],{"class":51301},[129,58561,51308],{"class":139},[129,58563,58564,58566,58568,58570,58572,58574],{"class":131,"line":1215},[129,58565,52145],{"class":139},[129,58567,51345],{"class":51301},[129,58569,51348],{"class":1977},[129,58571,185],{"class":139},[129,58573,51353],{"class":244},[129,58575,51308],{"class":139},[129,58577,58578,58580,58582,58584,58586,58588,58590,58592,58594],{"class":131,"line":1229},[129,58579,52145],{"class":139},[129,58581,51345],{"class":51301},[129,58583,14935],{"class":1977},[129,58585,185],{"class":139},[129,58587,51392],{"class":244},[129,58589,51372],{"class":1977},[129,58591,185],{"class":139},[129,58593,51399],{"class":244},[129,58595,51308],{"class":139},[129,58597,58598,58600,58602,58604,58606],{"class":131,"line":1235},[129,58599,52145],{"class":139},[129,58601,51408],{"class":51301},[129,58603,51411],{"class":139},[129,58605,51408],{"class":51301},[129,58607,51308],{"class":139},[129,58609,58610,58612,58614],{"class":131,"line":1326},[129,58611,51786],{"class":139},[129,58613,51335],{"class":51301},[129,58615,51308],{"class":139},[129,58617,58618],{"class":131,"line":1332},[129,58619,2414],{"emptyLinePlaceholder":56},[129,58621,58622,58624,58626],{"class":131,"line":1344},[129,58623,1049],{"class":139},[129,58625,51801],{"class":51301},[129,58627,51308],{"class":139},[129,58629,58630,58632,58634,58636,58638],{"class":131,"line":1626},[129,58631,52145],{"class":139},[129,58633,53888],{"class":51301},[129,58635,53894],{"class":139},[129,58637,53888],{"class":51301},[129,58639,51308],{"class":139},[129,58641,58642,58644,58646],{"class":131,"line":1631},[129,58643,52145],{"class":139},[129,58645,51814],{"class":51301},[129,58647,51308],{"class":139},[129,58649,58650,58652,58654,58656],{"class":131,"line":1637},[129,58651,11236],{"class":135},[129,58653,2254],{"class":188},[129,58655,13579],{"class":135},[129,58657,58429],{"class":188},[129,58659,58660,58662,58664,58666,58668,58670,58672,58674],{"class":131,"line":1642},[129,58661,11236],{"class":135},[129,58663,54392],{"class":188},[129,58665,13579],{"class":135},[129,58667,54397],{"class":139},[129,58669,54400],{"class":1977},[129,58671,140],{"class":139},[129,58673,58205],{"class":244},[129,58675,146],{"class":139},[129,58677,58678,58680,58682,58684,58686,58688,58690],{"class":131,"line":1656},[129,58679,58212],{"class":139},[129,58681,57814],{"class":1977},[129,58683,140],{"class":139},[129,58685,57819],{"class":244},[129,58687,12450],{"class":139},[129,58689,54450],{"class":135},[129,58691,54453],{"class":139},[129,58693,58694,58697,58699,58701,58703],{"class":131,"line":1661},[129,58695,58696],{"class":139},"      num ",[129,58698,185],{"class":135},[129,58700,58236],{"class":139},[129,58702,57861],{"class":1977},[129,58704,1990],{"class":139},[129,58706,58707,58709,58711],{"class":131,"line":1667},[129,58708,58245],{"class":139},[129,58710,58248],{"class":1977},[129,58712,153],{"class":139},[129,58714,58715],{"class":131,"line":1688},[129,58716,33462],{"class":139},[129,58718,58719,58721,58723],{"class":131,"line":1693},[129,58720,52418],{"class":139},[129,58722,51814],{"class":51301},[129,58724,51308],{"class":139},[129,58726,58727,58729,58731],{"class":131,"line":1707},[129,58728,51786],{"class":139},[129,58730,51801],{"class":51301},[129,58732,51308],{"class":139},[129,58734,58735],{"class":131,"line":1712},[129,58736,2414],{"emptyLinePlaceholder":56},[129,58738,58739,58741,58743],{"class":131,"line":1741},[129,58740,51786],{"class":139},[129,58742,50636],{"class":51301},[129,58744,51308],{"class":139},[14,58746,58747],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[100,58749,58751],{"id":58750},"_324-事件监听版本","3.2.4 事件监听版本",[14,58753,58754],{},[40,58755],{"alt":42,"src":58756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58758,58759],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58761,58762],{},"这种方式会覆盖前边的事件监听:",[120,58764,58766],{"className":50634,"code":58765,"language":50636,"meta":42,"style":42},"\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",[126,58767,58768,58778,58792,58796,58804,58818,58838,58850,58858,58862,58870,58882,58890,58908,58922,58933,58937,58949,58959,58963,58971,58979,58983],{"__ignoreMap":42},[129,58769,58770,58772,58774,58776],{"class":131,"line":132},[129,58771,51298],{"class":139},[129,58773,51302],{"class":51301},[129,58775,51305],{"class":1977},[129,58777,51308],{"class":139},[129,58779,58780,58782,58784,58786,58788,58790],{"class":131,"line":51},[129,58781,1049],{"class":139},[129,58783,50636],{"class":51301},[129,58785,51317],{"class":1977},[129,58787,185],{"class":139},[129,58789,51322],{"class":244},[129,58791,51308],{"class":139},[129,58793,58794],{"class":131,"line":1194},[129,58795,2414],{"emptyLinePlaceholder":56},[129,58797,58798,58800,58802],{"class":131,"line":1209},[129,58799,1049],{"class":139},[129,58801,51335],{"class":51301},[129,58803,51308],{"class":139},[129,58805,58806,58808,58810,58812,58814,58816],{"class":131,"line":1215},[129,58807,52145],{"class":139},[129,58809,51345],{"class":51301},[129,58811,51348],{"class":1977},[129,58813,185],{"class":139},[129,58815,51353],{"class":244},[129,58817,51308],{"class":139},[129,58819,58820,58822,58824,58826,58828,58830,58832,58834,58836],{"class":131,"line":1229},[129,58821,52145],{"class":139},[129,58823,51345],{"class":51301},[129,58825,14935],{"class":1977},[129,58827,185],{"class":139},[129,58829,51392],{"class":244},[129,58831,51372],{"class":1977},[129,58833,185],{"class":139},[129,58835,51399],{"class":244},[129,58837,51308],{"class":139},[129,58839,58840,58842,58844,58846,58848],{"class":131,"line":1235},[129,58841,52145],{"class":139},[129,58843,51408],{"class":51301},[129,58845,51411],{"class":139},[129,58847,51408],{"class":51301},[129,58849,51308],{"class":139},[129,58851,58852,58854,58856],{"class":131,"line":1326},[129,58853,51786],{"class":139},[129,58855,51335],{"class":51301},[129,58857,51308],{"class":139},[129,58859,58860],{"class":131,"line":1332},[129,58861,2414],{"emptyLinePlaceholder":56},[129,58863,58864,58866,58868],{"class":131,"line":1344},[129,58865,1049],{"class":139},[129,58867,51801],{"class":51301},[129,58869,51308],{"class":139},[129,58871,58872,58874,58876,58878,58880],{"class":131,"line":1626},[129,58873,52145],{"class":139},[129,58875,53888],{"class":51301},[129,58877,53894],{"class":139},[129,58879,53888],{"class":51301},[129,58881,51308],{"class":139},[129,58883,58884,58886,58888],{"class":131,"line":1631},[129,58885,52145],{"class":139},[129,58887,51814],{"class":51301},[129,58889,51308],{"class":139},[129,58891,58892,58894,58896,58898,58900,58902,58904,58906],{"class":131,"line":1637},[129,58893,11236],{"class":135},[129,58895,54392],{"class":188},[129,58897,13579],{"class":135},[129,58899,54397],{"class":139},[129,58901,54400],{"class":1977},[129,58903,140],{"class":139},[129,58905,58205],{"class":244},[129,58907,146],{"class":139},[129,58909,58910,58912,58915,58917,58920],{"class":131,"line":1642},[129,58911,58212],{"class":139},[129,58913,58914],{"class":1977},"onclick",[129,58916,13579],{"class":135},[129,58918,58919],{"class":135}," function",[129,58921,54453],{"class":139},[129,58923,58924,58927,58929,58931],{"class":131,"line":1656},[129,58925,58926],{"class":1977},"      alert",[129,58928,140],{"class":139},[129,58930,611],{"class":188},[129,58932,146],{"class":139},[129,58934,58935],{"class":131,"line":1661},[129,58936,2201],{"class":139},[129,58938,58939,58941,58943,58945,58947],{"class":131,"line":1667},[129,58940,58212],{"class":139},[129,58942,58914],{"class":1977},[129,58944,13579],{"class":135},[129,58946,58919],{"class":135},[129,58948,54453],{"class":139},[129,58950,58951,58953,58955,58957],{"class":131,"line":1688},[129,58952,58926],{"class":1977},[129,58954,140],{"class":139},[129,58956,889],{"class":188},[129,58958,146],{"class":139},[129,58960,58961],{"class":131,"line":1693},[129,58962,2201],{"class":139},[129,58964,58965,58967,58969],{"class":131,"line":1707},[129,58966,52418],{"class":139},[129,58968,51814],{"class":51301},[129,58970,51308],{"class":139},[129,58972,58973,58975,58977],{"class":131,"line":1712},[129,58974,51786],{"class":139},[129,58976,51801],{"class":51301},[129,58978,51308],{"class":139},[129,58980,58981],{"class":131,"line":1741},[129,58982,2414],{"emptyLinePlaceholder":56},[129,58984,58985,58987,58989],{"class":131,"line":1746},[129,58986,51786],{"class":139},[129,58988,50636],{"class":51301},[129,58990,51308],{"class":139},[14,58992,58993],{},"只要点击就输出结果为22,前边11被覆盖了",[120,58995,58997],{"className":50634,"code":58996,"language":50636,"meta":42,"style":42},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[126,58998,58999,59004,59009,59013,59018,59023],{"__ignoreMap":42},[129,59000,59001],{"class":131,"line":132},[129,59002,59003],{"class":139},"  btn.addEventListener('click', function () {\n",[129,59005,59006],{"class":131,"line":51},[129,59007,59008],{"class":139},"      alert(11)\n",[129,59010,59011],{"class":131,"line":1194},[129,59012,33462],{"class":139},[129,59014,59015],{"class":131,"line":1209},[129,59016,59017],{"class":139},"    btn.addEventListener('click', function () {\n",[129,59019,59020],{"class":131,"line":1215},[129,59021,59022],{"class":139},"      alert(22)\n",[129,59024,59025],{"class":131,"line":1229},[129,59026,33462],{"class":139},[14,59028,59029],{},"点击第一次输出11,第二次点击为22",[100,59031,59033],{"id":59032},"_325-事件类型","3.2.5 事件类型",[14,59035,59036],{},[40,59037],{"alt":42,"src":59038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22013,59040,59042],{"id":59041},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59044,59045],{},"补充知识:",[14,59047,59048],{},"轮播图自动播放模块,可以使用",[14,59050,59051],{},"let timerId = setInterval(function () {",[14,59053,59054],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59056,59057],{},"用js方法模拟进行点击事件,click必须加()",[14,59059,59060],{},"next.click()",[14,59062,59063],{},"}, 1000)",[14,59065,59066],{},[40,59067],{"alt":42,"src":59068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[120,59070,59072],{"className":53068,"code":59071,"language":53070,"meta":42,"style":42},"\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",[126,59073,59074,59078,59088,59102,59106,59114,59129,59149,59169,59182,59190,59195,59200,59204,59208,59213,59218,59223,59228,59232,59236,59241,59246,59251,59255,59259,59264,59268,59273,59278,59282,59286,59291,59296,59301,59306,59311,59315,59319,59324,59329,59334,59339,59344,59348,59352,59357,59362,59367,59372,59377,59382,59387,59392,59397,59402,59406,59410,59415,59420,59424,59428,59433,59438,59442,59447,59452,59456,59460,59465,59469,59474,59479,59483,59488,59492,59496,59501,59506,59511,59516,59521,59526,59531,59535,59539,59543,59548,59553,59558,59563,59567,59575,59583,59587,59595,59610,59624,59645,59653,59667,59680,59695,59714,59726,59738,59750,59762,59774,59786,59798,59806,59821,59845,59869,59877,59885,59893,59901,59906,59911,59916,59921,59926,59931,59936,59941,59946,59951,59955,59960,59965,59970,59975,59980,59985,59990,59995,60000,60004,60009,60014,60019,60024,60029,60034,60039,60044,60049,60054,60059,60064,60068,60072,60077,60082,60087,60091,60096,60101,60106,60111,60116,60120,60125,60129,60133,60137,60141,60145,60149,60154,60159,60164,60169,60174,60179,60184,60189,60194,60198,60202,60207,60212,60217,60222,60227,60231,60236,60241,60246,60251,60256,60261,60265,60269,60274,60278,60283,60287,60292,60297,60302,60307,60312,60317,60321,60329,60337,60341],{"__ignoreMap":42},[129,59075,59076],{"class":131,"line":132},[129,59077,2414],{"emptyLinePlaceholder":56},[129,59079,59080,59082,59084,59086],{"class":131,"line":51},[129,59081,51298],{"class":139},[129,59083,51302],{"class":135},[129,59085,51305],{"class":188},[129,59087,51308],{"class":139},[129,59089,59090,59092,59094,59096,59098,59100],{"class":131,"line":1194},[129,59091,1049],{"class":139},[129,59093,50636],{"class":51301},[129,59095,51317],{"class":1977},[129,59097,185],{"class":139},[129,59099,51322],{"class":244},[129,59101,51308],{"class":139},[129,59103,59104],{"class":131,"line":1209},[129,59105,2414],{"emptyLinePlaceholder":56},[129,59107,59108,59110,59112],{"class":131,"line":1215},[129,59109,1049],{"class":139},[129,59111,51335],{"class":51301},[129,59113,51308],{"class":139},[129,59115,59116,59118,59120,59122,59124,59126],{"class":131,"line":1229},[129,59117,52145],{"class":139},[129,59119,51345],{"class":51301},[129,59121,51348],{"class":1977},[129,59123,185],{"class":139},[129,59125,51353],{"class":244},[129,59127,59128],{"class":139}," \u002F>\n",[129,59130,59131,59133,59135,59137,59139,59141,59143,59145,59147],{"class":131,"line":1235},[129,59132,52145],{"class":139},[129,59134,51345],{"class":51301},[129,59136,51364],{"class":1977},[129,59138,185],{"class":139},[129,59140,51369],{"class":244},[129,59142,51372],{"class":1977},[129,59144,185],{"class":139},[129,59146,51377],{"class":244},[129,59148,59128],{"class":139},[129,59150,59151,59153,59155,59157,59159,59161,59163,59165,59167],{"class":131,"line":1326},[129,59152,52145],{"class":139},[129,59154,51345],{"class":51301},[129,59156,14935],{"class":1977},[129,59158,185],{"class":139},[129,59160,51392],{"class":244},[129,59162,51372],{"class":1977},[129,59164,185],{"class":139},[129,59166,51399],{"class":244},[129,59168,59128],{"class":139},[129,59170,59171,59173,59175,59178,59180],{"class":131,"line":1332},[129,59172,52145],{"class":139},[129,59174,51408],{"class":51301},[129,59176,59177],{"class":139},">轮播图点击切换\u003C\u002F",[129,59179,51408],{"class":51301},[129,59181,51308],{"class":139},[129,59183,59184,59186,59188],{"class":131,"line":1344},[129,59185,52145],{"class":139},[129,59187,5141],{"class":51301},[129,59189,51308],{"class":139},[129,59191,59192],{"class":131,"line":1626},[129,59193,59194],{"class":139},"    * {\n",[129,59196,59197],{"class":131,"line":1631},[129,59198,59199],{"class":139},"      box-sizing: border-box;\n",[129,59201,59202],{"class":131,"line":1637},[129,59203,2201],{"class":139},[129,59205,59206],{"class":131,"line":1642},[129,59207,2414],{"emptyLinePlaceholder":56},[129,59209,59210],{"class":131,"line":1656},[129,59211,59212],{"class":139},"    .slider {\n",[129,59214,59215],{"class":131,"line":1661},[129,59216,59217],{"class":139},"      width: 560px;\n",[129,59219,59220],{"class":131,"line":1667},[129,59221,59222],{"class":139},"      height: 400px;\n",[129,59224,59225],{"class":131,"line":1688},[129,59226,59227],{"class":139},"      overflow: hidden;\n",[129,59229,59230],{"class":131,"line":1693},[129,59231,2201],{"class":139},[129,59233,59234],{"class":131,"line":1707},[129,59235,2414],{"emptyLinePlaceholder":56},[129,59237,59238],{"class":131,"line":1712},[129,59239,59240],{"class":139},"    .slider-wrapper {\n",[129,59242,59243],{"class":131,"line":1741},[129,59244,59245],{"class":139},"      width: 100%;\n",[129,59247,59248],{"class":131,"line":1746},[129,59249,59250],{"class":139},"      height: 320px;\n",[129,59252,59253],{"class":131,"line":1763},[129,59254,2201],{"class":139},[129,59256,59257],{"class":131,"line":1768},[129,59258,2414],{"emptyLinePlaceholder":56},[129,59260,59261],{"class":131,"line":1773},[129,59262,59263],{"class":139},"    .slider-wrapper img {\n",[129,59265,59266],{"class":131,"line":1778},[129,59267,59245],{"class":139},[129,59269,59270],{"class":131,"line":1792},[129,59271,59272],{"class":139},"      height: 100%;\n",[129,59274,59275],{"class":131,"line":1797},[129,59276,59277],{"class":139},"      display: block;\n",[129,59279,59280],{"class":131,"line":2591},[129,59281,2201],{"class":139},[129,59283,59284],{"class":131,"line":2605},[129,59285,2414],{"emptyLinePlaceholder":56},[129,59287,59288],{"class":131,"line":2613},[129,59289,59290],{"class":139},"    .slider-footer {\n",[129,59292,59293],{"class":131,"line":2618},[129,59294,59295],{"class":139},"      height: 80px;\n",[129,59297,59298],{"class":131,"line":2624},[129,59299,59300],{"class":139},"      background-color: rgb(100, 67, 68);\n",[129,59302,59303],{"class":131,"line":2630},[129,59304,59305],{"class":139},"      padding: 12px 12px 0 12px;\n",[129,59307,59308],{"class":131,"line":2635},[129,59309,59310],{"class":139},"      position: relative;\n",[129,59312,59313],{"class":131,"line":7963},[129,59314,2201],{"class":139},[129,59316,59317],{"class":131,"line":7987},[129,59318,2414],{"emptyLinePlaceholder":56},[129,59320,59321],{"class":131,"line":7992},[129,59322,59323],{"class":139},"    .slider-footer .toggle {\n",[129,59325,59326],{"class":131,"line":7998},[129,59327,59328],{"class":139},"      position: absolute;\n",[129,59330,59331],{"class":131,"line":8025},[129,59332,59333],{"class":139},"      right: 0;\n",[129,59335,59336],{"class":131,"line":8030},[129,59337,59338],{"class":139},"      top: 12px;\n",[129,59340,59341],{"class":131,"line":8036},[129,59342,59343],{"class":139},"      display: flex;\n",[129,59345,59346],{"class":131,"line":8048},[129,59347,2201],{"class":139},[129,59349,59350],{"class":131,"line":8060},[129,59351,2414],{"emptyLinePlaceholder":56},[129,59353,59354],{"class":131,"line":8072},[129,59355,59356],{"class":139},"    .slider-footer .toggle button {\n",[129,59358,59359],{"class":131,"line":9731},[129,59360,59361],{"class":139},"      margin-right: 12px;\n",[129,59363,59364],{"class":131,"line":9756},[129,59365,59366],{"class":139},"      width: 28px;\n",[129,59368,59369],{"class":131,"line":9779},[129,59370,59371],{"class":139},"      height: 28px;\n",[129,59373,59374],{"class":131,"line":9803},[129,59375,59376],{"class":139},"      appearance: none;\n",[129,59378,59379],{"class":131,"line":9808},[129,59380,59381],{"class":139},"      border: none;\n",[129,59383,59384],{"class":131,"line":9813},[129,59385,59386],{"class":139},"      background: rgba(255, 255, 255, 0.1);\n",[129,59388,59389],{"class":131,"line":9818},[129,59390,59391],{"class":139},"      color: #fff;\n",[129,59393,59394],{"class":131,"line":9827},[129,59395,59396],{"class":139},"      border-radius: 4px;\n",[129,59398,59399],{"class":131,"line":9832},[129,59400,59401],{"class":139},"      cursor: pointer;\n",[129,59403,59404],{"class":131,"line":9838},[129,59405,2201],{"class":139},[129,59407,59408],{"class":131,"line":9859},[129,59409,2414],{"emptyLinePlaceholder":56},[129,59411,59412],{"class":131,"line":9865},[129,59413,59414],{"class":139},"    .slider-footer .toggle button:hover {\n",[129,59416,59417],{"class":131,"line":9879},[129,59418,59419],{"class":139},"      background: rgba(255, 255, 255, 0.2);\n",[129,59421,59422],{"class":131,"line":9885},[129,59423,2201],{"class":139},[129,59425,59426],{"class":131,"line":9912},[129,59427,2414],{"emptyLinePlaceholder":56},[129,59429,59430],{"class":131,"line":9921},[129,59431,59432],{"class":139},"    .slider-footer p {\n",[129,59434,59435],{"class":131,"line":9927},[129,59436,59437],{"class":139},"      margin: 0;\n",[129,59439,59440],{"class":131,"line":9935},[129,59441,59391],{"class":139},[129,59443,59444],{"class":131,"line":9940},[129,59445,59446],{"class":139},"      font-size: 18px;\n",[129,59448,59449],{"class":131,"line":16619},[129,59450,59451],{"class":139},"      margin-bottom: 10px;\n",[129,59453,59454],{"class":131,"line":16625},[129,59455,2201],{"class":139},[129,59457,59458],{"class":131,"line":16648},[129,59459,2414],{"emptyLinePlaceholder":56},[129,59461,59462],{"class":131,"line":16654},[129,59463,59464],{"class":139},"    .slider-indicator {\n",[129,59466,59467],{"class":131,"line":16677},[129,59468,59437],{"class":139},[129,59470,59471],{"class":131,"line":16691},[129,59472,59473],{"class":139},"      padding: 0;\n",[129,59475,59476],{"class":131,"line":16711},[129,59477,59478],{"class":139},"      list-style: none;\n",[129,59480,59481],{"class":131,"line":16717},[129,59482,59343],{"class":139},[129,59484,59485],{"class":131,"line":16728},[129,59486,59487],{"class":139},"      align-items: center;\n",[129,59489,59490],{"class":131,"line":16751},[129,59491,2201],{"class":139},[129,59493,59494],{"class":131,"line":16773},[129,59495,2414],{"emptyLinePlaceholder":56},[129,59497,59498],{"class":131,"line":16778},[129,59499,59500],{"class":139},"    .slider-indicator li {\n",[129,59502,59503],{"class":131,"line":16784},[129,59504,59505],{"class":139},"      width: 8px;\n",[129,59507,59508],{"class":131,"line":16798},[129,59509,59510],{"class":139},"      height: 8px;\n",[129,59512,59513],{"class":131,"line":16811},[129,59514,59515],{"class":139},"      margin: 4px;\n",[129,59517,59518],{"class":131,"line":16816},[129,59519,59520],{"class":139},"      border-radius: 50%;\n",[129,59522,59523],{"class":131,"line":16830},[129,59524,59525],{"class":139},"      background: #fff;\n",[129,59527,59528],{"class":131,"line":16835},[129,59529,59530],{"class":139},"      opacity: 0.4;\n",[129,59532,59533],{"class":131,"line":16841},[129,59534,59401],{"class":139},[129,59536,59537],{"class":131,"line":16846},[129,59538,2201],{"class":139},[129,59540,59541],{"class":131,"line":16860},[129,59542,2414],{"emptyLinePlaceholder":56},[129,59544,59545],{"class":131,"line":16865},[129,59546,59547],{"class":139},"    .slider-indicator li.active {\n",[129,59549,59550],{"class":131,"line":16870},[129,59551,59552],{"class":139},"      width: 12px;\n",[129,59554,59555],{"class":131,"line":16884},[129,59556,59557],{"class":139},"      height: 12px;\n",[129,59559,59560],{"class":131,"line":16896},[129,59561,59562],{"class":139},"      opacity: 1;\n",[129,59564,59565],{"class":131,"line":16901},[129,59566,2201],{"class":139},[129,59568,59569,59571,59573],{"class":131,"line":16914},[129,59570,52418],{"class":139},[129,59572,5141],{"class":51301},[129,59574,51308],{"class":139},[129,59576,59577,59579,59581],{"class":131,"line":16919},[129,59578,51786],{"class":139},[129,59580,51335],{"class":51301},[129,59582,51308],{"class":139},[129,59584,59585],{"class":131,"line":16924},[129,59586,2414],{"emptyLinePlaceholder":56},[129,59588,59589,59591,59593],{"class":131,"line":16929},[129,59590,1049],{"class":139},[129,59592,51801],{"class":51301},[129,59594,51308],{"class":139},[129,59596,59597,59599,59601,59603,59605,59608],{"class":131,"line":16942},[129,59598,52145],{"class":139},[129,59600,51612],{"class":51301},[129,59602,53487],{"class":1977},[129,59604,185],{"class":139},[129,59606,59607],{"class":244},"\"slider\"",[129,59609,51308],{"class":139},[129,59611,59612,59614,59616,59618,59620,59622],{"class":131,"line":16947},[129,59613,51342],{"class":139},[129,59615,51612],{"class":51301},[129,59617,53487],{"class":1977},[129,59619,185],{"class":139},[129,59621,55228],{"class":244},[129,59623,51308],{"class":139},[129,59625,59626,59628,59630,59632,59634,59637,59639,59641,59643],{"class":131,"line":32634},[129,59627,55235],{"class":139},[129,59629,40],{"class":51301},[129,59631,55240],{"class":1977},[129,59633,185],{"class":139},[129,59635,59636],{"class":244},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[129,59638,55248],{"class":1977},[129,59640,185],{"class":139},[129,59642,7667],{"class":244},[129,59644,59128],{"class":139},[129,59646,59647,59649,59651],{"class":131,"line":32640},[129,59648,51777],{"class":139},[129,59650,51612],{"class":51301},[129,59652,51308],{"class":139},[129,59654,59655,59657,59659,59661,59663,59665],{"class":131,"line":32646},[129,59656,51342],{"class":139},[129,59658,51612],{"class":51301},[129,59660,53487],{"class":1977},[129,59662,185],{"class":139},[129,59664,55275],{"class":244},[129,59666,51308],{"class":139},[129,59668,59669,59671,59673,59676,59678],{"class":131,"line":32652},[129,59670,55235],{"class":139},[129,59672,14],{"class":51301},[129,59674,59675],{"class":139},">对人类来说会不会太超前了？\u003C\u002F",[129,59677,14],{"class":51301},[129,59679,51308],{"class":139},[129,59681,59682,59684,59686,59688,59690,59693],{"class":131,"line":32658},[129,59683,55235],{"class":139},[129,59685,1146],{"class":51301},[129,59687,53487],{"class":1977},[129,59689,185],{"class":139},[129,59691,59692],{"class":244},"\"slider-indicator\"",[129,59694,51308],{"class":139},[129,59696,59697,59699,59701,59703,59705,59708,59710,59712],{"class":131,"line":32669},[129,59698,55303],{"class":139},[129,59700,86],{"class":51301},[129,59702,53487],{"class":1977},[129,59704,185],{"class":139},[129,59706,59707],{"class":244},"\"active\"",[129,59709,55315],{"class":139},[129,59711,86],{"class":51301},[129,59713,51308],{"class":139},[129,59715,59716,59718,59720,59722,59724],{"class":131,"line":32675},[129,59717,55303],{"class":139},[129,59719,86],{"class":51301},[129,59721,55315],{"class":139},[129,59723,86],{"class":51301},[129,59725,51308],{"class":139},[129,59727,59728,59730,59732,59734,59736],{"class":131,"line":32695},[129,59729,55303],{"class":139},[129,59731,86],{"class":51301},[129,59733,55315],{"class":139},[129,59735,86],{"class":51301},[129,59737,51308],{"class":139},[129,59739,59740,59742,59744,59746,59748],{"class":131,"line":32701},[129,59741,55303],{"class":139},[129,59743,86],{"class":51301},[129,59745,55315],{"class":139},[129,59747,86],{"class":51301},[129,59749,51308],{"class":139},[129,59751,59752,59754,59756,59758,59760],{"class":131,"line":32712},[129,59753,55303],{"class":139},[129,59755,86],{"class":51301},[129,59757,55315],{"class":139},[129,59759,86],{"class":51301},[129,59761,51308],{"class":139},[129,59763,59764,59766,59768,59770,59772],{"class":131,"line":32718},[129,59765,55303],{"class":139},[129,59767,86],{"class":51301},[129,59769,55315],{"class":139},[129,59771,86],{"class":51301},[129,59773,51308],{"class":139},[129,59775,59776,59778,59780,59782,59784],{"class":131,"line":32724},[129,59777,55303],{"class":139},[129,59779,86],{"class":51301},[129,59781,55315],{"class":139},[129,59783,86],{"class":51301},[129,59785,51308],{"class":139},[129,59787,59788,59790,59792,59794,59796],{"class":131,"line":32730},[129,59789,55303],{"class":139},[129,59791,86],{"class":51301},[129,59793,55315],{"class":139},[129,59795,86],{"class":51301},[129,59797,51308],{"class":139},[129,59799,59800,59802,59804],{"class":131,"line":32736},[129,59801,55408],{"class":139},[129,59803,1146],{"class":51301},[129,59805,51308],{"class":139},[129,59807,59808,59810,59812,59814,59816,59819],{"class":131,"line":32742},[129,59809,55235],{"class":139},[129,59811,51612],{"class":51301},[129,59813,53487],{"class":1977},[129,59815,185],{"class":139},[129,59817,59818],{"class":244},"\"toggle\"",[129,59820,51308],{"class":139},[129,59822,59823,59825,59827,59829,59831,59834,59836,59839,59841,59843],{"class":131,"line":32748},[129,59824,55303],{"class":139},[129,59826,53888],{"class":51301},[129,59828,53487],{"class":1977},[129,59830,185],{"class":139},[129,59832,59833],{"class":244},"\"prev\"",[129,59835,1099],{"class":139},[129,59837,59838],{"class":188},"&lt;",[129,59840,51786],{"class":139},[129,59842,53888],{"class":51301},[129,59844,51308],{"class":139},[129,59846,59847,59849,59851,59853,59855,59858,59860,59863,59865,59867],{"class":131,"line":32754},[129,59848,55303],{"class":139},[129,59850,53888],{"class":51301},[129,59852,53487],{"class":1977},[129,59854,185],{"class":139},[129,59856,59857],{"class":244},"\"next\"",[129,59859,1099],{"class":139},[129,59861,59862],{"class":188},"&gt;",[129,59864,51786],{"class":139},[129,59866,53888],{"class":51301},[129,59868,51308],{"class":139},[129,59870,59871,59873,59875],{"class":131,"line":32774},[129,59872,55408],{"class":139},[129,59874,51612],{"class":51301},[129,59876,51308],{"class":139},[129,59878,59879,59881,59883],{"class":131,"line":32780},[129,59880,51777],{"class":139},[129,59882,51612],{"class":51301},[129,59884,51308],{"class":139},[129,59886,59887,59889,59891],{"class":131,"line":32796},[129,59888,52418],{"class":139},[129,59890,51612],{"class":51301},[129,59892,51308],{"class":139},[129,59894,59895,59897,59899],{"class":131,"line":32802},[129,59896,52145],{"class":139},[129,59898,51814],{"class":51301},[129,59900,51308],{"class":139},[129,59902,59903],{"class":131,"line":32816},[129,59904,59905],{"class":139},"    \u002F\u002F 1. 初始数据\n",[129,59907,59908],{"class":131,"line":32822},[129,59909,59910],{"class":139},"    const data = [\n",[129,59912,59913],{"class":131,"line":32837},[129,59914,59915],{"class":139},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[129,59917,59918],{"class":131,"line":32843},[129,59919,59920],{"class":139},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[129,59922,59923],{"class":131,"line":32852},[129,59924,59925],{"class":139},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[129,59927,59928],{"class":131,"line":32858},[129,59929,59930],{"class":139},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[129,59932,59933],{"class":131,"line":32867},[129,59934,59935],{"class":139},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[129,59937,59938],{"class":131,"line":32873},[129,59939,59940],{"class":139},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[129,59942,59943],{"class":131,"line":32879},[129,59944,59945],{"class":139},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[129,59947,59948],{"class":131,"line":32888},[129,59949,59950],{"class":139},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[129,59952,59953],{"class":131,"line":32894},[129,59954,53110],{"class":139},[129,59956,59957],{"class":131,"line":32905},[129,59958,59959],{"class":139},"    \u002F\u002F 获取元素\n",[129,59961,59962],{"class":131,"line":32911},[129,59963,59964],{"class":139},"    const img = document.querySelector('.slider-wrapper img')\n",[129,59966,59967],{"class":131,"line":32930},[129,59968,59969],{"class":139},"    const p = document.querySelector('.slider-footer p')\n",[129,59971,59972],{"class":131,"line":32936},[129,59973,59974],{"class":139},"    const footer = document.querySelector('.slider-footer')\n",[129,59976,59977],{"class":131,"line":32947},[129,59978,59979],{"class":139},"    \u002F\u002F 1. 右按钮业务\n",[129,59981,59982],{"class":131,"line":32953},[129,59983,59984],{"class":139},"    \u002F\u002F 1.1 获取右侧按钮 \n",[129,59986,59987],{"class":131,"line":32973},[129,59988,59989],{"class":139},"    const next = document.querySelector('.next')\n",[129,59991,59992],{"class":131,"line":32989},[129,59993,59994],{"class":139},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[129,59996,59997],{"class":131,"line":32995},[129,59998,59999],{"class":139},"    \u002F\u002F 1.2 注册点击事件\n",[129,60001,60002],{"class":131,"line":33009},[129,60003,2414],{"emptyLinePlaceholder":56},[129,60005,60006],{"class":131,"line":33015},[129,60007,60008],{"class":139},"    next.addEventListener('click', function () {\n",[129,60010,60011],{"class":131,"line":33021},[129,60012,60013],{"class":139},"      \u002F\u002F console.log(11)\n",[129,60015,60016],{"class":131,"line":33032},[129,60017,60018],{"class":139},"      i++\n",[129,60020,60021],{"class":131,"line":33038},[129,60022,60023],{"class":139},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[129,60025,60026],{"class":131,"line":33044},[129,60027,60028],{"class":139},"      \u002F\u002F if (i >= 8) {\n",[129,60030,60031],{"class":131,"line":33054},[129,60032,60033],{"class":139},"      \u002F\u002F   i = 0\n",[129,60035,60036],{"class":131,"line":33060},[129,60037,60038],{"class":139},"      \u002F\u002F }\n",[129,60040,60041],{"class":131,"line":33071},[129,60042,60043],{"class":139},"      i = i >= data.length ? 0 : i\n",[129,60045,60046],{"class":131,"line":33077},[129,60047,60048],{"class":139},"      \u002F\u002F 1.3 得到对应的对象\n",[129,60050,60051],{"class":131,"line":33087},[129,60052,60053],{"class":139},"      \u002F\u002F console.log(data[i])\n",[129,60055,60056],{"class":131,"line":33092},[129,60057,60058],{"class":139},"      \u002F\u002F 调用函数\n",[129,60060,60061],{"class":131,"line":33098},[129,60062,60063],{"class":139},"      toggle()\n",[129,60065,60066],{"class":131,"line":33147},[129,60067,33462],{"class":139},[129,60069,60070],{"class":131,"line":33194},[129,60071,2414],{"emptyLinePlaceholder":56},[129,60073,60074],{"class":131,"line":33199},[129,60075,60076],{"class":139},"    \u002F\u002F 2. 左侧按钮业务\n",[129,60078,60079],{"class":131,"line":33205},[129,60080,60081],{"class":139},"    \u002F\u002F 2.1 获取左侧按钮 \n",[129,60083,60084],{"class":131,"line":33224},[129,60085,60086],{"class":139},"    const prev = document.querySelector('.prev')\n",[129,60088,60089],{"class":131,"line":33230},[129,60090,59999],{"class":139},[129,60092,60093],{"class":131,"line":33250},[129,60094,60095],{"class":139},"    prev.addEventListener('click', function () {\n",[129,60097,60098],{"class":131,"line":33256},[129,60099,60100],{"class":139},"      i--\n",[129,60102,60103],{"class":131,"line":33262},[129,60104,60105],{"class":139},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[129,60107,60108],{"class":131,"line":33272},[129,60109,60110],{"class":139},"      \u002F\u002F if (i \u003C 0) {\n",[129,60112,60113],{"class":131,"line":33277},[129,60114,60115],{"class":139},"      \u002F\u002F   i = 7\n",[129,60117,60118],{"class":131,"line":33283},[129,60119,60038],{"class":139},[129,60121,60122],{"class":131,"line":33299},[129,60123,60124],{"class":139},"      i = i \u003C 0 ? data.length - 1 : i\n",[129,60126,60127],{"class":131,"line":33344},[129,60128,60048],{"class":139},[129,60130,60131],{"class":131,"line":33350},[129,60132,60053],{"class":139},[129,60134,60135],{"class":131,"line":33356},[129,60136,60058],{"class":139},[129,60138,60139],{"class":131,"line":33362},[129,60140,60063],{"class":139},[129,60142,60143],{"class":131,"line":33373},[129,60144,33462],{"class":139},[129,60146,60147],{"class":131,"line":33379},[129,60148,2414],{"emptyLinePlaceholder":56},[129,60150,60151],{"class":131,"line":33385},[129,60152,60153],{"class":139},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[129,60155,60156],{"class":131,"line":33391},[129,60157,60158],{"class":139},"    function toggle() {\n",[129,60160,60161],{"class":131,"line":33409},[129,60162,60163],{"class":139},"      \u002F\u002F 1.4 渲染对应的数据\n",[129,60165,60166],{"class":131,"line":33423},[129,60167,60168],{"class":139},"      img.src = data[i].url\n",[129,60170,60171],{"class":131,"line":33432},[129,60172,60173],{"class":139},"      p.innerHTML = data[i].title\n",[129,60175,60176],{"class":131,"line":33441},[129,60177,60178],{"class":139},"      footer.style.backgroundColor = data[i].color\n",[129,60180,60181],{"class":131,"line":33450},[129,60182,60183],{"class":139},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[129,60185,60186],{"class":131,"line":33459},[129,60187,60188],{"class":139},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[129,60190,60191],{"class":131,"line":33465},[129,60192,60193],{"class":139},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[129,60195,60196],{"class":131,"line":33471},[129,60197,2201],{"class":139},[129,60199,60200],{"class":131,"line":33479},[129,60201,2414],{"emptyLinePlaceholder":56},[129,60203,60204],{"class":131,"line":33484},[129,60205,60206],{"class":139},"    \u002F\u002F 3. 自动播放模块\n",[129,60208,60209],{"class":131,"line":33490},[129,60210,60211],{"class":139},"    let timerId = setInterval(function () {\n",[129,60213,60214],{"class":131,"line":33501},[129,60215,60216],{"class":139},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[129,60218,60219],{"class":131,"line":33507},[129,60220,60221],{"class":139},"      next.click()\n",[129,60223,60224],{"class":131,"line":33527},[129,60225,60226],{"class":139},"    }, 1000)\n",[129,60228,60229],{"class":131,"line":33533},[129,60230,2414],{"emptyLinePlaceholder":56},[129,60232,60233],{"class":131,"line":33539},[129,60234,60235],{"class":139},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[129,60237,60238],{"class":131,"line":33545},[129,60239,60240],{"class":139},"    const slider = document.querySelector('.slider')\n",[129,60242,60243],{"class":131,"line":33562},[129,60244,60245],{"class":139},"    \u002F\u002F 注册事件\n",[129,60247,60248],{"class":131,"line":33568},[129,60249,60250],{"class":139},"    slider.addEventListener('mouseenter', function () {\n",[129,60252,60253],{"class":131,"line":33574},[129,60254,60255],{"class":139},"      \u002F\u002F 停止定时器\n",[129,60257,60258],{"class":131,"line":33580},[129,60259,60260],{"class":139},"      clearInterval(timerId)\n",[129,60262,60263],{"class":131,"line":33586},[129,60264,33462],{"class":139},[129,60266,60267],{"class":131,"line":33592},[129,60268,2414],{"emptyLinePlaceholder":56},[129,60270,60271],{"class":131,"line":33619},[129,60272,60273],{"class":139},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[129,60275,60276],{"class":131,"line":33643},[129,60277,60245],{"class":139},[129,60279,60280],{"class":131,"line":33649},[129,60281,60282],{"class":139},"    slider.addEventListener('mouseleave', function () {\n",[129,60284,60285],{"class":131,"line":33655},[129,60286,60255],{"class":139},[129,60288,60289],{"class":131,"line":33661},[129,60290,60291],{"class":139},"      if (timerId) clearInterval(timerId)\n",[129,60293,60294],{"class":131,"line":33672},[129,60295,60296],{"class":139},"      \u002F\u002F 开启定时器\n",[129,60298,60299],{"class":131,"line":33683},[129,60300,60301],{"class":139},"      timerId = setInterval(function () {\n",[129,60303,60304],{"class":131,"line":33689},[129,60305,60306],{"class":139},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[129,60308,60309],{"class":131,"line":33706},[129,60310,60311],{"class":139},"        next.click()\n",[129,60313,60314],{"class":131,"line":33729},[129,60315,60316],{"class":139},"      }, 1000)\n",[129,60318,60319],{"class":131,"line":33752},[129,60320,33462],{"class":139},[129,60322,60323,60325,60327],{"class":131,"line":33758},[129,60324,52418],{"class":139},[129,60326,51814],{"class":51301},[129,60328,51308],{"class":139},[129,60330,60331,60333,60335],{"class":131,"line":33763},[129,60332,51786],{"class":139},[129,60334,51801],{"class":51301},[129,60336,51308],{"class":139},[129,60338,60339],{"class":131,"line":33772},[129,60340,2414],{"emptyLinePlaceholder":56},[129,60342,60343,60345,60347],{"class":131,"line":33782},[129,60344,51786],{"class":139},[129,60346,50636],{"class":51301},[129,60348,51308],{"class":139},[22013,60350,60352],{"id":60351},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60354,60355],{},"小米搜索框案例：",[120,60357,60359],{"className":50634,"code":60358,"language":50636,"meta":42,"style":42},"\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",[126,60360,60361,60371,60385,60389,60397,60411,60431,60451,60463,60471,60477,60487,60497,60509,60513,60517,60524,60528,60539,60543,60547,60554,60565,60578,60592,60596,60600,60609,60621,60633,60647,60660,60673,60691,60702,60706,60710,60719,60736,60740,60744,60751,60761,60771,60782,60795,60807,60823,60834,60846,60850,60854,60862,60873,60890,60902,60914,60925,60929,60933,60944,60955,60959,60967,60971,60979,60983,60991,61006,61029,61044,61075,61102,61129,61156,61183,61210,61237,61246,61254,61262,61267,61287,61307,61312,61317,61335,61340,61350,61355,61369,61374,61379,61396,61405,61417,61421,61429,61437,61441],{"__ignoreMap":42},[129,60362,60363,60365,60367,60369],{"class":131,"line":132},[129,60364,51298],{"class":139},[129,60366,51302],{"class":51301},[129,60368,51305],{"class":1977},[129,60370,51308],{"class":139},[129,60372,60373,60375,60377,60379,60381,60383],{"class":131,"line":51},[129,60374,1049],{"class":139},[129,60376,50636],{"class":51301},[129,60378,51317],{"class":1977},[129,60380,185],{"class":139},[129,60382,51322],{"class":244},[129,60384,51308],{"class":139},[129,60386,60387],{"class":131,"line":1194},[129,60388,2414],{"emptyLinePlaceholder":56},[129,60390,60391,60393,60395],{"class":131,"line":1209},[129,60392,1049],{"class":139},[129,60394,51335],{"class":51301},[129,60396,51308],{"class":139},[129,60398,60399,60401,60403,60405,60407,60409],{"class":131,"line":1215},[129,60400,51342],{"class":139},[129,60402,51345],{"class":51301},[129,60404,51348],{"class":1977},[129,60406,185],{"class":139},[129,60408,51353],{"class":244},[129,60410,51308],{"class":139},[129,60412,60413,60415,60417,60419,60421,60423,60425,60427,60429],{"class":131,"line":1229},[129,60414,51342],{"class":139},[129,60416,51345],{"class":51301},[129,60418,51364],{"class":1977},[129,60420,185],{"class":139},[129,60422,51369],{"class":244},[129,60424,51372],{"class":1977},[129,60426,185],{"class":139},[129,60428,51377],{"class":244},[129,60430,51308],{"class":139},[129,60432,60433,60435,60437,60439,60441,60443,60445,60447,60449],{"class":131,"line":1235},[129,60434,51342],{"class":139},[129,60436,51345],{"class":51301},[129,60438,14935],{"class":1977},[129,60440,185],{"class":139},[129,60442,51392],{"class":244},[129,60444,51372],{"class":1977},[129,60446,185],{"class":139},[129,60448,51399],{"class":244},[129,60450,51308],{"class":139},[129,60452,60453,60455,60457,60459,60461],{"class":131,"line":1326},[129,60454,51342],{"class":139},[129,60456,51408],{"class":51301},[129,60458,51411],{"class":139},[129,60460,51408],{"class":51301},[129,60462,51308],{"class":139},[129,60464,60465,60467,60469],{"class":131,"line":1332},[129,60466,51342],{"class":139},[129,60468,5141],{"class":51301},[129,60470,51308],{"class":139},[129,60472,60473,60475],{"class":131,"line":1344},[129,60474,51428],{"class":51301},[129,60476,15587],{"class":139},[129,60478,60479,60481,60483,60485],{"class":131,"line":1626},[129,60480,51435],{"class":188},[129,60482,51438],{"class":139},[129,60484,331],{"class":188},[129,60486,1305],{"class":139},[129,60488,60489,60491,60493,60495],{"class":131,"line":1631},[129,60490,51447],{"class":188},[129,60492,51438],{"class":139},[129,60494,331],{"class":188},[129,60496,1305],{"class":139},[129,60498,60499,60502,60504,60507],{"class":131,"line":1637},[129,60500,60501],{"class":188},"            box-sizing",[129,60503,51438],{"class":139},[129,60505,60506],{"class":188},"border-box",[129,60508,1305],{"class":139},[129,60510,60511],{"class":131,"line":1642},[129,60512,2543],{"class":139},[129,60514,60515],{"class":131,"line":1656},[129,60516,2414],{"emptyLinePlaceholder":56},[129,60518,60519,60522],{"class":131,"line":1661},[129,60520,60521],{"class":51301},"        ul",[129,60523,15587],{"class":139},[129,60525,60526],{"class":131,"line":1667},[129,60527,2414],{"emptyLinePlaceholder":56},[129,60529,60530,60533,60535,60537],{"class":131,"line":1688},[129,60531,60532],{"class":188},"            list-style",[129,60534,51438],{"class":139},[129,60536,54738],{"class":188},[129,60538,1305],{"class":139},[129,60540,60541],{"class":131,"line":1693},[129,60542,2543],{"class":139},[129,60544,60545],{"class":131,"line":1707},[129,60546,2414],{"emptyLinePlaceholder":56},[129,60548,60549,60552],{"class":131,"line":1712},[129,60550,60551],{"class":1977},"        .mi",[129,60553,15587],{"class":139},[129,60555,60556,60559,60561,60563],{"class":131,"line":1741},[129,60557,60558],{"class":188},"            position",[129,60560,51438],{"class":139},[129,60562,54765],{"class":188},[129,60564,1305],{"class":139},[129,60566,60567,60569,60571,60574,60576],{"class":131,"line":1746},[129,60568,51485],{"class":188},[129,60570,51438],{"class":139},[129,60572,60573],{"class":188},"223",[129,60575,51493],{"class":135},[129,60577,1305],{"class":139},[129,60579,60580,60582,60584,60586,60588,60590],{"class":131,"line":1763},[129,60581,51435],{"class":188},[129,60583,51438],{"class":139},[129,60585,450],{"class":188},[129,60587,51493],{"class":135},[129,60589,51557],{"class":188},[129,60591,1305],{"class":139},[129,60593,60594],{"class":131,"line":1768},[129,60595,2543],{"class":139},[129,60597,60598],{"class":131,"line":1773},[129,60599,2414],{"emptyLinePlaceholder":56},[129,60601,60602,60604,60607],{"class":131,"line":1778},[129,60603,60551],{"class":1977},[129,60605,60606],{"class":51301}," input",[129,60608,15587],{"class":139},[129,60610,60611,60613,60615,60617,60619],{"class":131,"line":1792},[129,60612,51485],{"class":188},[129,60614,51438],{"class":139},[129,60616,60573],{"class":188},[129,60618,51493],{"class":135},[129,60620,1305],{"class":139},[129,60622,60623,60625,60627,60629,60631],{"class":131,"line":1797},[129,60624,51500],{"class":188},[129,60626,51438],{"class":139},[129,60628,746],{"class":188},[129,60630,51493],{"class":135},[129,60632,1305],{"class":139},[129,60634,60635,60637,60639,60641,60643,60645],{"class":131,"line":2591},[129,60636,51447],{"class":188},[129,60638,51438],{"class":139},[129,60640,331],{"class":188},[129,60642,2052],{"class":188},[129,60644,51493],{"class":135},[129,60646,1305],{"class":139},[129,60648,60649,60652,60654,60656,60658],{"class":131,"line":2605},[129,60650,60651],{"class":188},"            font-size",[129,60653,51438],{"class":139},[129,60655,688],{"class":188},[129,60657,51493],{"class":135},[129,60659,1305],{"class":139},[129,60661,60662,60665,60667,60669,60671],{"class":131,"line":2613},[129,60663,60664],{"class":188},"            line-height",[129,60666,51438],{"class":139},[129,60668,746],{"class":188},[129,60670,51493],{"class":135},[129,60672,1305],{"class":139},[129,60674,60675,60678,60680,60682,60684,60686,60689],{"class":131,"line":2618},[129,60676,60677],{"class":188},"            border",[129,60679,51438],{"class":139},[129,60681,357],{"class":188},[129,60683,51493],{"class":135},[129,60685,51522],{"class":188},[129,60687,60688],{"class":188}," #e0e0e0",[129,60690,1305],{"class":139},[129,60692,60693,60696,60698,60700],{"class":131,"line":2624},[129,60694,60695],{"class":188},"            outline",[129,60697,51438],{"class":139},[129,60699,54738],{"class":188},[129,60701,1305],{"class":139},[129,60703,60704],{"class":131,"line":2630},[129,60705,2543],{"class":139},[129,60707,60708],{"class":131,"line":2635},[129,60709,2414],{"emptyLinePlaceholder":56},[129,60711,60712,60714,60717],{"class":131,"line":7963},[129,60713,60551],{"class":1977},[129,60715,60716],{"class":1977}," .search",[129,60718,15587],{"class":139},[129,60720,60721,60723,60725,60727,60729,60731,60734],{"class":131,"line":7987},[129,60722,60677],{"class":188},[129,60724,51438],{"class":139},[129,60726,357],{"class":188},[129,60728,51493],{"class":135},[129,60730,51522],{"class":188},[129,60732,60733],{"class":188}," #ff6700",[129,60735,1305],{"class":139},[129,60737,60738],{"class":131,"line":7992},[129,60739,2543],{"class":139},[129,60741,60742],{"class":131,"line":7998},[129,60743,2414],{"emptyLinePlaceholder":56},[129,60745,60746,60749],{"class":131,"line":8025},[129,60747,60748],{"class":1977},"        .result-list",[129,60750,15587],{"class":139},[129,60752,60753,60755,60757,60759],{"class":131,"line":8030},[129,60754,51473],{"class":188},[129,60756,51438],{"class":139},[129,60758,54738],{"class":188},[129,60760,1305],{"class":139},[129,60762,60763,60765,60767,60769],{"class":131,"line":8036},[129,60764,60558],{"class":188},[129,60766,51438],{"class":139},[129,60768,54832],{"class":188},[129,60770,1305],{"class":139},[129,60772,60773,60776,60778,60780],{"class":131,"line":8048},[129,60774,60775],{"class":188},"            left",[129,60777,51438],{"class":139},[129,60779,331],{"class":188},[129,60781,1305],{"class":139},[129,60783,60784,60787,60789,60791,60793],{"class":131,"line":8060},[129,60785,60786],{"class":188},"            top",[129,60788,51438],{"class":139},[129,60790,746],{"class":188},[129,60792,51493],{"class":135},[129,60794,1305],{"class":139},[129,60796,60797,60799,60801,60803,60805],{"class":131,"line":8072},[129,60798,51485],{"class":188},[129,60800,51438],{"class":139},[129,60802,60573],{"class":188},[129,60804,51493],{"class":135},[129,60806,1305],{"class":139},[129,60808,60809,60811,60813,60815,60817,60819,60821],{"class":131,"line":9731},[129,60810,60677],{"class":188},[129,60812,51438],{"class":139},[129,60814,357],{"class":188},[129,60816,51493],{"class":135},[129,60818,51522],{"class":188},[129,60820,60733],{"class":188},[129,60822,1305],{"class":139},[129,60824,60825,60828,60830,60832],{"class":131,"line":9756},[129,60826,60827],{"class":188},"            border-top",[129,60829,51438],{"class":139},[129,60831,331],{"class":188},[129,60833,1305],{"class":139},[129,60835,60836,60839,60841,60844],{"class":131,"line":9779},[129,60837,60838],{"class":188},"            background",[129,60840,51438],{"class":139},[129,60842,60843],{"class":188},"#fff",[129,60845,1305],{"class":139},[129,60847,60848],{"class":131,"line":9803},[129,60849,2543],{"class":139},[129,60851,60852],{"class":131,"line":9808},[129,60853,2414],{"emptyLinePlaceholder":56},[129,60855,60856,60858,60860],{"class":131,"line":9813},[129,60857,60748],{"class":1977},[129,60859,1413],{"class":51301},[129,60861,15587],{"class":139},[129,60863,60864,60866,60868,60871],{"class":131,"line":9818},[129,60865,51473],{"class":188},[129,60867,51438],{"class":139},[129,60869,60870],{"class":188},"block",[129,60872,1305],{"class":139},[129,60874,60875,60877,60879,60881,60883,60886,60888],{"class":131,"line":9827},[129,60876,51447],{"class":188},[129,60878,51438],{"class":139},[129,60880,483],{"class":188},[129,60882,51493],{"class":135},[129,60884,60885],{"class":188}," 15",[129,60887,51493],{"class":135},[129,60889,1305],{"class":139},[129,60891,60892,60894,60896,60898,60900],{"class":131,"line":9832},[129,60893,60651],{"class":188},[129,60895,51438],{"class":139},[129,60897,637],{"class":188},[129,60899,51493],{"class":135},[129,60901,1305],{"class":139},[129,60903,60904,60907,60909,60912],{"class":131,"line":9838},[129,60905,60906],{"class":188},"            color",[129,60908,51438],{"class":139},[129,60910,60911],{"class":188},"#424242",[129,60913,1305],{"class":139},[129,60915,60916,60919,60921,60923],{"class":131,"line":9859},[129,60917,60918],{"class":188},"            text-decoration",[129,60920,51438],{"class":139},[129,60922,54738],{"class":188},[129,60924,1305],{"class":139},[129,60926,60927],{"class":131,"line":9865},[129,60928,2543],{"class":139},[129,60930,60931],{"class":131,"line":9879},[129,60932,2414],{"emptyLinePlaceholder":56},[129,60934,60935,60937,60939,60942],{"class":131,"line":9885},[129,60936,60748],{"class":1977},[129,60938,1413],{"class":51301},[129,60940,60941],{"class":1977},":hover",[129,60943,15587],{"class":139},[129,60945,60946,60948,60950,60953],{"class":131,"line":9912},[129,60947,51641],{"class":188},[129,60949,51438],{"class":139},[129,60951,60952],{"class":188},"#eee",[129,60954,1305],{"class":139},[129,60956,60957],{"class":131,"line":9921},[129,60958,2543],{"class":139},[129,60960,60961,60963,60965],{"class":131,"line":9927},[129,60962,51777],{"class":139},[129,60964,5141],{"class":51301},[129,60966,51308],{"class":139},[129,60968,60969],{"class":131,"line":9935},[129,60970,2414],{"emptyLinePlaceholder":56},[129,60972,60973,60975,60977],{"class":131,"line":9940},[129,60974,51786],{"class":139},[129,60976,51335],{"class":51301},[129,60978,51308],{"class":139},[129,60980,60981],{"class":131,"line":16619},[129,60982,2414],{"emptyLinePlaceholder":56},[129,60984,60985,60987,60989],{"class":131,"line":16625},[129,60986,1049],{"class":139},[129,60988,51801],{"class":51301},[129,60990,51308],{"class":139},[129,60992,60993,60995,60997,60999,61001,61004],{"class":131,"line":16648},[129,60994,51342],{"class":139},[129,60996,51612],{"class":51301},[129,60998,53487],{"class":1977},[129,61000,185],{"class":139},[129,61002,61003],{"class":244},"\"mi\"",[129,61005,51308],{"class":139},[129,61007,61008,61010,61012,61014,61016,61019,61022,61024,61027],{"class":131,"line":16654},[129,61009,55303],{"class":139},[129,61011,53822],{"class":51301},[129,61013,53825],{"class":1977},[129,61015,185],{"class":139},[129,61017,61018],{"class":244},"\"search\"",[129,61020,61021],{"class":1977}," placeholder",[129,61023,185],{"class":139},[129,61025,61026],{"class":244},"\"小米笔记本\"",[129,61028,51308],{"class":139},[129,61030,61031,61033,61035,61037,61039,61042],{"class":131,"line":16677},[129,61032,55303],{"class":139},[129,61034,1146],{"class":51301},[129,61036,53487],{"class":1977},[129,61038,185],{"class":139},[129,61040,61041],{"class":244},"\"result-list\"",[129,61043,51308],{"class":139},[129,61045,61046,61049,61051,61054,61056,61059,61061,61064,61067,61069,61071,61073],{"class":131,"line":16691},[129,61047,61048],{"class":139},"            \u003C",[129,61050,86],{"class":51301},[129,61052,61053],{"class":139},">\u003C",[129,61055,20],{"class":51301},[129,61057,61058],{"class":1977}," href",[129,61060,185],{"class":139},[129,61062,61063],{"class":244},"\"#\"",[129,61065,61066],{"class":139},">全部商品\u003C\u002F",[129,61068,20],{"class":51301},[129,61070,55315],{"class":139},[129,61072,86],{"class":51301},[129,61074,51308],{"class":139},[129,61076,61077,61079,61081,61083,61085,61087,61089,61091,61094,61096,61098,61100],{"class":131,"line":16711},[129,61078,61048],{"class":139},[129,61080,86],{"class":51301},[129,61082,61053],{"class":139},[129,61084,20],{"class":51301},[129,61086,61058],{"class":1977},[129,61088,185],{"class":139},[129,61090,61063],{"class":244},[129,61092,61093],{"class":139},">小米11\u003C\u002F",[129,61095,20],{"class":51301},[129,61097,55315],{"class":139},[129,61099,86],{"class":51301},[129,61101,51308],{"class":139},[129,61103,61104,61106,61108,61110,61112,61114,61116,61118,61121,61123,61125,61127],{"class":131,"line":16717},[129,61105,61048],{"class":139},[129,61107,86],{"class":51301},[129,61109,61053],{"class":139},[129,61111,20],{"class":51301},[129,61113,61058],{"class":1977},[129,61115,185],{"class":139},[129,61117,61063],{"class":244},[129,61119,61120],{"class":139},">小米10S\u003C\u002F",[129,61122,20],{"class":51301},[129,61124,55315],{"class":139},[129,61126,86],{"class":51301},[129,61128,51308],{"class":139},[129,61130,61131,61133,61135,61137,61139,61141,61143,61145,61148,61150,61152,61154],{"class":131,"line":16728},[129,61132,61048],{"class":139},[129,61134,86],{"class":51301},[129,61136,61053],{"class":139},[129,61138,20],{"class":51301},[129,61140,61058],{"class":1977},[129,61142,185],{"class":139},[129,61144,61063],{"class":244},[129,61146,61147],{"class":139},">小米笔记本\u003C\u002F",[129,61149,20],{"class":51301},[129,61151,55315],{"class":139},[129,61153,86],{"class":51301},[129,61155,51308],{"class":139},[129,61157,61158,61160,61162,61164,61166,61168,61170,61172,61175,61177,61179,61181],{"class":131,"line":16751},[129,61159,61048],{"class":139},[129,61161,86],{"class":51301},[129,61163,61053],{"class":139},[129,61165,20],{"class":51301},[129,61167,61058],{"class":1977},[129,61169,185],{"class":139},[129,61171,61063],{"class":244},[129,61173,61174],{"class":139},">小米手机\u003C\u002F",[129,61176,20],{"class":51301},[129,61178,55315],{"class":139},[129,61180,86],{"class":51301},[129,61182,51308],{"class":139},[129,61184,61185,61187,61189,61191,61193,61195,61197,61199,61202,61204,61206,61208],{"class":131,"line":16773},[129,61186,61048],{"class":139},[129,61188,86],{"class":51301},[129,61190,61053],{"class":139},[129,61192,20],{"class":51301},[129,61194,61058],{"class":1977},[129,61196,185],{"class":139},[129,61198,61063],{"class":244},[129,61200,61201],{"class":139},">黑鲨4\u003C\u002F",[129,61203,20],{"class":51301},[129,61205,55315],{"class":139},[129,61207,86],{"class":51301},[129,61209,51308],{"class":139},[129,61211,61212,61214,61216,61218,61220,61222,61224,61226,61229,61231,61233,61235],{"class":131,"line":16778},[129,61213,61048],{"class":139},[129,61215,86],{"class":51301},[129,61217,61053],{"class":139},[129,61219,20],{"class":51301},[129,61221,61058],{"class":1977},[129,61223,185],{"class":139},[129,61225,61063],{"class":244},[129,61227,61228],{"class":139},">空调\u003C\u002F",[129,61230,20],{"class":51301},[129,61232,55315],{"class":139},[129,61234,86],{"class":51301},[129,61236,51308],{"class":139},[129,61238,61239,61242,61244],{"class":131,"line":16784},[129,61240,61241],{"class":139},"        \u003C\u002F",[129,61243,1146],{"class":51301},[129,61245,51308],{"class":139},[129,61247,61248,61250,61252],{"class":131,"line":16798},[129,61249,51777],{"class":139},[129,61251,51612],{"class":51301},[129,61253,51308],{"class":139},[129,61255,61256,61258,61260],{"class":131,"line":16811},[129,61257,51342],{"class":139},[129,61259,51814],{"class":51301},[129,61261,51308],{"class":139},[129,61263,61264],{"class":131,"line":16816},[129,61265,61266],{"class":198},"        \u002F\u002F 1. 获取元素\n",[129,61268,61269,61272,61274,61276,61278,61280,61282,61285],{"class":131,"line":16830},[129,61270,61271],{"class":135},"        const",[129,61273,60606],{"class":188},[129,61275,13579],{"class":135},[129,61277,54397],{"class":139},[129,61279,54400],{"class":1977},[129,61281,140],{"class":139},[129,61283,61284],{"class":244},"'[type=search]'",[129,61286,146],{"class":139},[129,61288,61289,61291,61294,61296,61298,61300,61302,61305],{"class":131,"line":16835},[129,61290,61271],{"class":135},[129,61292,61293],{"class":188}," ul",[129,61295,13579],{"class":135},[129,61297,54397],{"class":139},[129,61299,54400],{"class":1977},[129,61301,140],{"class":139},[129,61303,61304],{"class":244},"'.result-list'",[129,61306,146],{"class":139},[129,61308,61309],{"class":131,"line":16841},[129,61310,61311],{"class":198},"        \u002F\u002F console.log(input)\n",[129,61313,61314],{"class":131,"line":16846},[129,61315,61316],{"class":198},"        \u002F\u002F 2. 监听事件 获得焦点\n",[129,61318,61319,61322,61324,61326,61329,61331,61333],{"class":131,"line":16860},[129,61320,61321],{"class":139},"        input.",[129,61323,57814],{"class":1977},[129,61325,140],{"class":139},[129,61327,61328],{"class":244},"'focus'",[129,61330,12450],{"class":139},[129,61332,54450],{"class":135},[129,61334,54453],{"class":139},[129,61336,61337],{"class":131,"line":16865},[129,61338,61339],{"class":198},"            \u002F\u002F ul显示\n",[129,61341,61342,61345,61347],{"class":131,"line":16870},[129,61343,61344],{"class":139},"            ul.style.display ",[129,61346,185],{"class":135},[129,61348,61349],{"class":244}," 'block'\n",[129,61351,61352],{"class":131,"line":16884},[129,61353,61354],{"class":198},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[129,61356,61357,61360,61362,61364,61367],{"class":131,"line":16896},[129,61358,61359],{"class":139},"            input.classList.",[129,61361,5349],{"class":1977},[129,61363,140],{"class":139},[129,61365,61366],{"class":244},"'search'",[129,61368,146],{"class":139},[129,61370,61371],{"class":131,"line":16901},[129,61372,61373],{"class":139},"        })\n",[129,61375,61376],{"class":131,"line":16914},[129,61377,61378],{"class":198},"        \u002F\u002F 3. 监听事件 失去焦点\n",[129,61380,61381,61383,61385,61387,61390,61392,61394],{"class":131,"line":16919},[129,61382,61321],{"class":139},[129,61384,57814],{"class":1977},[129,61386,140],{"class":139},[129,61388,61389],{"class":244},"'blur'",[129,61391,12450],{"class":139},[129,61393,54450],{"class":135},[129,61395,54453],{"class":139},[129,61397,61398,61400,61402],{"class":131,"line":16924},[129,61399,61344],{"class":139},[129,61401,185],{"class":135},[129,61403,61404],{"class":244}," 'none'\n",[129,61406,61407,61409,61411,61413,61415],{"class":131,"line":16929},[129,61408,61359],{"class":139},[129,61410,57007],{"class":1977},[129,61412,140],{"class":139},[129,61414,61366],{"class":244},[129,61416,146],{"class":139},[129,61418,61419],{"class":131,"line":16942},[129,61420,61373],{"class":139},[129,61422,61423,61425,61427],{"class":131,"line":16947},[129,61424,51777],{"class":139},[129,61426,51814],{"class":51301},[129,61428,51308],{"class":139},[129,61430,61431,61433,61435],{"class":131,"line":32634},[129,61432,51786],{"class":139},[129,61434,51801],{"class":51301},[129,61436,51308],{"class":139},[129,61438,61439],{"class":131,"line":32640},[129,61440,2414],{"emptyLinePlaceholder":56},[129,61442,61443,61445,61447],{"class":131,"line":32646},[129,61444,51786],{"class":139},[129,61446,50636],{"class":51301},[129,61448,51308],{"class":139},[22013,61450,61452],{"id":61451},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61454,61455],{},"评论字数统计案例",[14,61457,61458],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61460,61461],{},"牢记focus伪类选择器",[51345,61463],{"charSet":61464},"UTF-8",[51345,61466],{"name":61467,"content":61468},"viewport","width=device-width, initial-scale=1.0",[51408,61470,61471],{},"Document",[5141,61473,61474],{},"\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",[53822,61476],{"type":5202},[1146,61478,61479,61482],{},[86,61480,61481],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[86,61483,61484],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[120,61486,61488],{"className":50634,"code":61487,"language":50636,"meta":42,"style":42},"\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",[126,61489,61490,61500,61514,61518,61526,61540,61560,61580,61593,61601,61608,61621,61635,61645,61655,61659,61663,61670,61682,61694,61706,61718,61747,61760,61764,61768,61777,61788,61800,61811,61822,61834,61845,61857,61873,61885,61889,61893,61904,61915,61925,61937,61941,61945,61953,61964,61974,61985,61997,62010,62022,62034,62038,62042,62051,62063,62074,62087,62098,62112,62116,62120,62127,62139,62151,62161,62165,62169,62178,62190,62200,62204,62208,62219,62229,62248,62261,62265,62269,62279,62289,62293,62297,62308,62319,62331,62343,62347,62351,62362,62373,62387,62391,62395,62406,62416,62428,62432,62440,62448,62452,62460,62475,62494,62534,62547,62555,62569,62589,62597,62612,62635,62653,62668,62688,62708,62728,62736,62744,62752,62760,62780,62800,62805,62822,62831,62835,62840,62856,62864,62868,62873,62890,62895,62920,62924,62928,62933,62938,62946,62954,62958],{"__ignoreMap":42},[129,61491,61492,61494,61496,61498],{"class":131,"line":132},[129,61493,51298],{"class":139},[129,61495,51302],{"class":51301},[129,61497,51305],{"class":1977},[129,61499,51308],{"class":139},[129,61501,61502,61504,61506,61508,61510,61512],{"class":131,"line":51},[129,61503,1049],{"class":139},[129,61505,50636],{"class":51301},[129,61507,51317],{"class":1977},[129,61509,185],{"class":139},[129,61511,51322],{"class":244},[129,61513,51308],{"class":139},[129,61515,61516],{"class":131,"line":1194},[129,61517,2414],{"emptyLinePlaceholder":56},[129,61519,61520,61522,61524],{"class":131,"line":1209},[129,61521,1049],{"class":139},[129,61523,51335],{"class":51301},[129,61525,51308],{"class":139},[129,61527,61528,61530,61532,61534,61536,61538],{"class":131,"line":1215},[129,61529,52145],{"class":139},[129,61531,51345],{"class":51301},[129,61533,51348],{"class":1977},[129,61535,185],{"class":139},[129,61537,51353],{"class":244},[129,61539,51308],{"class":139},[129,61541,61542,61544,61546,61548,61550,61552,61554,61556,61558],{"class":131,"line":1229},[129,61543,52145],{"class":139},[129,61545,51345],{"class":51301},[129,61547,51364],{"class":1977},[129,61549,185],{"class":139},[129,61551,51369],{"class":244},[129,61553,51372],{"class":1977},[129,61555,185],{"class":139},[129,61557,51377],{"class":244},[129,61559,51308],{"class":139},[129,61561,61562,61564,61566,61568,61570,61572,61574,61576,61578],{"class":131,"line":1235},[129,61563,52145],{"class":139},[129,61565,51345],{"class":51301},[129,61567,14935],{"class":1977},[129,61569,185],{"class":139},[129,61571,51392],{"class":244},[129,61573,51372],{"class":1977},[129,61575,185],{"class":139},[129,61577,51399],{"class":244},[129,61579,51308],{"class":139},[129,61581,61582,61584,61586,61589,61591],{"class":131,"line":1326},[129,61583,52145],{"class":139},[129,61585,51408],{"class":51301},[129,61587,61588],{"class":139},">评论回车发布\u003C\u002F",[129,61590,51408],{"class":51301},[129,61592,51308],{"class":139},[129,61594,61595,61597,61599],{"class":131,"line":1332},[129,61596,52145],{"class":139},[129,61598,5141],{"class":51301},[129,61600,51308],{"class":139},[129,61602,61603,61606],{"class":131,"line":1344},[129,61604,61605],{"class":1977},"    .wrapper",[129,61607,15587],{"class":139},[129,61609,61610,61613,61615,61617,61619],{"class":131,"line":1626},[129,61611,61612],{"class":188},"      min-width",[129,61614,51438],{"class":139},[129,61616,4001],{"class":188},[129,61618,51493],{"class":135},[129,61620,1305],{"class":139},[129,61622,61623,61626,61628,61631,61633],{"class":131,"line":1631},[129,61624,61625],{"class":188},"      max-width",[129,61627,51438],{"class":139},[129,61629,61630],{"class":188},"800",[129,61632,51493],{"class":135},[129,61634,1305],{"class":139},[129,61636,61637,61639,61641,61643],{"class":131,"line":1637},[129,61638,55010],{"class":188},[129,61640,51438],{"class":139},[129,61642,51478],{"class":188},[129,61644,1305],{"class":139},[129,61646,61647,61649,61651,61653],{"class":131,"line":1642},[129,61648,55021],{"class":188},[129,61650,51438],{"class":139},[129,61652,51581],{"class":188},[129,61654,1305],{"class":139},[129,61656,61657],{"class":131,"line":1656},[129,61658,2201],{"class":139},[129,61660,61661],{"class":131,"line":1661},[129,61662,2414],{"emptyLinePlaceholder":56},[129,61664,61665,61668],{"class":131,"line":1667},[129,61666,61667],{"class":1977},"    .avatar",[129,61669,15587],{"class":139},[129,61671,61672,61674,61676,61678,61680],{"class":131,"line":1688},[129,61673,54772],{"class":188},[129,61675,51438],{"class":139},[129,61677,746],{"class":188},[129,61679,51493],{"class":135},[129,61681,1305],{"class":139},[129,61683,61684,61686,61688,61690,61692],{"class":131,"line":1693},[129,61685,54786],{"class":188},[129,61687,51438],{"class":139},[129,61689,746],{"class":188},[129,61691,51493],{"class":135},[129,61693,1305],{"class":139},[129,61695,61696,61698,61700,61702,61704],{"class":131,"line":1707},[129,61697,55135],{"class":188},[129,61699,51438],{"class":139},[129,61701,795],{"class":188},[129,61703,467],{"class":135},[129,61705,1305],{"class":139},[129,61707,61708,61711,61713,61716],{"class":131,"line":1712},[129,61709,61710],{"class":188},"      overflow",[129,61712,51438],{"class":139},[129,61714,61715],{"class":188},"hidden",[129,61717,1305],{"class":139},[129,61719,61720,61723,61725,61728,61730,61733,61735,61738,61740,61742,61745],{"class":131,"line":1741},[129,61721,61722],{"class":188},"      background",[129,61724,51438],{"class":139},[129,61726,61727],{"class":188},"url",[129,61729,140],{"class":139},[129,61731,61732],{"class":5231},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[129,61734,13729],{"class":139},[129,61736,61737],{"class":188},"no-repeat",[129,61739,17159],{"class":188},[129,61741,24979],{"class":139},[129,61743,61744],{"class":188},"cover",[129,61746,1305],{"class":139},[129,61748,61749,61752,61754,61756,61758],{"class":131,"line":1746},[129,61750,61751],{"class":188},"      margin-right",[129,61753,51438],{"class":139},[129,61755,839],{"class":188},[129,61757,51493],{"class":135},[129,61759,1305],{"class":139},[129,61761,61762],{"class":131,"line":1763},[129,61763,2201],{"class":139},[129,61765,61766],{"class":131,"line":1768},[129,61767,2414],{"emptyLinePlaceholder":56},[129,61769,61770,61772,61775],{"class":131,"line":1773},[129,61771,61605],{"class":1977},[129,61773,61774],{"class":51301}," textarea",[129,61776,15587],{"class":139},[129,61778,61779,61782,61784,61786],{"class":131,"line":1778},[129,61780,61781],{"class":188},"      outline",[129,61783,51438],{"class":139},[129,61785,54738],{"class":188},[129,61787,1305],{"class":139},[129,61789,61790,61793,61795,61798],{"class":131,"line":1792},[129,61791,61792],{"class":188},"      border-color",[129,61794,51438],{"class":139},[129,61796,61797],{"class":188},"transparent",[129,61799,1305],{"class":139},[129,61801,61802,61805,61807,61809],{"class":131,"line":1797},[129,61803,61804],{"class":188},"      resize",[129,61806,51438],{"class":139},[129,61808,54738],{"class":188},[129,61810,1305],{"class":139},[129,61812,61813,61815,61817,61820],{"class":131,"line":2591},[129,61814,61722],{"class":188},[129,61816,51438],{"class":139},[129,61818,61819],{"class":188},"#f5f5f5",[129,61821,1305],{"class":139},[129,61823,61824,61826,61828,61830,61832],{"class":131,"line":2605},[129,61825,55135],{"class":188},[129,61827,51438],{"class":139},[129,61829,432],{"class":188},[129,61831,51493],{"class":135},[129,61833,1305],{"class":139},[129,61835,61836,61839,61841,61843],{"class":131,"line":2613},[129,61837,61838],{"class":188},"      flex",[129,61840,51438],{"class":139},[129,61842,357],{"class":188},[129,61844,1305],{"class":139},[129,61846,61847,61849,61851,61853,61855],{"class":131,"line":2618},[129,61848,54696],{"class":188},[129,61850,51438],{"class":139},[129,61852,585],{"class":188},[129,61854,51493],{"class":135},[129,61856,1305],{"class":139},[129,61858,61859,61862,61864,61866,61869,61871],{"class":131,"line":2624},[129,61860,61861],{"class":188},"      transition",[129,61863,51438],{"class":139},[129,61865,28122],{"class":188},[129,61867,61868],{"class":188}," 0.5",[129,61870,834],{"class":135},[129,61872,1305],{"class":139},[129,61874,61875,61877,61879,61881,61883],{"class":131,"line":2630},[129,61876,54786],{"class":188},[129,61878,51438],{"class":139},[129,61880,1090],{"class":188},[129,61882,51493],{"class":135},[129,61884,1305],{"class":139},[129,61886,61887],{"class":131,"line":2635},[129,61888,2201],{"class":139},[129,61890,61891],{"class":131,"line":7963},[129,61892,2414],{"emptyLinePlaceholder":56},[129,61894,61895,61897,61899,61902],{"class":131,"line":7987},[129,61896,61605],{"class":1977},[129,61898,61774],{"class":51301},[129,61900,61901],{"class":1977},":focus",[129,61903,15587],{"class":139},[129,61905,61906,61908,61910,61913],{"class":131,"line":7992},[129,61907,61792],{"class":188},[129,61909,51438],{"class":139},[129,61911,61912],{"class":188},"#e4e4e4",[129,61914,1305],{"class":139},[129,61916,61917,61919,61921,61923],{"class":131,"line":7998},[129,61918,61722],{"class":188},[129,61920,51438],{"class":139},[129,61922,60843],{"class":188},[129,61924,1305],{"class":139},[129,61926,61927,61929,61931,61933,61935],{"class":131,"line":8025},[129,61928,54786],{"class":188},[129,61930,51438],{"class":139},[129,61932,795],{"class":188},[129,61934,51493],{"class":135},[129,61936,1305],{"class":139},[129,61938,61939],{"class":131,"line":8030},[129,61940,2201],{"class":139},[129,61942,61943],{"class":131,"line":8036},[129,61944,2414],{"emptyLinePlaceholder":56},[129,61946,61947,61949,61951],{"class":131,"line":8048},[129,61948,61605],{"class":1977},[129,61950,57468],{"class":51301},[129,61952,15587],{"class":139},[129,61954,61955,61957,61959,61962],{"class":131,"line":8060},[129,61956,61722],{"class":188},[129,61958,51438],{"class":139},[129,61960,61961],{"class":188},"#00aeec",[129,61963,1305],{"class":139},[129,61965,61966,61968,61970,61972],{"class":131,"line":8072},[129,61967,57417],{"class":188},[129,61969,51438],{"class":139},[129,61971,60843],{"class":188},[129,61973,1305],{"class":139},[129,61975,61976,61979,61981,61983],{"class":131,"line":9731},[129,61977,61978],{"class":188},"      border",[129,61980,51438],{"class":139},[129,61982,54738],{"class":188},[129,61984,1305],{"class":139},[129,61986,61987,61989,61991,61993,61995],{"class":131,"line":9756},[129,61988,55135],{"class":188},[129,61990,51438],{"class":139},[129,61992,432],{"class":188},[129,61994,51493],{"class":135},[129,61996,1305],{"class":139},[129,61998,61999,62002,62004,62006,62008],{"class":131,"line":9779},[129,62000,62001],{"class":188},"      margin-left",[129,62003,51438],{"class":139},[129,62005,585],{"class":188},[129,62007,51493],{"class":135},[129,62009,1305],{"class":139},[129,62011,62012,62014,62016,62018,62020],{"class":131,"line":9803},[129,62013,54772],{"class":188},[129,62015,51438],{"class":139},[129,62017,495],{"class":188},[129,62019,51493],{"class":135},[129,62021,1305],{"class":139},[129,62023,62024,62027,62029,62032],{"class":131,"line":9808},[129,62025,62026],{"class":188},"      cursor",[129,62028,51438],{"class":139},[129,62030,62031],{"class":188},"pointer",[129,62033,1305],{"class":139},[129,62035,62036],{"class":131,"line":9813},[129,62037,2201],{"class":139},[129,62039,62040],{"class":131,"line":9818},[129,62041,2414],{"emptyLinePlaceholder":56},[129,62043,62044,62046,62049],{"class":131,"line":9827},[129,62045,61605],{"class":1977},[129,62047,62048],{"class":1977}," .total",[129,62050,15587],{"class":139},[129,62052,62053,62055,62057,62059,62061],{"class":131,"line":9832},[129,62054,61751],{"class":188},[129,62056,51438],{"class":139},[129,62058,751],{"class":188},[129,62060,51493],{"class":135},[129,62062,1305],{"class":139},[129,62064,62065,62067,62069,62072],{"class":131,"line":9838},[129,62066,57417],{"class":188},[129,62068,51438],{"class":139},[129,62070,62071],{"class":188},"#999",[129,62073,1305],{"class":139},[129,62075,62076,62079,62081,62083,62085],{"class":131,"line":9859},[129,62077,62078],{"class":188},"      margin-top",[129,62080,51438],{"class":139},[129,62082,458],{"class":188},[129,62084,51493],{"class":135},[129,62086,1305],{"class":139},[129,62088,62089,62092,62094,62096],{"class":131,"line":9865},[129,62090,62091],{"class":188},"      opacity",[129,62093,51438],{"class":139},[129,62095,331],{"class":188},[129,62097,1305],{"class":139},[129,62099,62100,62102,62104,62106,62108,62110],{"class":131,"line":9879},[129,62101,61861],{"class":188},[129,62103,51438],{"class":139},[129,62105,28122],{"class":188},[129,62107,61868],{"class":188},[129,62109,834],{"class":135},[129,62111,1305],{"class":139},[129,62113,62114],{"class":131,"line":9885},[129,62115,2201],{"class":139},[129,62117,62118],{"class":131,"line":9912},[129,62119,2414],{"emptyLinePlaceholder":56},[129,62121,62122,62125],{"class":131,"line":9921},[129,62123,62124],{"class":1977},"    .list",[129,62126,15587],{"class":139},[129,62128,62129,62131,62133,62135,62137],{"class":131,"line":9927},[129,62130,61612],{"class":188},[129,62132,51438],{"class":139},[129,62134,4001],{"class":188},[129,62136,51493],{"class":135},[129,62138,1305],{"class":139},[129,62140,62141,62143,62145,62147,62149],{"class":131,"line":9935},[129,62142,61625],{"class":188},[129,62144,51438],{"class":139},[129,62146,61630],{"class":188},[129,62148,51493],{"class":135},[129,62150,1305],{"class":139},[129,62152,62153,62155,62157,62159],{"class":131,"line":9940},[129,62154,55010],{"class":188},[129,62156,51438],{"class":139},[129,62158,51478],{"class":188},[129,62160,1305],{"class":139},[129,62162,62163],{"class":131,"line":16619},[129,62164,2201],{"class":139},[129,62166,62167],{"class":131,"line":16625},[129,62168,2414],{"emptyLinePlaceholder":56},[129,62170,62171,62173,62176],{"class":131,"line":16648},[129,62172,62124],{"class":1977},[129,62174,62175],{"class":1977}," .item",[129,62177,15587],{"class":139},[129,62179,62180,62182,62184,62186,62188],{"class":131,"line":16654},[129,62181,54772],{"class":188},[129,62183,51438],{"class":139},[129,62185,450],{"class":188},[129,62187,467],{"class":135},[129,62189,1305],{"class":139},[129,62191,62192,62194,62196,62198],{"class":131,"line":16677},[129,62193,55010],{"class":188},[129,62195,51438],{"class":139},[129,62197,51478],{"class":188},[129,62199,1305],{"class":139},[129,62201,62202],{"class":131,"line":16691},[129,62203,2201],{"class":139},[129,62205,62206],{"class":131,"line":16711},[129,62207,2414],{"emptyLinePlaceholder":56},[129,62209,62210,62212,62214,62217],{"class":131,"line":16717},[129,62211,62124],{"class":1977},[129,62213,62175],{"class":1977},[129,62215,62216],{"class":1977}," .info",[129,62218,15587],{"class":139},[129,62220,62221,62223,62225,62227],{"class":131,"line":16728},[129,62222,61838],{"class":188},[129,62224,51438],{"class":139},[129,62226,357],{"class":188},[129,62228,1305],{"class":139},[129,62230,62231,62234,62236,62238,62240,62243,62246],{"class":131,"line":16751},[129,62232,62233],{"class":188},"      border-bottom",[129,62235,51438],{"class":139},[129,62237,357],{"class":188},[129,62239,51493],{"class":135},[129,62241,62242],{"class":188}," dashed",[129,62244,62245],{"class":188}," #e4e4e4",[129,62247,1305],{"class":139},[129,62249,62250,62253,62255,62257,62259],{"class":131,"line":16773},[129,62251,62252],{"class":188},"      padding-bottom",[129,62254,51438],{"class":139},[129,62256,585],{"class":188},[129,62258,51493],{"class":135},[129,62260,1305],{"class":139},[129,62262,62263],{"class":131,"line":16778},[129,62264,2201],{"class":139},[129,62266,62267],{"class":131,"line":16784},[129,62268,2414],{"emptyLinePlaceholder":56},[129,62270,62271,62273,62275,62277],{"class":131,"line":16798},[129,62272,62124],{"class":1977},[129,62274,62175],{"class":1977},[129,62276,6840],{"class":51301},[129,62278,15587],{"class":139},[129,62280,62281,62283,62285,62287],{"class":131,"line":16811},[129,62282,54707],{"class":188},[129,62284,51438],{"class":139},[129,62286,331],{"class":188},[129,62288,1305],{"class":139},[129,62290,62291],{"class":131,"line":16816},[129,62292,2201],{"class":139},[129,62294,62295],{"class":131,"line":16830},[129,62296,2414],{"emptyLinePlaceholder":56},[129,62298,62299,62301,62303,62306],{"class":131,"line":16835},[129,62300,62124],{"class":1977},[129,62302,62175],{"class":1977},[129,62304,62305],{"class":1977}," .name",[129,62307,15587],{"class":139},[129,62309,62310,62312,62314,62317],{"class":131,"line":16841},[129,62311,57417],{"class":188},[129,62313,51438],{"class":139},[129,62315,62316],{"class":188},"#FB7299",[129,62318,1305],{"class":139},[129,62320,62321,62323,62325,62327,62329],{"class":131,"line":16846},[129,62322,54923],{"class":188},[129,62324,51438],{"class":139},[129,62326,688],{"class":188},[129,62328,51493],{"class":135},[129,62330,1305],{"class":139},[129,62332,62333,62336,62338,62341],{"class":131,"line":16860},[129,62334,62335],{"class":188},"      font-weight",[129,62337,51438],{"class":139},[129,62339,62340],{"class":188},"bold",[129,62342,1305],{"class":139},[129,62344,62345],{"class":131,"line":16865},[129,62346,2201],{"class":139},[129,62348,62349],{"class":131,"line":16870},[129,62350,2414],{"emptyLinePlaceholder":56},[129,62352,62353,62355,62357,62360],{"class":131,"line":16884},[129,62354,62124],{"class":1977},[129,62356,62175],{"class":1977},[129,62358,62359],{"class":1977}," .text",[129,62361,15587],{"class":139},[129,62363,62364,62366,62368,62371],{"class":131,"line":16896},[129,62365,57417],{"class":188},[129,62367,51438],{"class":139},[129,62369,62370],{"class":188},"#333",[129,62372,1305],{"class":139},[129,62374,62375,62377,62379,62381,62383,62385],{"class":131,"line":16901},[129,62376,54696],{"class":188},[129,62378,51438],{"class":139},[129,62380,585],{"class":188},[129,62382,51493],{"class":135},[129,62384,4107],{"class":188},[129,62386,1305],{"class":139},[129,62388,62389],{"class":131,"line":16914},[129,62390,2201],{"class":139},[129,62392,62393],{"class":131,"line":16919},[129,62394,2414],{"emptyLinePlaceholder":56},[129,62396,62397,62399,62401,62404],{"class":131,"line":16924},[129,62398,62124],{"class":1977},[129,62400,62175],{"class":1977},[129,62402,62403],{"class":1977}," .time",[129,62405,15587],{"class":139},[129,62407,62408,62410,62412,62414],{"class":131,"line":16929},[129,62409,57417],{"class":188},[129,62411,51438],{"class":139},[129,62413,62071],{"class":188},[129,62415,1305],{"class":139},[129,62417,62418,62420,62422,62424,62426],{"class":131,"line":16942},[129,62419,54923],{"class":188},[129,62421,51438],{"class":139},[129,62423,637],{"class":188},[129,62425,51493],{"class":135},[129,62427,1305],{"class":139},[129,62429,62430],{"class":131,"line":16947},[129,62431,2201],{"class":139},[129,62433,62434,62436,62438],{"class":131,"line":32634},[129,62435,52418],{"class":139},[129,62437,5141],{"class":51301},[129,62439,51308],{"class":139},[129,62441,62442,62444,62446],{"class":131,"line":32640},[129,62443,51786],{"class":139},[129,62445,51335],{"class":51301},[129,62447,51308],{"class":139},[129,62449,62450],{"class":131,"line":32646},[129,62451,2414],{"emptyLinePlaceholder":56},[129,62453,62454,62456,62458],{"class":131,"line":32652},[129,62455,1049],{"class":139},[129,62457,51801],{"class":51301},[129,62459,51308],{"class":139},[129,62461,62462,62464,62466,62468,62470,62473],{"class":131,"line":32658},[129,62463,52145],{"class":139},[129,62465,51612],{"class":51301},[129,62467,53487],{"class":1977},[129,62469,185],{"class":139},[129,62471,62472],{"class":244},"\"wrapper\"",[129,62474,51308],{"class":139},[129,62476,62477,62479,62481,62483,62485,62488,62490,62492],{"class":131,"line":32669},[129,62478,51342],{"class":139},[129,62480,580],{"class":51301},[129,62482,53487],{"class":1977},[129,62484,185],{"class":139},[129,62486,62487],{"class":244},"\"avatar\"",[129,62489,55315],{"class":139},[129,62491,580],{"class":51301},[129,62493,51308],{"class":139},[129,62495,62496,62498,62500,62502,62504,62507,62509,62511,62514,62516,62518,62520,62523,62525,62528,62530,62532],{"class":131,"line":32675},[129,62497,51342],{"class":139},[129,62499,54289],{"class":51301},[129,62501,14974],{"class":1977},[129,62503,185],{"class":139},[129,62505,62506],{"class":244},"\"tx\"",[129,62508,61021],{"class":1977},[129,62510,185],{"class":139},[129,62512,62513],{"class":244},"\"发一条友善的评论\"",[129,62515,54312],{"class":1977},[129,62517,185],{"class":139},[129,62519,3715],{"class":244},[129,62521,62522],{"class":1977}," maxlength",[129,62524,185],{"class":139},[129,62526,62527],{"class":244},"\"200\"",[129,62529,55315],{"class":139},[129,62531,54289],{"class":51301},[129,62533,51308],{"class":139},[129,62535,62536,62538,62540,62543,62545],{"class":131,"line":32695},[129,62537,51342],{"class":139},[129,62539,53888],{"class":51301},[129,62541,62542],{"class":139},">发布\u003C\u002F",[129,62544,53888],{"class":51301},[129,62546,51308],{"class":139},[129,62548,62549,62551,62553],{"class":131,"line":32701},[129,62550,52418],{"class":139},[129,62552,51612],{"class":51301},[129,62554,51308],{"class":139},[129,62556,62557,62559,62561,62563,62565,62567],{"class":131,"line":32712},[129,62558,52145],{"class":139},[129,62560,51612],{"class":51301},[129,62562,53487],{"class":1977},[129,62564,185],{"class":139},[129,62566,62472],{"class":244},[129,62568,51308],{"class":139},[129,62570,62571,62573,62575,62577,62579,62582,62585,62587],{"class":131,"line":32718},[129,62572,51342],{"class":139},[129,62574,129],{"class":51301},[129,62576,53487],{"class":1977},[129,62578,185],{"class":139},[129,62580,62581],{"class":244},"\"total\"",[129,62583,62584],{"class":139},">0\u002F200字\u003C\u002F",[129,62586,129],{"class":51301},[129,62588,51308],{"class":139},[129,62590,62591,62593,62595],{"class":131,"line":32724},[129,62592,52418],{"class":139},[129,62594,51612],{"class":51301},[129,62596,51308],{"class":139},[129,62598,62599,62601,62603,62605,62607,62610],{"class":131,"line":32730},[129,62600,52145],{"class":139},[129,62602,51612],{"class":51301},[129,62604,53487],{"class":1977},[129,62606,185],{"class":139},[129,62608,62609],{"class":244},"\"list\"",[129,62611,51308],{"class":139},[129,62613,62614,62616,62618,62620,62622,62625,62628,62630,62633],{"class":131,"line":32736},[129,62615,51342],{"class":139},[129,62617,51612],{"class":51301},[129,62619,53487],{"class":1977},[129,62621,185],{"class":139},[129,62623,62624],{"class":244},"\"item\"",[129,62626,62627],{"class":1977}," style",[129,62629,185],{"class":139},[129,62631,62632],{"class":244},"\"display: none;\"",[129,62634,51308],{"class":139},[129,62636,62637,62639,62641,62643,62645,62647,62649,62651],{"class":131,"line":32742},[129,62638,55235],{"class":139},[129,62640,580],{"class":51301},[129,62642,53487],{"class":1977},[129,62644,185],{"class":139},[129,62646,62487],{"class":244},[129,62648,55315],{"class":139},[129,62650,580],{"class":51301},[129,62652,51308],{"class":139},[129,62654,62655,62657,62659,62661,62663,62666],{"class":131,"line":32748},[129,62656,55235],{"class":139},[129,62658,51612],{"class":51301},[129,62660,53487],{"class":1977},[129,62662,185],{"class":139},[129,62664,62665],{"class":244},"\"info\"",[129,62667,51308],{"class":139},[129,62669,62670,62672,62674,62676,62678,62681,62684,62686],{"class":131,"line":32754},[129,62671,55303],{"class":139},[129,62673,14],{"class":51301},[129,62675,53487],{"class":1977},[129,62677,185],{"class":139},[129,62679,62680],{"class":244},"\"name\"",[129,62682,62683],{"class":139},">清风徐来\u003C\u002F",[129,62685,14],{"class":51301},[129,62687,51308],{"class":139},[129,62689,62690,62692,62694,62696,62698,62701,62704,62706],{"class":131,"line":32774},[129,62691,55303],{"class":139},[129,62693,14],{"class":51301},[129,62695,53487],{"class":1977},[129,62697,185],{"class":139},[129,62699,62700],{"class":244},"\"text\"",[129,62702,62703],{"class":139},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[129,62705,14],{"class":51301},[129,62707,51308],{"class":139},[129,62709,62710,62712,62714,62716,62718,62721,62724,62726],{"class":131,"line":32780},[129,62711,55303],{"class":139},[129,62713,14],{"class":51301},[129,62715,53487],{"class":1977},[129,62717,185],{"class":139},[129,62719,62720],{"class":244},"\"time\"",[129,62722,62723],{"class":139},">2022-10-10 20:29:21\u003C\u002F",[129,62725,14],{"class":51301},[129,62727,51308],{"class":139},[129,62729,62730,62732,62734],{"class":131,"line":32796},[129,62731,55408],{"class":139},[129,62733,51612],{"class":51301},[129,62735,51308],{"class":139},[129,62737,62738,62740,62742],{"class":131,"line":32802},[129,62739,51777],{"class":139},[129,62741,51612],{"class":51301},[129,62743,51308],{"class":139},[129,62745,62746,62748,62750],{"class":131,"line":32816},[129,62747,52418],{"class":139},[129,62749,51612],{"class":51301},[129,62751,51308],{"class":139},[129,62753,62754,62756,62758],{"class":131,"line":32822},[129,62755,52145],{"class":139},[129,62757,51814],{"class":51301},[129,62759,51308],{"class":139},[129,62761,62762,62764,62767,62769,62771,62773,62775,62778],{"class":131,"line":32837},[129,62763,11236],{"class":135},[129,62765,62766],{"class":188}," tx",[129,62768,13579],{"class":135},[129,62770,54397],{"class":139},[129,62772,54400],{"class":1977},[129,62774,140],{"class":139},[129,62776,62777],{"class":244},"'#tx'",[129,62779,146],{"class":139},[129,62781,62782,62784,62787,62789,62791,62793,62795,62798],{"class":131,"line":32843},[129,62783,11236],{"class":135},[129,62785,62786],{"class":188}," total",[129,62788,13579],{"class":135},[129,62790,54397],{"class":139},[129,62792,54400],{"class":1977},[129,62794,140],{"class":139},[129,62796,62797],{"class":244},"'.total'",[129,62799,146],{"class":139},[129,62801,62802],{"class":131,"line":32852},[129,62803,62804],{"class":198},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[129,62806,62807,62810,62812,62814,62816,62818,62820],{"class":131,"line":32858},[129,62808,62809],{"class":139},"    tx.",[129,62811,57814],{"class":1977},[129,62813,140],{"class":139},[129,62815,61328],{"class":244},[129,62817,12450],{"class":139},[129,62819,54450],{"class":135},[129,62821,54453],{"class":139},[129,62823,62824,62827,62829],{"class":131,"line":32867},[129,62825,62826],{"class":139},"      total.style.opacity ",[129,62828,185],{"class":135},[129,62830,55700],{"class":188},[129,62832,62833],{"class":131,"line":32873},[129,62834,33462],{"class":139},[129,62836,62837],{"class":131,"line":32879},[129,62838,62839],{"class":198},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[129,62841,62842,62844,62846,62848,62850,62852,62854],{"class":131,"line":32888},[129,62843,62809],{"class":139},[129,62845,57814],{"class":1977},[129,62847,140],{"class":139},[129,62849,61389],{"class":244},[129,62851,12450],{"class":139},[129,62853,54450],{"class":135},[129,62855,54453],{"class":139},[129,62857,62858,62860,62862],{"class":131,"line":32894},[129,62859,62826],{"class":139},[129,62861,185],{"class":135},[129,62863,47334],{"class":188},[129,62865,62866],{"class":131,"line":32905},[129,62867,33462],{"class":139},[129,62869,62870],{"class":131,"line":32911},[129,62871,62872],{"class":198},"    \u002F\u002F 3. 检测用户输入\n",[129,62874,62875,62877,62879,62881,62884,62886,62888],{"class":131,"line":32930},[129,62876,62809],{"class":139},[129,62878,57814],{"class":1977},[129,62880,140],{"class":139},[129,62882,62883],{"class":244},"'input'",[129,62885,12450],{"class":139},[129,62887,54450],{"class":135},[129,62889,54453],{"class":139},[129,62891,62892],{"class":131,"line":32936},[129,62893,62894],{"class":198},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[129,62896,62897,62900,62902,62905,62908,62910,62913,62915,62917],{"class":131,"line":32947},[129,62898,62899],{"class":139},"      total.innerHTML ",[129,62901,185],{"class":135},[129,62903,62904],{"class":244}," `${",[129,62906,62907],{"class":139},"tx",[129,62909,697],{"class":244},[129,62911,62912],{"class":139},"value",[129,62914,697],{"class":244},[129,62916,51969],{"class":188},[129,62918,62919],{"class":244},"}\u002F200字`\n",[129,62921,62922],{"class":131,"line":32953},[129,62923,33462],{"class":139},[129,62925,62926],{"class":131,"line":32973},[129,62927,2414],{"emptyLinePlaceholder":56},[129,62929,62930],{"class":131,"line":32989},[129,62931,62932],{"class":198},"    \u002F\u002F const str = 'andy'\n",[129,62934,62935],{"class":131,"line":32995},[129,62936,62937],{"class":198},"    \u002F\u002F console.log(str.length)\n",[129,62939,62940,62942,62944],{"class":131,"line":33009},[129,62941,52418],{"class":139},[129,62943,51814],{"class":51301},[129,62945,51308],{"class":139},[129,62947,62948,62950,62952],{"class":131,"line":33015},[129,62949,51786],{"class":139},[129,62951,51801],{"class":51301},[129,62953,51308],{"class":139},[129,62955,62956],{"class":131,"line":33021},[129,62957,2414],{"emptyLinePlaceholder":56},[129,62959,62960,62962,62964],{"class":131,"line":33032},[129,62961,51786],{"class":139},[129,62963,50636],{"class":51301},[129,62965,51308],{"class":139},[22013,62967,62969],{"id":62968},"_3254-change事件","3.2.5.4 change事件",[14,62971,62972],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,62974,62975],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,62977,62978],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[120,62980,62982],{"className":50634,"code":62981,"language":50636,"meta":42,"style":42},"\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",[126,62983,62984,62994,63008,63012,63020,63034,63054,63066,63074,63078,63086,63100,63108,63126,63144,63156,63160,63168,63176,63180],{"__ignoreMap":42},[129,62985,62986,62988,62990,62992],{"class":131,"line":132},[129,62987,51298],{"class":139},[129,62989,51302],{"class":51301},[129,62991,51305],{"class":1977},[129,62993,51308],{"class":139},[129,62995,62996,62998,63000,63002,63004,63006],{"class":131,"line":51},[129,62997,1049],{"class":139},[129,62999,50636],{"class":51301},[129,63001,51317],{"class":1977},[129,63003,185],{"class":139},[129,63005,51322],{"class":244},[129,63007,51308],{"class":139},[129,63009,63010],{"class":131,"line":1194},[129,63011,2414],{"emptyLinePlaceholder":56},[129,63013,63014,63016,63018],{"class":131,"line":1209},[129,63015,1049],{"class":139},[129,63017,51335],{"class":51301},[129,63019,51308],{"class":139},[129,63021,63022,63024,63026,63028,63030,63032],{"class":131,"line":1215},[129,63023,52145],{"class":139},[129,63025,51345],{"class":51301},[129,63027,51348],{"class":1977},[129,63029,185],{"class":139},[129,63031,51353],{"class":244},[129,63033,51308],{"class":139},[129,63035,63036,63038,63040,63042,63044,63046,63048,63050,63052],{"class":131,"line":1229},[129,63037,52145],{"class":139},[129,63039,51345],{"class":51301},[129,63041,14935],{"class":1977},[129,63043,185],{"class":139},[129,63045,51392],{"class":244},[129,63047,51372],{"class":1977},[129,63049,185],{"class":139},[129,63051,51399],{"class":244},[129,63053,51308],{"class":139},[129,63055,63056,63058,63060,63062,63064],{"class":131,"line":1235},[129,63057,52145],{"class":139},[129,63059,51408],{"class":51301},[129,63061,51411],{"class":139},[129,63063,51408],{"class":51301},[129,63065,51308],{"class":139},[129,63067,63068,63070,63072],{"class":131,"line":1326},[129,63069,51786],{"class":139},[129,63071,51335],{"class":51301},[129,63073,51308],{"class":139},[129,63075,63076],{"class":131,"line":1332},[129,63077,2414],{"emptyLinePlaceholder":56},[129,63079,63080,63082,63084],{"class":131,"line":1344},[129,63081,1049],{"class":139},[129,63083,51801],{"class":51301},[129,63085,51308],{"class":139},[129,63087,63088,63090,63092,63094,63096,63098],{"class":131,"line":1626},[129,63089,52145],{"class":139},[129,63091,53822],{"class":51301},[129,63093,53825],{"class":1977},[129,63095,185],{"class":139},[129,63097,62700],{"class":244},[129,63099,51308],{"class":139},[129,63101,63102,63104,63106],{"class":131,"line":1631},[129,63103,52145],{"class":139},[129,63105,51814],{"class":51301},[129,63107,51308],{"class":139},[129,63109,63110,63112,63114,63116,63118,63120,63122,63124],{"class":131,"line":1637},[129,63111,11236],{"class":135},[129,63113,60606],{"class":188},[129,63115,13579],{"class":135},[129,63117,54397],{"class":139},[129,63119,54400],{"class":1977},[129,63121,140],{"class":139},[129,63123,62883],{"class":244},[129,63125,146],{"class":139},[129,63127,63128,63131,63133,63135,63138,63140,63142],{"class":131,"line":1642},[129,63129,63130],{"class":139},"    input.",[129,63132,57814],{"class":1977},[129,63134,140],{"class":139},[129,63136,63137],{"class":244},"'change'",[129,63139,12450],{"class":139},[129,63141,54450],{"class":135},[129,63143,54453],{"class":139},[129,63145,63146,63148,63150,63152,63154],{"class":131,"line":1656},[129,63147,58245],{"class":139},[129,63149,58248],{"class":1977},[129,63151,140],{"class":139},[129,63153,732],{"class":188},[129,63155,146],{"class":139},[129,63157,63158],{"class":131,"line":1661},[129,63159,33462],{"class":139},[129,63161,63162,63164,63166],{"class":131,"line":1667},[129,63163,52418],{"class":139},[129,63165,51814],{"class":51301},[129,63167,51308],{"class":139},[129,63169,63170,63172,63174],{"class":131,"line":1688},[129,63171,51786],{"class":139},[129,63173,51801],{"class":51301},[129,63175,51308],{"class":139},[129,63177,63178],{"class":131,"line":1693},[129,63179,2414],{"emptyLinePlaceholder":56},[129,63181,63182,63184,63186],{"class":131,"line":1707},[129,63183,51786],{"class":139},[129,63185,50636],{"class":51301},[129,63187,51308],{"class":139},[14,63189,63190],{},"总结：内容发生改变才回去触发",[100,63192,63194],{"id":63193},"_326-事件对象","3.2.6 事件对象",[22013,63196,63198],{"id":63197},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63200,63201],{},[40,63202],{"alt":42,"src":63203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63205,63206],{},[40,63207],{"alt":42,"src":63208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63210,63211],{},"点击一次，就输出了事件对象，它是个对象",[14,63213,63214],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63216,63217],{},[40,63218],{"alt":42,"src":63219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22013,63221,63223],{"id":63222},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63225,63226],{},[40,63227],{"alt":42,"src":63228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63230,63231],{},"实现按特殊字符才是实现打印输出效果：",[120,63233,63235],{"className":53068,"code":63234,"language":53070,"meta":42,"style":42},"\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",[126,63236,63237,63245,63250,63264,63272,63277,63282,63287,63292,63297,63302,63307,63312,63317,63321,63325,63333],{"__ignoreMap":42},[129,63238,63239,63241,63243],{"class":131,"line":132},[129,63240,1049],{"class":139},[129,63242,51801],{"class":51301},[129,63244,51308],{"class":139},[129,63246,63247],{"class":131,"line":51},[129,63248,63249],{"class":198},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[129,63251,63252,63254,63256,63258,63260,63262],{"class":131,"line":1194},[129,63253,52145],{"class":139},[129,63255,53822],{"class":51301},[129,63257,53825],{"class":1977},[129,63259,185],{"class":139},[129,63261,62700],{"class":244},[129,63263,51308],{"class":139},[129,63265,63266,63268,63270],{"class":131,"line":1209},[129,63267,52145],{"class":139},[129,63269,51814],{"class":51301},[129,63271,51308],{"class":139},[129,63273,63274],{"class":131,"line":1215},[129,63275,63276],{"class":139},"    \u002F\u002F const btn = document.querySelector('button')\n",[129,63278,63279],{"class":131,"line":1229},[129,63280,63281],{"class":139},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[129,63283,63284],{"class":131,"line":1235},[129,63285,63286],{"class":139},"    \u002F\u002F   console.log(e);\n",[129,63288,63289],{"class":131,"line":1326},[129,63290,63291],{"class":139},"    \u002F\u002F })\n",[129,63293,63294],{"class":131,"line":1332},[129,63295,63296],{"class":139},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[129,63298,63299],{"class":131,"line":1344},[129,63300,63301],{"class":139},"    const input = document.querySelector('input')\n",[129,63303,63304],{"class":131,"line":1626},[129,63305,63306],{"class":139},"    input.addEventListener('keyup', function (e) {\n",[129,63308,63309],{"class":131,"line":1631},[129,63310,63311],{"class":139},"      if (e.key === 'Enter') {\n",[129,63313,63314],{"class":131,"line":1637},[129,63315,63316],{"class":139},"        console.log('我按下了回车键')\n",[129,63318,63319],{"class":131,"line":1642},[129,63320,52399],{"class":139},[129,63322,63323],{"class":131,"line":1656},[129,63324,33462],{"class":139},[129,63326,63327,63329,63331],{"class":131,"line":1661},[129,63328,52418],{"class":139},[129,63330,51814],{"class":51301},[129,63332,51308],{"class":139},[129,63334,63335,63337,63339],{"class":131,"line":1667},[129,63336,51786],{"class":139},[129,63338,51801],{"class":51301},[129,63340,51308],{"class":139},[22013,63342,63344],{"id":63343},"_3263-trim方法","3.2.6.3 trim方法",[14,63346,63347],{},[40,63348],{"alt":42,"src":63349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63351,63352],{},[40,63353],{"alt":42,"src":63354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63356,63357],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63359,63360],{},"str.trim()",[100,63362,63364],{"id":63363},"_327-环境对象","3.2.7 环境对象",[14,63366,63367],{},[40,63368],{"alt":42,"src":63369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63371,63372],{},[40,63373],{"alt":42,"src":63374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63376,63377],{},[40,63378],{"alt":42,"src":63379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63381,63382],{},"实际函数调用是window.fn()",[14,63384,63385],{},"普通函数里面this指向的是window",[1146,63387,63388,63391,63394],{},[86,63389,63390],{},"在普通函数下，this指向的是window",[86,63392,63393],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[86,63395,63396],{},"箭头函数没有this",[14,63398,63399],{},"粗略记法就是：谁调用，this就指向谁",[14,63401,63402],{},[40,63403],{"alt":42,"src":63404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63406,63407],{},[40,63408],{"alt":42,"src":63409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63411,63412],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63414,63415],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[120,63417,63419],{"className":53068,"code":63418,"language":53070,"meta":42,"style":42},"\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",[126,63420,63421,63429,63441,63449,63454,63459,63464,63469,63473,63481],{"__ignoreMap":42},[129,63422,63423,63425,63427],{"class":131,"line":132},[129,63424,1049],{"class":139},[129,63426,51801],{"class":51301},[129,63428,51308],{"class":139},[129,63430,63431,63433,63435,63437,63439],{"class":131,"line":51},[129,63432,52145],{"class":139},[129,63434,53888],{"class":51301},[129,63436,53894],{"class":139},[129,63438,53888],{"class":51301},[129,63440,51308],{"class":139},[129,63442,63443,63445,63447],{"class":131,"line":1194},[129,63444,52145],{"class":139},[129,63446,51814],{"class":51301},[129,63448,51308],{"class":139},[129,63450,63451],{"class":131,"line":1209},[129,63452,63453],{"class":139},"    const button = document.querySelector('button')\n",[129,63455,63456],{"class":131,"line":1215},[129,63457,63458],{"class":139},"    button.addEventListener('click', function () {\n",[129,63460,63461],{"class":131,"line":1229},[129,63462,63463],{"class":139},"      \u002F\u002F console.log(this);\n",[129,63465,63466],{"class":131,"line":1235},[129,63467,63468],{"class":139},"      this.style.color = 'pink'\n",[129,63470,63471],{"class":131,"line":1326},[129,63472,33462],{"class":139},[129,63474,63475,63477,63479],{"class":131,"line":1332},[129,63476,52418],{"class":139},[129,63478,51814],{"class":51301},[129,63480,51308],{"class":139},[129,63482,63483,63485,63487],{"class":131,"line":1344},[129,63484,51786],{"class":139},[129,63486,51801],{"class":51301},[129,63488,51308],{"class":139},[100,63490,63492],{"id":63491},"_328-回调函数","3.2.8 回调函数",[14,63494,63495],{},[40,63496],{"alt":42,"src":63497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63499,63500],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63502,11347],{},[1146,63504,63505,63508,63511],{},[86,63506,63507],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[86,63509,63510],{},"回调函数本质还是函数，只不过把它当成参数使用",[86,63512,63513],{},"使用匿名函数做为回调函数比较常见",[100,63515,63517],{"id":63516},"_329-tab栏切换","3.2.9 tab栏切换",[14,63519,63520],{},[40,63521],{"alt":42,"src":63522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[120,63524,63526],{"className":50634,"code":63525,"language":50636,"meta":42,"style":42},"\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",[126,63527,63528,63538,63552,63556,63564,63578,63598,63618,63631,63639,63645,63655,63665,63669,63673,63680,63693,63706,63718,63734,63738,63742,63749,63761,63773,63785,63795,63805,63809,63813,63822,63834,63845,63857,63861,63865,63873,63883,63893,63903,63907,63911,63921,63935,63947,63951,63955,63967,63978,63995,64005,64009,64013,64028,64039,64049,64053,64057,64064,64079,64083,64087,64095,64105,64109,64113,64122,64132,64136,64144,64152,64156,64164,64179,64194,64207,64215,64249,64276,64303,64330,64357,64365,64373,64388,64425,64460,64495,64530,64565,64573,64581,64589,64594,64599,64619,64624,64653,64658,64663,64681,64686,64691,64696,64718,64723,64739,64743,64748,64753,64774,64779,64808,64812,64817,64821,64829,64837,64841],{"__ignoreMap":42},[129,63529,63530,63532,63534,63536],{"class":131,"line":132},[129,63531,51298],{"class":139},[129,63533,51302],{"class":51301},[129,63535,51305],{"class":1977},[129,63537,51308],{"class":139},[129,63539,63540,63542,63544,63546,63548,63550],{"class":131,"line":51},[129,63541,1049],{"class":139},[129,63543,50636],{"class":51301},[129,63545,51317],{"class":1977},[129,63547,185],{"class":139},[129,63549,51322],{"class":244},[129,63551,51308],{"class":139},[129,63553,63554],{"class":131,"line":1194},[129,63555,2414],{"emptyLinePlaceholder":56},[129,63557,63558,63560,63562],{"class":131,"line":1209},[129,63559,1049],{"class":139},[129,63561,51335],{"class":51301},[129,63563,51308],{"class":139},[129,63565,63566,63568,63570,63572,63574,63576],{"class":131,"line":1215},[129,63567,52145],{"class":139},[129,63569,51345],{"class":51301},[129,63571,51348],{"class":1977},[129,63573,185],{"class":139},[129,63575,51353],{"class":244},[129,63577,59128],{"class":139},[129,63579,63580,63582,63584,63586,63588,63590,63592,63594,63596],{"class":131,"line":1229},[129,63581,52145],{"class":139},[129,63583,51345],{"class":51301},[129,63585,51364],{"class":1977},[129,63587,185],{"class":139},[129,63589,51369],{"class":244},[129,63591,51372],{"class":1977},[129,63593,185],{"class":139},[129,63595,51377],{"class":244},[129,63597,59128],{"class":139},[129,63599,63600,63602,63604,63606,63608,63610,63612,63614,63616],{"class":131,"line":1235},[129,63601,52145],{"class":139},[129,63603,51345],{"class":51301},[129,63605,14935],{"class":1977},[129,63607,185],{"class":139},[129,63609,51392],{"class":244},[129,63611,51372],{"class":1977},[129,63613,185],{"class":139},[129,63615,51399],{"class":244},[129,63617,59128],{"class":139},[129,63619,63620,63622,63624,63627,63629],{"class":131,"line":1326},[129,63621,52145],{"class":139},[129,63623,51408],{"class":51301},[129,63625,63626],{"class":139},">tab栏切换\u003C\u002F",[129,63628,51408],{"class":51301},[129,63630,51308],{"class":139},[129,63632,63633,63635,63637],{"class":131,"line":1332},[129,63634,52145],{"class":139},[129,63636,5141],{"class":51301},[129,63638,51308],{"class":139},[129,63640,63641,63643],{"class":131,"line":1344},[129,63642,6418],{"class":51301},[129,63644,15587],{"class":139},[129,63646,63647,63649,63651,63653],{"class":131,"line":1626},[129,63648,54707],{"class":188},[129,63650,51438],{"class":139},[129,63652,331],{"class":188},[129,63654,1305],{"class":139},[129,63656,63657,63659,63661,63663],{"class":131,"line":1631},[129,63658,54696],{"class":188},[129,63660,51438],{"class":139},[129,63662,331],{"class":188},[129,63664,1305],{"class":139},[129,63666,63667],{"class":131,"line":1637},[129,63668,2201],{"class":139},[129,63670,63671],{"class":131,"line":1642},[129,63672,2414],{"emptyLinePlaceholder":56},[129,63674,63675,63678],{"class":131,"line":1656},[129,63676,63677],{"class":1977},"    .tab",[129,63679,15587],{"class":139},[129,63681,63682,63684,63686,63689,63691],{"class":131,"line":1661},[129,63683,54772],{"class":188},[129,63685,51438],{"class":139},[129,63687,63688],{"class":188},"590",[129,63690,51493],{"class":135},[129,63692,1305],{"class":139},[129,63694,63695,63697,63699,63702,63704],{"class":131,"line":1667},[129,63696,54786],{"class":188},[129,63698,51438],{"class":139},[129,63700,63701],{"class":188},"340",[129,63703,51493],{"class":135},[129,63705,1305],{"class":139},[129,63707,63708,63710,63712,63714,63716],{"class":131,"line":1688},[129,63709,54707],{"class":188},[129,63711,51438],{"class":139},[129,63713,839],{"class":188},[129,63715,51493],{"class":135},[129,63717,1305],{"class":139},[129,63719,63720,63722,63724,63726,63728,63730,63732],{"class":131,"line":1693},[129,63721,61978],{"class":188},[129,63723,51438],{"class":139},[129,63725,357],{"class":188},[129,63727,51493],{"class":135},[129,63729,51522],{"class":188},[129,63731,62245],{"class":188},[129,63733,1305],{"class":139},[129,63735,63736],{"class":131,"line":1707},[129,63737,2201],{"class":139},[129,63739,63740],{"class":131,"line":1712},[129,63741,2414],{"emptyLinePlaceholder":56},[129,63743,63744,63747],{"class":131,"line":1741},[129,63745,63746],{"class":1977},"    .tab-nav",[129,63748,15587],{"class":139},[129,63750,63751,63753,63755,63757,63759],{"class":131,"line":1746},[129,63752,54772],{"class":188},[129,63754,51438],{"class":139},[129,63756,450],{"class":188},[129,63758,467],{"class":135},[129,63760,1305],{"class":139},[129,63762,63763,63765,63767,63769,63771],{"class":131,"line":1763},[129,63764,54786],{"class":188},[129,63766,51438],{"class":139},[129,63768,1046],{"class":188},[129,63770,51493],{"class":135},[129,63772,1305],{"class":139},[129,63774,63775,63777,63779,63781,63783],{"class":131,"line":1768},[129,63776,57360],{"class":188},[129,63778,51438],{"class":139},[129,63780,1046],{"class":188},[129,63782,51493],{"class":135},[129,63784,1305],{"class":139},[129,63786,63787,63789,63791,63793],{"class":131,"line":1773},[129,63788,55010],{"class":188},[129,63790,51438],{"class":139},[129,63792,51478],{"class":188},[129,63794,1305],{"class":139},[129,63796,63797,63799,63801,63803],{"class":131,"line":1778},[129,63798,55021],{"class":188},[129,63800,51438],{"class":139},[129,63802,51669],{"class":188},[129,63804,1305],{"class":139},[129,63806,63807],{"class":131,"line":1792},[129,63808,2201],{"class":139},[129,63810,63811],{"class":131,"line":1797},[129,63812,2414],{"emptyLinePlaceholder":56},[129,63814,63815,63817,63820],{"class":131,"line":2591},[129,63816,63746],{"class":1977},[129,63818,63819],{"class":51301}," h3",[129,63821,15587],{"class":139},[129,63823,63824,63826,63828,63830,63832],{"class":131,"line":2605},[129,63825,54923],{"class":188},[129,63827,51438],{"class":139},[129,63829,939],{"class":188},[129,63831,51493],{"class":135},[129,63833,1305],{"class":139},[129,63835,63836,63838,63840,63843],{"class":131,"line":2613},[129,63837,62335],{"class":188},[129,63839,51438],{"class":139},[129,63841,63842],{"class":188},"normal",[129,63844,1305],{"class":139},[129,63846,63847,63849,63851,63853,63855],{"class":131,"line":2618},[129,63848,62001],{"class":188},[129,63850,51438],{"class":139},[129,63852,839],{"class":188},[129,63854,51493],{"class":135},[129,63856,1305],{"class":139},[129,63858,63859],{"class":131,"line":2624},[129,63860,2201],{"class":139},[129,63862,63863],{"class":131,"line":2630},[129,63864,2414],{"emptyLinePlaceholder":56},[129,63866,63867,63869,63871],{"class":131,"line":2635},[129,63868,63746],{"class":1977},[129,63870,61293],{"class":51301},[129,63872,15587],{"class":139},[129,63874,63875,63877,63879,63881],{"class":131,"line":7963},[129,63876,54733],{"class":188},[129,63878,51438],{"class":139},[129,63880,54738],{"class":188},[129,63882,1305],{"class":139},[129,63884,63885,63887,63889,63891],{"class":131,"line":7987},[129,63886,55010],{"class":188},[129,63888,51438],{"class":139},[129,63890,51478],{"class":188},[129,63892,1305],{"class":139},[129,63894,63895,63897,63899,63901],{"class":131,"line":7992},[129,63896,55021],{"class":188},[129,63898,51438],{"class":139},[129,63900,51581],{"class":188},[129,63902,1305],{"class":139},[129,63904,63905],{"class":131,"line":7998},[129,63906,2201],{"class":139},[129,63908,63909],{"class":131,"line":8025},[129,63910,2414],{"emptyLinePlaceholder":56},[129,63912,63913,63915,63917,63919],{"class":131,"line":8030},[129,63914,63746],{"class":1977},[129,63916,61293],{"class":51301},[129,63918,55076],{"class":51301},[129,63920,15587],{"class":139},[129,63922,63923,63925,63927,63929,63931,63933],{"class":131,"line":8036},[129,63924,54707],{"class":188},[129,63926,51438],{"class":139},[129,63928,331],{"class":188},[129,63930,8965],{"class":188},[129,63932,51493],{"class":135},[129,63934,1305],{"class":139},[129,63936,63937,63939,63941,63943,63945],{"class":131,"line":8048},[129,63938,54923],{"class":188},[129,63940,51438],{"class":139},[129,63942,688],{"class":188},[129,63944,51493],{"class":135},[129,63946,1305],{"class":139},[129,63948,63949],{"class":131,"line":8060},[129,63950,2201],{"class":139},[129,63952,63953],{"class":131,"line":8072},[129,63954,2414],{"emptyLinePlaceholder":56},[129,63956,63957,63959,63961,63963,63965],{"class":131,"line":9731},[129,63958,63746],{"class":1977},[129,63960,61293],{"class":51301},[129,63962,55076],{"class":51301},[129,63964,1413],{"class":51301},[129,63966,15587],{"class":139},[129,63968,63969,63972,63974,63976],{"class":131,"line":9756},[129,63970,63971],{"class":188},"      text-decoration",[129,63973,51438],{"class":139},[129,63975,54738],{"class":188},[129,63977,1305],{"class":139},[129,63979,63980,63982,63984,63986,63988,63990,63993],{"class":131,"line":9779},[129,63981,62233],{"class":188},[129,63983,51438],{"class":139},[129,63985,217],{"class":188},[129,63987,51493],{"class":135},[129,63989,51522],{"class":188},[129,63991,63992],{"class":188}," transparent",[129,63994,1305],{"class":139},[129,63996,63997,63999,64001,64003],{"class":131,"line":9803},[129,63998,57417],{"class":188},[129,64000,51438],{"class":139},[129,64002,62370],{"class":188},[129,64004,1305],{"class":139},[129,64006,64007],{"class":131,"line":9808},[129,64008,2201],{"class":139},[129,64010,64011],{"class":131,"line":9813},[129,64012,2414],{"emptyLinePlaceholder":56},[129,64014,64015,64017,64019,64021,64023,64026],{"class":131,"line":9818},[129,64016,63746],{"class":1977},[129,64018,61293],{"class":51301},[129,64020,55076],{"class":51301},[129,64022,1413],{"class":51301},[129,64024,64025],{"class":1977},".active",[129,64027,15587],{"class":139},[129,64029,64030,64032,64034,64037],{"class":131,"line":9827},[129,64031,61792],{"class":188},[129,64033,51438],{"class":139},[129,64035,64036],{"class":188},"#e1251b",[129,64038,1305],{"class":139},[129,64040,64041,64043,64045,64047],{"class":131,"line":9832},[129,64042,57417],{"class":188},[129,64044,51438],{"class":139},[129,64046,64036],{"class":188},[129,64048,1305],{"class":139},[129,64050,64051],{"class":131,"line":9838},[129,64052,2201],{"class":139},[129,64054,64055],{"class":131,"line":9859},[129,64056,2414],{"emptyLinePlaceholder":56},[129,64058,64059,64062],{"class":131,"line":9865},[129,64060,64061],{"class":1977},"    .tab-content",[129,64063,15587],{"class":139},[129,64065,64066,64068,64070,64072,64075,64077],{"class":131,"line":9879},[129,64067,54696],{"class":188},[129,64069,51438],{"class":139},[129,64071,331],{"class":188},[129,64073,64074],{"class":188}," 16",[129,64076,51493],{"class":135},[129,64078,1305],{"class":139},[129,64080,64081],{"class":131,"line":9885},[129,64082,2201],{"class":139},[129,64084,64085],{"class":131,"line":9912},[129,64086,2414],{"emptyLinePlaceholder":56},[129,64088,64089,64091,64093],{"class":131,"line":9921},[129,64090,64061],{"class":1977},[129,64092,62175],{"class":1977},[129,64094,15587],{"class":139},[129,64096,64097,64099,64101,64103],{"class":131,"line":9927},[129,64098,55010],{"class":188},[129,64100,51438],{"class":139},[129,64102,54738],{"class":188},[129,64104,1305],{"class":139},[129,64106,64107],{"class":131,"line":9935},[129,64108,2201],{"class":139},[129,64110,64111],{"class":131,"line":9940},[129,64112,2414],{"emptyLinePlaceholder":56},[129,64114,64115,64117,64120],{"class":131,"line":16619},[129,64116,64061],{"class":1977},[129,64118,64119],{"class":1977}," .item.active",[129,64121,15587],{"class":139},[129,64123,64124,64126,64128,64130],{"class":131,"line":16625},[129,64125,55010],{"class":188},[129,64127,51438],{"class":139},[129,64129,60870],{"class":188},[129,64131,1305],{"class":139},[129,64133,64134],{"class":131,"line":16648},[129,64135,2201],{"class":139},[129,64137,64138,64140,64142],{"class":131,"line":16654},[129,64139,52418],{"class":139},[129,64141,5141],{"class":51301},[129,64143,51308],{"class":139},[129,64145,64146,64148,64150],{"class":131,"line":16677},[129,64147,51786],{"class":139},[129,64149,51335],{"class":51301},[129,64151,51308],{"class":139},[129,64153,64154],{"class":131,"line":16691},[129,64155,2414],{"emptyLinePlaceholder":56},[129,64157,64158,64160,64162],{"class":131,"line":16711},[129,64159,1049],{"class":139},[129,64161,51801],{"class":51301},[129,64163,51308],{"class":139},[129,64165,64166,64168,64170,64172,64174,64177],{"class":131,"line":16717},[129,64167,52145],{"class":139},[129,64169,51612],{"class":51301},[129,64171,53487],{"class":1977},[129,64173,185],{"class":139},[129,64175,64176],{"class":244},"\"tab\"",[129,64178,51308],{"class":139},[129,64180,64181,64183,64185,64187,64189,64192],{"class":131,"line":16728},[129,64182,51342],{"class":139},[129,64184,51612],{"class":51301},[129,64186,53487],{"class":1977},[129,64188,185],{"class":139},[129,64190,64191],{"class":244},"\"tab-nav\"",[129,64193,51308],{"class":139},[129,64195,64196,64198,64200,64203,64205],{"class":131,"line":16751},[129,64197,55235],{"class":139},[129,64199,100],{"class":51301},[129,64201,64202],{"class":139},">每日特价\u003C\u002F",[129,64204,100],{"class":51301},[129,64206,51308],{"class":139},[129,64208,64209,64211,64213],{"class":131,"line":16773},[129,64210,55235],{"class":139},[129,64212,1146],{"class":51301},[129,64214,51308],{"class":139},[129,64216,64217,64219,64221,64223,64225,64227,64229,64231,64233,64235,64238,64241,64243,64245,64247],{"class":131,"line":16778},[129,64218,55303],{"class":139},[129,64220,86],{"class":51301},[129,64222,61053],{"class":139},[129,64224,20],{"class":51301},[129,64226,53487],{"class":1977},[129,64228,185],{"class":139},[129,64230,59707],{"class":244},[129,64232,61058],{"class":1977},[129,64234,185],{"class":139},[129,64236,64237],{"class":244},"\"javascript:;\"",[129,64239,64240],{"class":139},">精选\u003C\u002F",[129,64242,20],{"class":51301},[129,64244,55315],{"class":139},[129,64246,86],{"class":51301},[129,64248,51308],{"class":139},[129,64250,64251,64253,64255,64257,64259,64261,64263,64265,64268,64270,64272,64274],{"class":131,"line":16784},[129,64252,55303],{"class":139},[129,64254,86],{"class":51301},[129,64256,61053],{"class":139},[129,64258,20],{"class":51301},[129,64260,61058],{"class":1977},[129,64262,185],{"class":139},[129,64264,64237],{"class":244},[129,64266,64267],{"class":139},">美食\u003C\u002F",[129,64269,20],{"class":51301},[129,64271,55315],{"class":139},[129,64273,86],{"class":51301},[129,64275,51308],{"class":139},[129,64277,64278,64280,64282,64284,64286,64288,64290,64292,64295,64297,64299,64301],{"class":131,"line":16798},[129,64279,55303],{"class":139},[129,64281,86],{"class":51301},[129,64283,61053],{"class":139},[129,64285,20],{"class":51301},[129,64287,61058],{"class":1977},[129,64289,185],{"class":139},[129,64291,64237],{"class":244},[129,64293,64294],{"class":139},">百货\u003C\u002F",[129,64296,20],{"class":51301},[129,64298,55315],{"class":139},[129,64300,86],{"class":51301},[129,64302,51308],{"class":139},[129,64304,64305,64307,64309,64311,64313,64315,64317,64319,64322,64324,64326,64328],{"class":131,"line":16811},[129,64306,55303],{"class":139},[129,64308,86],{"class":51301},[129,64310,61053],{"class":139},[129,64312,20],{"class":51301},[129,64314,61058],{"class":1977},[129,64316,185],{"class":139},[129,64318,64237],{"class":244},[129,64320,64321],{"class":139},">个护\u003C\u002F",[129,64323,20],{"class":51301},[129,64325,55315],{"class":139},[129,64327,86],{"class":51301},[129,64329,51308],{"class":139},[129,64331,64332,64334,64336,64338,64340,64342,64344,64346,64349,64351,64353,64355],{"class":131,"line":16816},[129,64333,55303],{"class":139},[129,64335,86],{"class":51301},[129,64337,61053],{"class":139},[129,64339,20],{"class":51301},[129,64341,61058],{"class":1977},[129,64343,185],{"class":139},[129,64345,64237],{"class":244},[129,64347,64348],{"class":139},">预告\u003C\u002F",[129,64350,20],{"class":51301},[129,64352,55315],{"class":139},[129,64354,86],{"class":51301},[129,64356,51308],{"class":139},[129,64358,64359,64361,64363],{"class":131,"line":16830},[129,64360,55408],{"class":139},[129,64362,1146],{"class":51301},[129,64364,51308],{"class":139},[129,64366,64367,64369,64371],{"class":131,"line":16835},[129,64368,51777],{"class":139},[129,64370,51612],{"class":51301},[129,64372,51308],{"class":139},[129,64374,64375,64377,64379,64381,64383,64386],{"class":131,"line":16841},[129,64376,51342],{"class":139},[129,64378,51612],{"class":51301},[129,64380,53487],{"class":1977},[129,64382,185],{"class":139},[129,64384,64385],{"class":244},"\"tab-content\"",[129,64387,51308],{"class":139},[129,64389,64390,64392,64394,64396,64398,64401,64403,64405,64407,64409,64412,64414,64416,64418,64421,64423],{"class":131,"line":16846},[129,64391,55235],{"class":139},[129,64393,51612],{"class":51301},[129,64395,53487],{"class":1977},[129,64397,185],{"class":139},[129,64399,64400],{"class":244},"\"item active\"",[129,64402,61053],{"class":139},[129,64404,40],{"class":51301},[129,64406,55240],{"class":1977},[129,64408,185],{"class":139},[129,64410,64411],{"class":244},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[129,64413,55248],{"class":1977},[129,64415,185],{"class":139},[129,64417,7667],{"class":244},[129,64419,64420],{"class":139}," \u002F>\u003C\u002F",[129,64422,51612],{"class":51301},[129,64424,51308],{"class":139},[129,64426,64427,64429,64431,64433,64435,64437,64439,64441,64443,64445,64448,64450,64452,64454,64456,64458],{"class":131,"line":16860},[129,64428,55235],{"class":139},[129,64430,51612],{"class":51301},[129,64432,53487],{"class":1977},[129,64434,185],{"class":139},[129,64436,62624],{"class":244},[129,64438,61053],{"class":139},[129,64440,40],{"class":51301},[129,64442,55240],{"class":1977},[129,64444,185],{"class":139},[129,64446,64447],{"class":244},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[129,64449,55248],{"class":1977},[129,64451,185],{"class":139},[129,64453,7667],{"class":244},[129,64455,64420],{"class":139},[129,64457,51612],{"class":51301},[129,64459,51308],{"class":139},[129,64461,64462,64464,64466,64468,64470,64472,64474,64476,64478,64480,64483,64485,64487,64489,64491,64493],{"class":131,"line":16865},[129,64463,55235],{"class":139},[129,64465,51612],{"class":51301},[129,64467,53487],{"class":1977},[129,64469,185],{"class":139},[129,64471,62624],{"class":244},[129,64473,61053],{"class":139},[129,64475,40],{"class":51301},[129,64477,55240],{"class":1977},[129,64479,185],{"class":139},[129,64481,64482],{"class":244},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[129,64484,55248],{"class":1977},[129,64486,185],{"class":139},[129,64488,7667],{"class":244},[129,64490,64420],{"class":139},[129,64492,51612],{"class":51301},[129,64494,51308],{"class":139},[129,64496,64497,64499,64501,64503,64505,64507,64509,64511,64513,64515,64518,64520,64522,64524,64526,64528],{"class":131,"line":16870},[129,64498,55235],{"class":139},[129,64500,51612],{"class":51301},[129,64502,53487],{"class":1977},[129,64504,185],{"class":139},[129,64506,62624],{"class":244},[129,64508,61053],{"class":139},[129,64510,40],{"class":51301},[129,64512,55240],{"class":1977},[129,64514,185],{"class":139},[129,64516,64517],{"class":244},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[129,64519,55248],{"class":1977},[129,64521,185],{"class":139},[129,64523,7667],{"class":244},[129,64525,64420],{"class":139},[129,64527,51612],{"class":51301},[129,64529,51308],{"class":139},[129,64531,64532,64534,64536,64538,64540,64542,64544,64546,64548,64550,64553,64555,64557,64559,64561,64563],{"class":131,"line":16884},[129,64533,55235],{"class":139},[129,64535,51612],{"class":51301},[129,64537,53487],{"class":1977},[129,64539,185],{"class":139},[129,64541,62624],{"class":244},[129,64543,61053],{"class":139},[129,64545,40],{"class":51301},[129,64547,55240],{"class":1977},[129,64549,185],{"class":139},[129,64551,64552],{"class":244},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[129,64554,55248],{"class":1977},[129,64556,185],{"class":139},[129,64558,7667],{"class":244},[129,64560,64420],{"class":139},[129,64562,51612],{"class":51301},[129,64564,51308],{"class":139},[129,64566,64567,64569,64571],{"class":131,"line":16896},[129,64568,51777],{"class":139},[129,64570,51612],{"class":51301},[129,64572,51308],{"class":139},[129,64574,64575,64577,64579],{"class":131,"line":16901},[129,64576,52418],{"class":139},[129,64578,51612],{"class":51301},[129,64580,51308],{"class":139},[129,64582,64583,64585,64587],{"class":131,"line":16914},[129,64584,52145],{"class":139},[129,64586,51814],{"class":51301},[129,64588,51308],{"class":139},[129,64590,64591],{"class":131,"line":16919},[129,64592,64593],{"class":198},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[129,64595,64596],{"class":131,"line":16924},[129,64597,64598],{"class":198},"    \u002F\u002F 1.1 获取 a 元素 \n",[129,64600,64601,64603,64606,64608,64610,64612,64614,64617],{"class":131,"line":16929},[129,64602,11236],{"class":135},[129,64604,64605],{"class":188}," as",[129,64607,13579],{"class":135},[129,64609,54397],{"class":139},[129,64611,55682],{"class":1977},[129,64613,140],{"class":139},[129,64615,64616],{"class":244},"'.tab-nav a'",[129,64618,146],{"class":139},[129,64620,64621],{"class":131,"line":16942},[129,64622,64623],{"class":198},"    \u002F\u002F console.log(as) \n",[129,64625,64626,64628,64630,64632,64634,64636,64638,64640,64642,64645,64647,64649,64651],{"class":131,"line":16947},[129,64627,3215],{"class":135},[129,64629,1672],{"class":139},[129,64631,51848],{"class":135},[129,64633,9453],{"class":139},[129,64635,185],{"class":135},[129,64637,4107],{"class":188},[129,64639,9460],{"class":139},[129,64641,1049],{"class":135},[129,64643,64644],{"class":139}," as.",[129,64646,51969],{"class":188},[129,64648,3228],{"class":139},[129,64650,2306],{"class":135},[129,64652,12457],{"class":139},[129,64654,64655],{"class":131,"line":32634},[129,64656,64657],{"class":198},"      \u002F\u002F console.log(as[i])\n",[129,64659,64660],{"class":131,"line":32640},[129,64661,64662],{"class":198},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[129,64664,64665,64668,64670,64672,64675,64677,64679],{"class":131,"line":32646},[129,64666,64667],{"class":139},"      as[i].",[129,64669,57814],{"class":1977},[129,64671,140],{"class":139},[129,64673,64674],{"class":244},"'mouseenter'",[129,64676,12450],{"class":139},[129,64678,54450],{"class":135},[129,64680,54453],{"class":139},[129,64682,64683],{"class":131,"line":32652},[129,64684,64685],{"class":198},"        \u002F\u002F console.log('鼠标经过')\n",[129,64687,64688],{"class":131,"line":32658},[129,64689,64690],{"class":198},"        \u002F\u002F 排他思想  \n",[129,64692,64693],{"class":131,"line":32669},[129,64694,64695],{"class":198},"        \u002F\u002F 干掉别人 移除类active\n",[129,64697,64698,64700,64702,64704,64707,64709,64711,64713,64716],{"class":131,"line":32675},[129,64699,51926],{"class":139},[129,64701,54400],{"class":1977},[129,64703,140],{"class":139},[129,64705,64706],{"class":244},"'.tab-nav .active'",[129,64708,57004],{"class":139},[129,64710,57007],{"class":1977},[129,64712,140],{"class":139},[129,64714,64715],{"class":244},"'active'",[129,64717,146],{"class":139},[129,64719,64720],{"class":131,"line":32695},[129,64721,64722],{"class":198},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[129,64724,64725,64728,64731,64733,64735,64737],{"class":131,"line":32701},[129,64726,64727],{"class":188},"        this",[129,64729,64730],{"class":139},".classList.",[129,64732,5349],{"class":1977},[129,64734,140],{"class":139},[129,64736,64715],{"class":244},[129,64738,146],{"class":139},[129,64740,64741],{"class":131,"line":32712},[129,64742,2414],{"emptyLinePlaceholder":56},[129,64744,64745],{"class":131,"line":32718},[129,64746,64747],{"class":198},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[129,64749,64750],{"class":131,"line":32724},[129,64751,64752],{"class":198},"        \u002F\u002F 干掉别人\n",[129,64754,64755,64757,64759,64761,64764,64766,64768,64770,64772],{"class":131,"line":32730},[129,64756,51926],{"class":139},[129,64758,54400],{"class":1977},[129,64760,140],{"class":139},[129,64762,64763],{"class":244},"'.tab-content .active'",[129,64765,57004],{"class":139},[129,64767,57007],{"class":1977},[129,64769,140],{"class":139},[129,64771,64715],{"class":244},[129,64773,146],{"class":139},[129,64775,64776],{"class":131,"line":32736},[129,64777,64778],{"class":198},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[129,64780,64781,64783,64785,64787,64790,64792,64794,64796,64798,64800,64802,64804,64806],{"class":131,"line":32742},[129,64782,51926],{"class":139},[129,64784,54400],{"class":1977},[129,64786,140],{"class":139},[129,64788,64789],{"class":244},"`.tab-content .item:nth-child(${",[129,64791,580],{"class":139},[129,64793,45567],{"class":135},[129,64795,25119],{"class":188},[129,64797,57033],{"class":244},[129,64799,57004],{"class":139},[129,64801,5349],{"class":1977},[129,64803,140],{"class":139},[129,64805,64715],{"class":244},[129,64807,146],{"class":139},[129,64809,64810],{"class":131,"line":32748},[129,64811,2414],{"emptyLinePlaceholder":56},[129,64813,64814],{"class":131,"line":32754},[129,64815,64816],{"class":139},"      })\n",[129,64818,64819],{"class":131,"line":32774},[129,64820,2201],{"class":139},[129,64822,64823,64825,64827],{"class":131,"line":32780},[129,64824,52418],{"class":139},[129,64826,51814],{"class":51301},[129,64828,51308],{"class":139},[129,64830,64831,64833,64835],{"class":131,"line":32796},[129,64832,51786],{"class":139},[129,64834,51801],{"class":51301},[129,64836,51308],{"class":139},[129,64838,64839],{"class":131,"line":32802},[129,64840,2414],{"emptyLinePlaceholder":56},[129,64842,64843,64845,64847],{"class":131,"line":32816},[129,64844,51786],{"class":139},[129,64846,50636],{"class":51301},[129,64848,51308],{"class":139},[14,64850,64851],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64853,64854],{},"在监听事件中，this指向的就是他的调用者",[14,64856,64857],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64859,53721],{},[14,64861,64862],{},"(function () {",[14,64864,64865],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64867,64868],{},"list.addEventListener('click', function (e) {",[14,64870,64871],{},"if (e.target.tagName === 'A') {",[14,64873,64874],{},"\u002F\u002F 排他思想",[14,64876,64877],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64879,64880],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64882,64883],{},"\u002F\u002F console.log(old);",[14,64885,64886],{},"\u002F\u002F 判断",[14,64888,64889],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64891,64892],{},"if (old) old.classList.remove('active')",[14,64894,64895],{},"e.target.classList.add('active')",[14,64897,1085],{},[14,64899,52465],{},[14,64901,64902],{},"})();",[100,64904,64906],{"id":64905},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[120,64908,64910],{"className":50634,"code":64909,"language":50636,"meta":42,"style":42},"\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",[126,64911,64912,64922,64926,64934,64938,64952,64966,64978,64986,64992,65002,65012,65016,65020,65027,65039,65050,65067,65080,65094,65104,65108,65112,65119,65130,65148,65158,65170,65174,65178,65185,65202,65213,65225,65229,65233,65240,65252,65256,65264,65272,65276,65284,65292,65300,65315,65359,65367,65380,65393,65406,65414,65422,65430,65458,65466,65478,65491,65504,65512,65520,65528,65554,65562,65575,65587,65600,65608,65616,65624,65650,65658,65671,65683,65696,65704,65712,65720,65725,65745,65750,65770,65775,65792,65797,65805,65810,65839,65852,65856,65860,65865,65869,65897,65902,65919,65924,65929,65934,65939,65965,65969,65973,65981,65989,65993],{"__ignoreMap":42},[129,64913,64914,64916,64918,64920],{"class":131,"line":132},[129,64915,51298],{"class":139},[129,64917,51302],{"class":51301},[129,64919,51305],{"class":1977},[129,64921,51308],{"class":139},[129,64923,64924],{"class":131,"line":51},[129,64925,2414],{"emptyLinePlaceholder":56},[129,64927,64928,64930,64932],{"class":131,"line":1194},[129,64929,1049],{"class":139},[129,64931,50636],{"class":51301},[129,64933,51308],{"class":139},[129,64935,64936],{"class":131,"line":1209},[129,64937,2414],{"emptyLinePlaceholder":56},[129,64939,64940,64942,64944,64946,64948,64950],{"class":131,"line":1215},[129,64941,1049],{"class":139},[129,64943,51335],{"class":51301},[129,64945,51317],{"class":1977},[129,64947,185],{"class":139},[129,64949,51322],{"class":244},[129,64951,51308],{"class":139},[129,64953,64954,64956,64958,64960,64962,64964],{"class":131,"line":1229},[129,64955,52145],{"class":139},[129,64957,51345],{"class":51301},[129,64959,51348],{"class":1977},[129,64961,185],{"class":139},[129,64963,51353],{"class":244},[129,64965,51308],{"class":139},[129,64967,64968,64970,64972,64974,64976],{"class":131,"line":1235},[129,64969,52145],{"class":139},[129,64971,51408],{"class":51301},[129,64973,55315],{"class":139},[129,64975,51408],{"class":51301},[129,64977,51308],{"class":139},[129,64979,64980,64982,64984],{"class":131,"line":1326},[129,64981,52145],{"class":139},[129,64983,5141],{"class":51301},[129,64985,51308],{"class":139},[129,64987,64988,64990],{"class":131,"line":1332},[129,64989,6418],{"class":51301},[129,64991,15587],{"class":139},[129,64993,64994,64996,64998,65000],{"class":131,"line":1344},[129,64995,54707],{"class":188},[129,64997,51438],{"class":139},[129,64999,331],{"class":188},[129,65001,1305],{"class":139},[129,65003,65004,65006,65008,65010],{"class":131,"line":1626},[129,65005,54696],{"class":188},[129,65007,51438],{"class":139},[129,65009,331],{"class":188},[129,65011,1305],{"class":139},[129,65013,65014],{"class":131,"line":1631},[129,65015,2201],{"class":139},[129,65017,65018],{"class":131,"line":1637},[129,65019,2414],{"emptyLinePlaceholder":56},[129,65021,65022,65025],{"class":131,"line":1642},[129,65023,65024],{"class":51301},"    table",[129,65026,15587],{"class":139},[129,65028,65029,65032,65034,65037],{"class":131,"line":1656},[129,65030,65031],{"class":188},"      border-collapse",[129,65033,51438],{"class":139},[129,65035,65036],{"class":188},"collapse",[129,65038,1305],{"class":139},[129,65040,65041,65044,65046,65048],{"class":131,"line":1661},[129,65042,65043],{"class":188},"      border-spacing",[129,65045,51438],{"class":139},[129,65047,331],{"class":188},[129,65049,1305],{"class":139},[129,65051,65052,65054,65056,65058,65060,65062,65065],{"class":131,"line":1667},[129,65053,61978],{"class":188},[129,65055,51438],{"class":139},[129,65057,357],{"class":188},[129,65059,51493],{"class":135},[129,65061,51522],{"class":188},[129,65063,65064],{"class":188}," #c0c0c0",[129,65066,1305],{"class":139},[129,65068,65069,65071,65073,65076,65078],{"class":131,"line":1688},[129,65070,54772],{"class":188},[129,65072,51438],{"class":139},[129,65074,65075],{"class":188},"500",[129,65077,51493],{"class":135},[129,65079,1305],{"class":139},[129,65081,65082,65084,65086,65088,65090,65092],{"class":131,"line":1693},[129,65083,54707],{"class":188},[129,65085,51438],{"class":139},[129,65087,450],{"class":188},[129,65089,51493],{"class":135},[129,65091,51557],{"class":188},[129,65093,1305],{"class":139},[129,65095,65096,65098,65100,65102],{"class":131,"line":1707},[129,65097,57287],{"class":188},[129,65099,51438],{"class":139},[129,65101,51593],{"class":188},[129,65103,1305],{"class":139},[129,65105,65106],{"class":131,"line":1712},[129,65107,2201],{"class":139},[129,65109,65110],{"class":131,"line":1741},[129,65111,2414],{"emptyLinePlaceholder":56},[129,65113,65114,65117],{"class":131,"line":1746},[129,65115,65116],{"class":51301},"    th",[129,65118,15587],{"class":139},[129,65120,65121,65123,65125,65128],{"class":131,"line":1763},[129,65122,54885],{"class":188},[129,65124,51438],{"class":139},[129,65126,65127],{"class":188},"#09c",[129,65129,1305],{"class":139},[129,65131,65132,65135,65137,65139,65141,65143,65146],{"class":131,"line":1768},[129,65133,65134],{"class":188},"      font",[129,65136,51438],{"class":139},[129,65138,62340],{"class":188},[129,65140,64074],{"class":188},[129,65142,51493],{"class":135},[129,65144,65145],{"class":244}," \"微软雅黑\"",[129,65147,1305],{"class":139},[129,65149,65150,65152,65154,65156],{"class":131,"line":1773},[129,65151,57417],{"class":188},[129,65153,51438],{"class":139},[129,65155,60843],{"class":188},[129,65157,1305],{"class":139},[129,65159,65160,65162,65164,65166,65168],{"class":131,"line":1778},[129,65161,54786],{"class":188},[129,65163,51438],{"class":139},[129,65165,939],{"class":188},[129,65167,51493],{"class":135},[129,65169,1305],{"class":139},[129,65171,65172],{"class":131,"line":1792},[129,65173,2201],{"class":139},[129,65175,65176],{"class":131,"line":1797},[129,65177,2414],{"emptyLinePlaceholder":56},[129,65179,65180,65183],{"class":131,"line":2591},[129,65181,65182],{"class":51301},"    td",[129,65184,15587],{"class":139},[129,65186,65187,65189,65191,65193,65195,65197,65200],{"class":131,"line":2605},[129,65188,61978],{"class":188},[129,65190,51438],{"class":139},[129,65192,357],{"class":188},[129,65194,51493],{"class":135},[129,65196,51522],{"class":188},[129,65198,65199],{"class":188}," #d0d0d0",[129,65201,1305],{"class":139},[129,65203,65204,65206,65208,65211],{"class":131,"line":2613},[129,65205,57417],{"class":188},[129,65207,51438],{"class":139},[129,65209,65210],{"class":188},"#404060",[129,65212,1305],{"class":139},[129,65214,65215,65217,65219,65221,65223],{"class":131,"line":2618},[129,65216,54696],{"class":188},[129,65218,51438],{"class":139},[129,65220,585],{"class":188},[129,65222,51493],{"class":135},[129,65224,1305],{"class":139},[129,65226,65227],{"class":131,"line":2624},[129,65228,2201],{"class":139},[129,65230,65231],{"class":131,"line":2630},[129,65232,2414],{"emptyLinePlaceholder":56},[129,65234,65235,65238],{"class":131,"line":2635},[129,65236,65237],{"class":1977},"    .allCheck",[129,65239,15587],{"class":139},[129,65241,65242,65244,65246,65248,65250],{"class":131,"line":7963},[129,65243,54772],{"class":188},[129,65245,51438],{"class":139},[129,65247,751],{"class":188},[129,65249,51493],{"class":135},[129,65251,1305],{"class":139},[129,65253,65254],{"class":131,"line":7987},[129,65255,2201],{"class":139},[129,65257,65258,65260,65262],{"class":131,"line":7992},[129,65259,52418],{"class":139},[129,65261,5141],{"class":51301},[129,65263,51308],{"class":139},[129,65265,65266,65268,65270],{"class":131,"line":7998},[129,65267,51786],{"class":139},[129,65269,51335],{"class":51301},[129,65271,51308],{"class":139},[129,65273,65274],{"class":131,"line":8025},[129,65275,2414],{"emptyLinePlaceholder":56},[129,65277,65278,65280,65282],{"class":131,"line":8030},[129,65279,1049],{"class":139},[129,65281,51801],{"class":51301},[129,65283,51308],{"class":139},[129,65285,65286,65288,65290],{"class":131,"line":8036},[129,65287,52145],{"class":139},[129,65289,277],{"class":51301},[129,65291,51308],{"class":139},[129,65293,65294,65296,65298],{"class":131,"line":8048},[129,65295,51342],{"class":139},[129,65297,283],{"class":51301},[129,65299,51308],{"class":139},[129,65301,65302,65304,65306,65308,65310,65313],{"class":131,"line":8060},[129,65303,55235],{"class":139},[129,65305,286],{"class":51301},[129,65307,53487],{"class":1977},[129,65309,185],{"class":139},[129,65311,65312],{"class":244},"\"allCheck\"",[129,65314,51308],{"class":139},[129,65316,65317,65319,65321,65323,65325,65327,65329,65331,65333,65335,65337,65340,65343,65345,65347,65349,65352,65355,65357],{"class":131,"line":8072},[129,65318,55303],{"class":139},[129,65320,53822],{"class":51301},[129,65322,53825],{"class":1977},[129,65324,185],{"class":139},[129,65326,53830],{"class":244},[129,65328,14935],{"class":1977},[129,65330,185],{"class":139},[129,65332,7667],{"class":244},[129,65334,14974],{"class":1977},[129,65336,185],{"class":139},[129,65338,65339],{"class":244},"\"checkAll\"",[129,65341,65342],{"class":139},"> \u003C",[129,65344,129],{"class":51301},[129,65346,53487],{"class":1977},[129,65348,185],{"class":139},[129,65350,65351],{"class":244},"\"all\"",[129,65353,65354],{"class":139},">全选\u003C\u002F",[129,65356,129],{"class":51301},[129,65358,51308],{"class":139},[129,65360,65361,65363,65365],{"class":131,"line":9731},[129,65362,55408],{"class":139},[129,65364,286],{"class":51301},[129,65366,51308],{"class":139},[129,65368,65369,65371,65373,65376,65378],{"class":131,"line":9756},[129,65370,55235],{"class":139},[129,65372,286],{"class":51301},[129,65374,65375],{"class":139},">商品\u003C\u002F",[129,65377,286],{"class":51301},[129,65379,51308],{"class":139},[129,65381,65382,65384,65386,65389,65391],{"class":131,"line":9779},[129,65383,55235],{"class":139},[129,65385,286],{"class":51301},[129,65387,65388],{"class":139},">商家\u003C\u002F",[129,65390,286],{"class":51301},[129,65392,51308],{"class":139},[129,65394,65395,65397,65399,65402,65404],{"class":131,"line":9803},[129,65396,55235],{"class":139},[129,65398,286],{"class":51301},[129,65400,65401],{"class":139},">价格\u003C\u002F",[129,65403,286],{"class":51301},[129,65405,51308],{"class":139},[129,65407,65408,65410,65412],{"class":131,"line":9808},[129,65409,51777],{"class":139},[129,65411,283],{"class":51301},[129,65413,51308],{"class":139},[129,65415,65416,65418,65420],{"class":131,"line":9813},[129,65417,51342],{"class":139},[129,65419,283],{"class":51301},[129,65421,51308],{"class":139},[129,65423,65424,65426,65428],{"class":131,"line":9818},[129,65425,55235],{"class":139},[129,65427,329],{"class":51301},[129,65429,51308],{"class":139},[129,65431,65432,65434,65436,65438,65440,65442,65444,65446,65449,65451,65453,65456],{"class":131,"line":9827},[129,65433,55303],{"class":139},[129,65435,53822],{"class":51301},[129,65437,53825],{"class":1977},[129,65439,185],{"class":139},[129,65441,53830],{"class":244},[129,65443,14935],{"class":1977},[129,65445,185],{"class":139},[129,65447,65448],{"class":244},"\"check\"",[129,65450,53487],{"class":1977},[129,65452,185],{"class":139},[129,65454,65455],{"class":244},"\"ck\"",[129,65457,51308],{"class":139},[129,65459,65460,65462,65464],{"class":131,"line":9832},[129,65461,55408],{"class":139},[129,65463,329],{"class":51301},[129,65465,51308],{"class":139},[129,65467,65468,65470,65472,65474,65476],{"class":131,"line":9838},[129,65469,55235],{"class":139},[129,65471,329],{"class":51301},[129,65473,61174],{"class":139},[129,65475,329],{"class":51301},[129,65477,51308],{"class":139},[129,65479,65480,65482,65484,65487,65489],{"class":131,"line":9859},[129,65481,55235],{"class":139},[129,65483,329],{"class":51301},[129,65485,65486],{"class":139},">小米\u003C\u002F",[129,65488,329],{"class":51301},[129,65490,51308],{"class":139},[129,65492,65493,65495,65497,65500,65502],{"class":131,"line":9865},[129,65494,55235],{"class":139},[129,65496,329],{"class":51301},[129,65498,65499],{"class":139},">￥1999\u003C\u002F",[129,65501,329],{"class":51301},[129,65503,51308],{"class":139},[129,65505,65506,65508,65510],{"class":131,"line":9879},[129,65507,51777],{"class":139},[129,65509,283],{"class":51301},[129,65511,51308],{"class":139},[129,65513,65514,65516,65518],{"class":131,"line":9885},[129,65515,51342],{"class":139},[129,65517,283],{"class":51301},[129,65519,51308],{"class":139},[129,65521,65522,65524,65526],{"class":131,"line":9912},[129,65523,55235],{"class":139},[129,65525,329],{"class":51301},[129,65527,51308],{"class":139},[129,65529,65530,65532,65534,65536,65538,65540,65542,65544,65546,65548,65550,65552],{"class":131,"line":9921},[129,65531,55303],{"class":139},[129,65533,53822],{"class":51301},[129,65535,53825],{"class":1977},[129,65537,185],{"class":139},[129,65539,53830],{"class":244},[129,65541,14935],{"class":1977},[129,65543,185],{"class":139},[129,65545,65448],{"class":244},[129,65547,53487],{"class":1977},[129,65549,185],{"class":139},[129,65551,65455],{"class":244},[129,65553,51308],{"class":139},[129,65555,65556,65558,65560],{"class":131,"line":9927},[129,65557,55408],{"class":139},[129,65559,329],{"class":51301},[129,65561,51308],{"class":139},[129,65563,65564,65566,65568,65571,65573],{"class":131,"line":9935},[129,65565,55235],{"class":139},[129,65567,329],{"class":51301},[129,65569,65570],{"class":139},">小米净水器\u003C\u002F",[129,65572,329],{"class":51301},[129,65574,51308],{"class":139},[129,65576,65577,65579,65581,65583,65585],{"class":131,"line":9940},[129,65578,55235],{"class":139},[129,65580,329],{"class":51301},[129,65582,65486],{"class":139},[129,65584,329],{"class":51301},[129,65586,51308],{"class":139},[129,65588,65589,65591,65593,65596,65598],{"class":131,"line":16619},[129,65590,55235],{"class":139},[129,65592,329],{"class":51301},[129,65594,65595],{"class":139},">￥4999\u003C\u002F",[129,65597,329],{"class":51301},[129,65599,51308],{"class":139},[129,65601,65602,65604,65606],{"class":131,"line":16625},[129,65603,51777],{"class":139},[129,65605,283],{"class":51301},[129,65607,51308],{"class":139},[129,65609,65610,65612,65614],{"class":131,"line":16648},[129,65611,51342],{"class":139},[129,65613,283],{"class":51301},[129,65615,51308],{"class":139},[129,65617,65618,65620,65622],{"class":131,"line":16654},[129,65619,55235],{"class":139},[129,65621,329],{"class":51301},[129,65623,51308],{"class":139},[129,65625,65626,65628,65630,65632,65634,65636,65638,65640,65642,65644,65646,65648],{"class":131,"line":16677},[129,65627,55303],{"class":139},[129,65629,53822],{"class":51301},[129,65631,53825],{"class":1977},[129,65633,185],{"class":139},[129,65635,53830],{"class":244},[129,65637,14935],{"class":1977},[129,65639,185],{"class":139},[129,65641,65448],{"class":244},[129,65643,53487],{"class":1977},[129,65645,185],{"class":139},[129,65647,65455],{"class":244},[129,65649,51308],{"class":139},[129,65651,65652,65654,65656],{"class":131,"line":16691},[129,65653,55408],{"class":139},[129,65655,329],{"class":51301},[129,65657,51308],{"class":139},[129,65659,65660,65662,65664,65667,65669],{"class":131,"line":16711},[129,65661,55235],{"class":139},[129,65663,329],{"class":51301},[129,65665,65666],{"class":139},">小米电视\u003C\u002F",[129,65668,329],{"class":51301},[129,65670,51308],{"class":139},[129,65672,65673,65675,65677,65679,65681],{"class":131,"line":16717},[129,65674,55235],{"class":139},[129,65676,329],{"class":51301},[129,65678,65486],{"class":139},[129,65680,329],{"class":51301},[129,65682,51308],{"class":139},[129,65684,65685,65687,65689,65692,65694],{"class":131,"line":16728},[129,65686,55235],{"class":139},[129,65688,329],{"class":51301},[129,65690,65691],{"class":139},">￥5999\u003C\u002F",[129,65693,329],{"class":51301},[129,65695,51308],{"class":139},[129,65697,65698,65700,65702],{"class":131,"line":16751},[129,65699,51777],{"class":139},[129,65701,283],{"class":51301},[129,65703,51308],{"class":139},[129,65705,65706,65708,65710],{"class":131,"line":16773},[129,65707,52418],{"class":139},[129,65709,277],{"class":51301},[129,65711,51308],{"class":139},[129,65713,65714,65716,65718],{"class":131,"line":16778},[129,65715,52145],{"class":139},[129,65717,51814],{"class":51301},[129,65719,51308],{"class":139},[129,65721,65722],{"class":131,"line":16784},[129,65723,65724],{"class":198},"    \u002F\u002F 1. 获取大复选框\n",[129,65726,65727,65729,65732,65734,65736,65738,65740,65743],{"class":131,"line":16798},[129,65728,11236],{"class":135},[129,65730,65731],{"class":188}," checkAll",[129,65733,13579],{"class":135},[129,65735,54397],{"class":139},[129,65737,54400],{"class":1977},[129,65739,140],{"class":139},[129,65741,65742],{"class":244},"'#checkAll'",[129,65744,146],{"class":139},[129,65746,65747],{"class":131,"line":16811},[129,65748,65749],{"class":198},"    \u002F\u002F 2. 获取所有的小复选框\n",[129,65751,65752,65754,65757,65759,65761,65763,65765,65768],{"class":131,"line":16816},[129,65753,11236],{"class":135},[129,65755,65756],{"class":188}," cks",[129,65758,13579],{"class":135},[129,65760,54397],{"class":139},[129,65762,55682],{"class":1977},[129,65764,140],{"class":139},[129,65766,65767],{"class":244},"'.ck'",[129,65769,146],{"class":139},[129,65771,65772],{"class":131,"line":16830},[129,65773,65774],{"class":198},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[129,65776,65777,65780,65782,65784,65786,65788,65790],{"class":131,"line":16835},[129,65778,65779],{"class":139},"    checkAll.",[129,65781,57814],{"class":1977},[129,65783,140],{"class":139},[129,65785,57819],{"class":244},[129,65787,12450],{"class":139},[129,65789,54450],{"class":135},[129,65791,54453],{"class":139},[129,65793,65794],{"class":131,"line":16841},[129,65795,65796],{"class":198},"      \u002F\u002F 得到当前大复选框的选中状态\n",[129,65798,65799,65802],{"class":131,"line":16846},[129,65800,65801],{"class":198},"      \u002F\u002F console.log(checkAll.checked)",[129,65803,65804],{"class":198},"  \u002F\u002F 得到 是 true 或者是 false\n",[129,65806,65807],{"class":131,"line":16860},[129,65808,65809],{"class":198},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[129,65811,65812,65814,65816,65818,65820,65822,65824,65826,65828,65831,65833,65835,65837],{"class":131,"line":16865},[129,65813,52285],{"class":135},[129,65815,1672],{"class":139},[129,65817,51848],{"class":135},[129,65819,9453],{"class":139},[129,65821,185],{"class":135},[129,65823,4107],{"class":188},[129,65825,9460],{"class":139},[129,65827,1049],{"class":135},[129,65829,65830],{"class":139}," cks.",[129,65832,51969],{"class":188},[129,65834,3228],{"class":139},[129,65836,2306],{"class":135},[129,65838,12457],{"class":139},[129,65840,65841,65844,65846,65849],{"class":131,"line":16870},[129,65842,65843],{"class":139},"        cks[i].checked ",[129,65845,185],{"class":135},[129,65847,65848],{"class":188}," this",[129,65850,65851],{"class":139},".checked\n",[129,65853,65854],{"class":131,"line":16884},[129,65855,52399],{"class":139},[129,65857,65858],{"class":131,"line":16896},[129,65859,33462],{"class":139},[129,65861,65862],{"class":131,"line":16901},[129,65863,65864],{"class":198},"    \u002F\u002F 5. 小复选框控制大复选框\n",[129,65866,65867],{"class":131,"line":16914},[129,65868,2414],{"emptyLinePlaceholder":56},[129,65870,65871,65873,65875,65877,65879,65881,65883,65885,65887,65889,65891,65893,65895],{"class":131,"line":16919},[129,65872,3215],{"class":135},[129,65874,1672],{"class":139},[129,65876,51848],{"class":135},[129,65878,9453],{"class":139},[129,65880,185],{"class":135},[129,65882,4107],{"class":188},[129,65884,9460],{"class":139},[129,65886,1049],{"class":135},[129,65888,65830],{"class":139},[129,65890,51969],{"class":188},[129,65892,3228],{"class":139},[129,65894,2306],{"class":135},[129,65896,12457],{"class":139},[129,65898,65899],{"class":131,"line":16924},[129,65900,65901],{"class":198},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[129,65903,65904,65907,65909,65911,65913,65915,65917],{"class":131,"line":16929},[129,65905,65906],{"class":139},"      cks[i].",[129,65908,57814],{"class":1977},[129,65910,140],{"class":139},[129,65912,57819],{"class":244},[129,65914,12450],{"class":139},[129,65916,54450],{"class":135},[129,65918,54453],{"class":139},[129,65920,65921],{"class":131,"line":16942},[129,65922,65923],{"class":198},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[129,65925,65926],{"class":131,"line":16947},[129,65927,65928],{"class":198},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[129,65930,65931],{"class":131,"line":32634},[129,65932,65933],{"class":198},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[129,65935,65936],{"class":131,"line":32640},[129,65937,65938],{"class":198},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[129,65940,65941,65944,65946,65948,65950,65952,65955,65957,65959,65961,65963],{"class":131,"line":32646},[129,65942,65943],{"class":139},"        checkAll.checked ",[129,65945,185],{"class":135},[129,65947,54397],{"class":139},[129,65949,55682],{"class":1977},[129,65951,140],{"class":139},[129,65953,65954],{"class":244},"'.ck:checked'",[129,65956,30827],{"class":139},[129,65958,51969],{"class":188},[129,65960,57907],{"class":135},[129,65962,65830],{"class":139},[129,65964,55832],{"class":188},[129,65966,65967],{"class":131,"line":32652},[129,65968,64816],{"class":139},[129,65970,65971],{"class":131,"line":32658},[129,65972,2201],{"class":139},[129,65974,65975,65977,65979],{"class":131,"line":32669},[129,65976,52418],{"class":139},[129,65978,51814],{"class":51301},[129,65980,51308],{"class":139},[129,65982,65983,65985,65987],{"class":131,"line":32675},[129,65984,51786],{"class":139},[129,65986,51801],{"class":51301},[129,65988,51308],{"class":139},[129,65990,65991],{"class":131,"line":32695},[129,65992,2414],{"emptyLinePlaceholder":56},[129,65994,65995,65997,65999],{"class":131,"line":32701},[129,65996,51786],{"class":139},[129,65998,50636],{"class":51301},[129,66000,51308],{"class":139},[14,66002,66003],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66005,66006],{},"用好之间比较得到的布尔值！！！",[14,66008,66009,66010,66013,66014,1672,66017,723,66019,66022],{},"在 JS 里访问的时候，",[126,66011,66012],{},"checkbox.checked"," 是一个 ",[289,66015,66016],{},"布尔值",[126,66018,1377],{},[126,66020,66021],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66024,66025,66026,66029,66030],{},"HTML 的 ",[126,66027,66028],{},"checked=\"checked\""," 只是 ",[289,66031,66032,66033,66036],{},"初始值；JS 的 ",[126,66034,66035],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66038,66039],{},"：checked是一个伪类选择器",[14,66041,66042],{},[40,66043],{"alt":42,"src":66044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66046,66047,66050],{},[66048,66049],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66052,66053],{},[40,66054],{"alt":42,"src":66055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[71,66057,66059],{"id":66058},"_33-dom事件进阶","3.3 DOM事件进阶",[100,66061,66063],{"id":66062},"_331-事件流","3.3.1 事件流",[14,66065,66066],{},[40,66067],{"alt":42,"src":66068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22013,66070,66072],{"id":66071},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66074,66075],{},[40,66076],{"alt":42,"src":66077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[120,66079,66081],{"className":50634,"code":66080,"language":50636,"meta":42,"style":42},"\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",[126,66082,66083,66093,66107,66111,66119,66133,66153,66165,66173,66180,66192,66204,66214,66218,66222,66229,66241,66253,66263,66267,66275,66283,66287,66295,66310,66329,66337,66345,66365,66385,66401,66412,66420,66437,66448,66456,66473,66484,66492,66500,66508,66512],{"__ignoreMap":42},[129,66084,66085,66087,66089,66091],{"class":131,"line":132},[129,66086,51298],{"class":139},[129,66088,51302],{"class":51301},[129,66090,51305],{"class":1977},[129,66092,51308],{"class":139},[129,66094,66095,66097,66099,66101,66103,66105],{"class":131,"line":51},[129,66096,1049],{"class":139},[129,66098,50636],{"class":51301},[129,66100,51317],{"class":1977},[129,66102,185],{"class":139},[129,66104,51322],{"class":244},[129,66106,51308],{"class":139},[129,66108,66109],{"class":131,"line":1194},[129,66110,2414],{"emptyLinePlaceholder":56},[129,66112,66113,66115,66117],{"class":131,"line":1209},[129,66114,1049],{"class":139},[129,66116,51335],{"class":51301},[129,66118,51308],{"class":139},[129,66120,66121,66123,66125,66127,66129,66131],{"class":131,"line":1215},[129,66122,52145],{"class":139},[129,66124,51345],{"class":51301},[129,66126,51348],{"class":1977},[129,66128,185],{"class":139},[129,66130,51353],{"class":244},[129,66132,51308],{"class":139},[129,66134,66135,66137,66139,66141,66143,66145,66147,66149,66151],{"class":131,"line":1229},[129,66136,52145],{"class":139},[129,66138,51345],{"class":51301},[129,66140,14935],{"class":1977},[129,66142,185],{"class":139},[129,66144,51392],{"class":244},[129,66146,51372],{"class":1977},[129,66148,185],{"class":139},[129,66150,51399],{"class":244},[129,66152,51308],{"class":139},[129,66154,66155,66157,66159,66161,66163],{"class":131,"line":1235},[129,66156,52145],{"class":139},[129,66158,51408],{"class":51301},[129,66160,51411],{"class":139},[129,66162,51408],{"class":51301},[129,66164,51308],{"class":139},[129,66166,66167,66169,66171],{"class":131,"line":1326},[129,66168,52145],{"class":139},[129,66170,5141],{"class":51301},[129,66172,51308],{"class":139},[129,66174,66175,66178],{"class":131,"line":1332},[129,66176,66177],{"class":1977},"    .father",[129,66179,15587],{"class":139},[129,66181,66182,66184,66186,66188,66190],{"class":131,"line":1344},[129,66183,54772],{"class":188},[129,66185,51438],{"class":139},[129,66187,65075],{"class":188},[129,66189,51493],{"class":135},[129,66191,1305],{"class":139},[129,66193,66194,66196,66198,66200,66202],{"class":131,"line":1626},[129,66195,54786],{"class":188},[129,66197,51438],{"class":139},[129,66199,65075],{"class":188},[129,66201,51493],{"class":135},[129,66203,1305],{"class":139},[129,66205,66206,66208,66210,66212],{"class":131,"line":1631},[129,66207,54885],{"class":188},[129,66209,51438],{"class":139},[129,66211,51646],{"class":188},[129,66213,1305],{"class":139},[129,66215,66216],{"class":131,"line":1637},[129,66217,2201],{"class":139},[129,66219,66220],{"class":131,"line":1642},[129,66221,2414],{"emptyLinePlaceholder":56},[129,66223,66224,66227],{"class":131,"line":1656},[129,66225,66226],{"class":1977},"    .son",[129,66228,15587],{"class":139},[129,66230,66231,66233,66235,66237,66239],{"class":131,"line":1661},[129,66232,54772],{"class":188},[129,66234,51438],{"class":139},[129,66236,1736],{"class":188},[129,66238,51493],{"class":135},[129,66240,1305],{"class":139},[129,66242,66243,66245,66247,66249,66251],{"class":131,"line":1667},[129,66244,54786],{"class":188},[129,66246,51438],{"class":139},[129,66248,1736],{"class":188},[129,66250,51493],{"class":135},[129,66252,1305],{"class":139},[129,66254,66255,66257,66259,66261],{"class":131,"line":1688},[129,66256,54885],{"class":188},[129,66258,51438],{"class":139},[129,66260,54890],{"class":188},[129,66262,1305],{"class":139},[129,66264,66265],{"class":131,"line":1693},[129,66266,2201],{"class":139},[129,66268,66269,66271,66273],{"class":131,"line":1707},[129,66270,52418],{"class":139},[129,66272,5141],{"class":51301},[129,66274,51308],{"class":139},[129,66276,66277,66279,66281],{"class":131,"line":1712},[129,66278,51786],{"class":139},[129,66280,51335],{"class":51301},[129,66282,51308],{"class":139},[129,66284,66285],{"class":131,"line":1741},[129,66286,2414],{"emptyLinePlaceholder":56},[129,66288,66289,66291,66293],{"class":131,"line":1746},[129,66290,1049],{"class":139},[129,66292,51801],{"class":51301},[129,66294,51308],{"class":139},[129,66296,66297,66299,66301,66303,66305,66308],{"class":131,"line":1763},[129,66298,52145],{"class":139},[129,66300,51612],{"class":51301},[129,66302,53487],{"class":1977},[129,66304,185],{"class":139},[129,66306,66307],{"class":244},"\"father\"",[129,66309,51308],{"class":139},[129,66311,66312,66314,66316,66318,66320,66323,66325,66327],{"class":131,"line":1768},[129,66313,51342],{"class":139},[129,66315,51612],{"class":51301},[129,66317,53487],{"class":1977},[129,66319,185],{"class":139},[129,66321,66322],{"class":244},"\"son\"",[129,66324,55315],{"class":139},[129,66326,51612],{"class":51301},[129,66328,51308],{"class":139},[129,66330,66331,66333,66335],{"class":131,"line":1773},[129,66332,52418],{"class":139},[129,66334,51612],{"class":51301},[129,66336,51308],{"class":139},[129,66338,66339,66341,66343],{"class":131,"line":1778},[129,66340,52145],{"class":139},[129,66342,51814],{"class":51301},[129,66344,51308],{"class":139},[129,66346,66347,66349,66352,66354,66356,66358,66360,66363],{"class":131,"line":1792},[129,66348,11236],{"class":135},[129,66350,66351],{"class":188}," fa",[129,66353,13579],{"class":135},[129,66355,54397],{"class":139},[129,66357,54400],{"class":1977},[129,66359,140],{"class":139},[129,66361,66362],{"class":244},"'.father'",[129,66364,146],{"class":139},[129,66366,66367,66369,66372,66374,66376,66378,66380,66383],{"class":131,"line":1797},[129,66368,11236],{"class":135},[129,66370,66371],{"class":188}," son",[129,66373,13579],{"class":135},[129,66375,54397],{"class":139},[129,66377,54400],{"class":1977},[129,66379,140],{"class":139},[129,66381,66382],{"class":244},"'.son'",[129,66384,146],{"class":139},[129,66386,66387,66389,66391,66393,66395,66397,66399],{"class":131,"line":2591},[129,66388,52408],{"class":139},[129,66390,57814],{"class":1977},[129,66392,140],{"class":139},[129,66394,57819],{"class":244},[129,66396,12450],{"class":139},[129,66398,54450],{"class":135},[129,66400,54453],{"class":139},[129,66402,66403,66405,66407,66410],{"class":131,"line":2605},[129,66404,58926],{"class":1977},[129,66406,140],{"class":139},[129,66408,66409],{"class":244},"'woshiu1'",[129,66411,146],{"class":139},[129,66413,66414,66416,66418],{"class":131,"line":2613},[129,66415,54536],{"class":139},[129,66417,1377],{"class":188},[129,66419,146],{"class":139},[129,66421,66422,66425,66427,66429,66431,66433,66435],{"class":131,"line":2618},[129,66423,66424],{"class":139},"    fa.",[129,66426,57814],{"class":1977},[129,66428,140],{"class":139},[129,66430,57819],{"class":244},[129,66432,12450],{"class":139},[129,66434,54450],{"class":135},[129,66436,54453],{"class":139},[129,66438,66439,66441,66443,66446],{"class":131,"line":2624},[129,66440,58926],{"class":1977},[129,66442,140],{"class":139},[129,66444,66445],{"class":244},"'1'",[129,66447,146],{"class":139},[129,66449,66450,66452,66454],{"class":131,"line":2630},[129,66451,54536],{"class":139},[129,66453,1377],{"class":188},[129,66455,146],{"class":139},[129,66457,66458,66461,66463,66465,66467,66469,66471],{"class":131,"line":2635},[129,66459,66460],{"class":139},"    son.",[129,66462,57814],{"class":1977},[129,66464,140],{"class":139},[129,66466,57819],{"class":244},[129,66468,12450],{"class":139},[129,66470,54450],{"class":135},[129,66472,54453],{"class":139},[129,66474,66475,66477,66479,66482],{"class":131,"line":7963},[129,66476,58926],{"class":1977},[129,66478,140],{"class":139},[129,66480,66481],{"class":244},"'2'",[129,66483,146],{"class":139},[129,66485,66486,66488,66490],{"class":131,"line":7987},[129,66487,54536],{"class":139},[129,66489,1377],{"class":188},[129,66491,146],{"class":139},[129,66493,66494,66496,66498],{"class":131,"line":7992},[129,66495,52418],{"class":139},[129,66497,51814],{"class":51301},[129,66499,51308],{"class":139},[129,66501,66502,66504,66506],{"class":131,"line":7998},[129,66503,51786],{"class":139},[129,66505,51801],{"class":51301},[129,66507,51308],{"class":139},[129,66509,66510],{"class":131,"line":8025},[129,66511,2414],{"emptyLinePlaceholder":56},[129,66513,66514,66516,66518],{"class":131,"line":8030},[129,66515,51786],{"class":139},[129,66517,50636],{"class":51301},[129,66519,51308],{"class":139},[14,66521,66522],{},[40,66523],{"alt":42,"src":66524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66526,66527],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22013,66529,66531],{"id":66530},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66533,66534],{},[40,66535],{"alt":42,"src":66536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66538,66539],{},"反着来",[14,66541,66542],{},"注意是同名事件，比如都是‘click’",[22013,66544,66546],{"id":66545},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66548,66549],{},[40,66550],{"alt":42,"src":66551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22013,66553,66555],{"id":66554},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66557,66558],{},[40,66559],{"alt":42,"src":66560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66562,66563],{},[40,66564],{"alt":42,"src":66565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22013,66567,66569],{"id":66568},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[83,66571,66572],{},[86,66573,66574],{},"事件类型的区别",[14,66576,66577],{},[40,66578],{"alt":42,"src":66579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66581,66582],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[83,66584,66585],{"start":51},[86,66586,66587],{},"注册事件的区别",[14,66589,66590],{},[40,66591],{"alt":42,"src":66592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22013,66594,66596],{"id":66595},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66598,66599],{},[40,66600],{"alt":42,"src":66601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66603,66604],{},[40,66605],{"alt":42,"src":66606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[120,66608,66610],{"className":53068,"code":66609,"language":53070,"meta":42,"style":42},"\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",[126,66611,66612,66620,66637,66660,66668,66673,66678,66683,66687,66695,66703],{"__ignoreMap":42},[129,66613,66614,66616,66618],{"class":131,"line":132},[129,66615,1049],{"class":139},[129,66617,51801],{"class":51301},[129,66619,51308],{"class":139},[129,66621,66622,66624,66627,66630,66632,66635],{"class":131,"line":51},[129,66623,52145],{"class":139},[129,66625,66626],{"class":51301},"form",[129,66628,66629],{"class":1977}," action",[129,66631,185],{"class":139},[129,66633,66634],{"class":244},"\"http:\u002F\u002Fwww.itcast.cn\"",[129,66636,51308],{"class":139},[129,66638,66639,66641,66643,66645,66647,66650,66653,66655,66658],{"class":131,"line":1194},[129,66640,51342],{"class":139},[129,66642,53822],{"class":51301},[129,66644,53825],{"class":1977},[129,66646,185],{"class":139},[129,66648,66649],{"class":244},"\"submit\"",[129,66651,66652],{"class":1977}," value",[129,66654,185],{"class":139},[129,66656,66657],{"class":244},"\"免费注册\"",[129,66659,51308],{"class":139},[129,66661,66662,66664,66666],{"class":131,"line":1209},[129,66663,51342],{"class":139},[129,66665,51814],{"class":51301},[129,66667,51308],{"class":139},[129,66669,66670],{"class":131,"line":1215},[129,66671,66672],{"class":139},"      const form = document.querySelector('form')\n",[129,66674,66675],{"class":131,"line":1229},[129,66676,66677],{"class":139},"      form.addEventListener('submit', function (e) {\n",[129,66679,66680],{"class":131,"line":1235},[129,66681,66682],{"class":139},"        e.preventDefault()\n",[129,66684,66685],{"class":131,"line":1326},[129,66686,64816],{"class":139},[129,66688,66689,66691,66693],{"class":131,"line":1332},[129,66690,51777],{"class":139},[129,66692,51814],{"class":51301},[129,66694,51308],{"class":139},[129,66696,66697,66699,66701],{"class":131,"line":1344},[129,66698,52418],{"class":139},[129,66700,66626],{"class":51301},[129,66702,51308],{"class":139},[129,66704,66705,66707,66709],{"class":131,"line":1626},[129,66706,51786],{"class":139},[129,66708,51801],{"class":51301},[129,66710,51308],{"class":139},[14,66712,66713],{},"点击不在跳转！！！",[100,66715,66717],{"id":66716},"_332-事件委托","3.3.2 事件委托",[14,66719,66720],{},[40,66721],{"alt":42,"src":66722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[120,66724,66726],{"className":50634,"code":66725,"language":50636,"meta":42,"style":42},"\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",[126,66727,66728,66738,66752,66756,66764,66778,66798,66810,66818,66822,66830,66838,66850,66862,66874,66886,66898,66911,66919,66927,66932,66951,66972,66977,66982,66987,66992,67001,67005,67015,67019,67024,67029,67043,67053,67057,67061,67069,67077,67081],{"__ignoreMap":42},[129,66729,66730,66732,66734,66736],{"class":131,"line":132},[129,66731,51298],{"class":139},[129,66733,51302],{"class":51301},[129,66735,51305],{"class":1977},[129,66737,51308],{"class":139},[129,66739,66740,66742,66744,66746,66748,66750],{"class":131,"line":51},[129,66741,1049],{"class":139},[129,66743,50636],{"class":51301},[129,66745,51317],{"class":1977},[129,66747,185],{"class":139},[129,66749,51322],{"class":244},[129,66751,51308],{"class":139},[129,66753,66754],{"class":131,"line":1194},[129,66755,2414],{"emptyLinePlaceholder":56},[129,66757,66758,66760,66762],{"class":131,"line":1209},[129,66759,1049],{"class":139},[129,66761,51335],{"class":51301},[129,66763,51308],{"class":139},[129,66765,66766,66768,66770,66772,66774,66776],{"class":131,"line":1215},[129,66767,52145],{"class":139},[129,66769,51345],{"class":51301},[129,66771,51348],{"class":1977},[129,66773,185],{"class":139},[129,66775,51353],{"class":244},[129,66777,51308],{"class":139},[129,66779,66780,66782,66784,66786,66788,66790,66792,66794,66796],{"class":131,"line":1229},[129,66781,52145],{"class":139},[129,66783,51345],{"class":51301},[129,66785,14935],{"class":1977},[129,66787,185],{"class":139},[129,66789,51392],{"class":244},[129,66791,51372],{"class":1977},[129,66793,185],{"class":139},[129,66795,51399],{"class":244},[129,66797,51308],{"class":139},[129,66799,66800,66802,66804,66806,66808],{"class":131,"line":1235},[129,66801,52145],{"class":139},[129,66803,51408],{"class":51301},[129,66805,51411],{"class":139},[129,66807,51408],{"class":51301},[129,66809,51308],{"class":139},[129,66811,66812,66814,66816],{"class":131,"line":1326},[129,66813,51786],{"class":139},[129,66815,51335],{"class":51301},[129,66817,51308],{"class":139},[129,66819,66820],{"class":131,"line":1332},[129,66821,2414],{"emptyLinePlaceholder":56},[129,66823,66824,66826,66828],{"class":131,"line":1344},[129,66825,1049],{"class":139},[129,66827,51801],{"class":51301},[129,66829,51308],{"class":139},[129,66831,66832,66834,66836],{"class":131,"line":1626},[129,66833,52145],{"class":139},[129,66835,1146],{"class":51301},[129,66837,51308],{"class":139},[129,66839,66840,66842,66844,66846,66848],{"class":131,"line":1631},[129,66841,51342],{"class":139},[129,66843,86],{"class":51301},[129,66845,53967],{"class":139},[129,66847,86],{"class":51301},[129,66849,51308],{"class":139},[129,66851,66852,66854,66856,66858,66860],{"class":131,"line":1637},[129,66853,51342],{"class":139},[129,66855,86],{"class":51301},[129,66857,53986],{"class":139},[129,66859,86],{"class":51301},[129,66861,51308],{"class":139},[129,66863,66864,66866,66868,66870,66872],{"class":131,"line":1642},[129,66865,51342],{"class":139},[129,66867,86],{"class":51301},[129,66869,54005],{"class":139},[129,66871,86],{"class":51301},[129,66873,51308],{"class":139},[129,66875,66876,66878,66880,66882,66884],{"class":131,"line":1656},[129,66877,51342],{"class":139},[129,66879,86],{"class":51301},[129,66881,54024],{"class":139},[129,66883,86],{"class":51301},[129,66885,51308],{"class":139},[129,66887,66888,66890,66892,66894,66896],{"class":131,"line":1661},[129,66889,51342],{"class":139},[129,66891,86],{"class":51301},[129,66893,54043],{"class":139},[129,66895,86],{"class":51301},[129,66897,51308],{"class":139},[129,66899,66900,66902,66904,66907,66909],{"class":131,"line":1667},[129,66901,51342],{"class":139},[129,66903,14],{"class":51301},[129,66905,66906],{"class":139},">我不需要变色\u003C\u002F",[129,66908,14],{"class":51301},[129,66910,51308],{"class":139},[129,66912,66913,66915,66917],{"class":131,"line":1688},[129,66914,52418],{"class":139},[129,66916,1146],{"class":51301},[129,66918,51308],{"class":139},[129,66920,66921,66923,66925],{"class":131,"line":1693},[129,66922,52145],{"class":139},[129,66924,51814],{"class":51301},[129,66926,51308],{"class":139},[129,66928,66929],{"class":131,"line":1707},[129,66930,66931],{"class":198},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[129,66933,66934,66936,66938,66940,66942,66944,66946,66949],{"class":131,"line":1712},[129,66935,11236],{"class":135},[129,66937,61293],{"class":188},[129,66939,13579],{"class":135},[129,66941,54397],{"class":139},[129,66943,54400],{"class":1977},[129,66945,140],{"class":139},[129,66947,66948],{"class":244},"'ul'",[129,66950,146],{"class":139},[129,66952,66953,66956,66958,66960,66962,66964,66966,66968,66970],{"class":131,"line":1741},[129,66954,66955],{"class":139},"    ul.",[129,66957,57814],{"class":1977},[129,66959,140],{"class":139},[129,66961,57819],{"class":244},[129,66963,12450],{"class":139},[129,66965,54450],{"class":135},[129,66967,1672],{"class":139},[129,66969,214],{"class":5231},[129,66971,12457],{"class":139},[129,66973,66974],{"class":131,"line":1746},[129,66975,66976],{"class":198},"      \u002F\u002F alert(1)\n",[129,66978,66979],{"class":131,"line":1763},[129,66980,66981],{"class":198},"      \u002F\u002F e.target就是我们点击的对象\n",[129,66983,66984],{"class":131,"line":1768},[129,66985,66986],{"class":198},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[129,66988,66989],{"class":131,"line":1773},[129,66990,66991],{"class":198},"      \u002F\u002F e.target.style.color = 'red'\n",[129,66993,66994,66996,66998],{"class":131,"line":1778},[129,66995,58245],{"class":139},[129,66997,58248],{"class":1977},[129,66999,67000],{"class":139},"(e)\n",[129,67002,67003],{"class":131,"line":1792},[129,67004,2414],{"emptyLinePlaceholder":56},[129,67006,67007,67009,67012],{"class":131,"line":1797},[129,67008,58245],{"class":139},[129,67010,67011],{"class":1977},"dir",[129,67013,67014],{"class":139},"(e.target)\n",[129,67016,67017],{"class":131,"line":2591},[129,67018,2414],{"emptyLinePlaceholder":56},[129,67020,67021],{"class":131,"line":2605},[129,67022,67023],{"class":198},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[129,67025,67026],{"class":131,"line":2613},[129,67027,67028],{"class":198},"      \u002F\u002F 通过tagName来进行判断\n",[129,67030,67031,67033,67036,67038,67041],{"class":131,"line":2618},[129,67032,54481],{"class":135},[129,67034,67035],{"class":139}," (e.target.tagName ",[129,67037,54487],{"class":135},[129,67039,67040],{"class":244}," 'LI'",[129,67042,12457],{"class":139},[129,67044,67045,67048,67050],{"class":131,"line":2624},[129,67046,67047],{"class":139},"        e.target.style.color ",[129,67049,185],{"class":135},[129,67051,67052],{"class":244}," 'red'\n",[129,67054,67055],{"class":131,"line":2630},[129,67056,52399],{"class":139},[129,67058,67059],{"class":131,"line":2635},[129,67060,33462],{"class":139},[129,67062,67063,67065,67067],{"class":131,"line":7963},[129,67064,52418],{"class":139},[129,67066,51814],{"class":51301},[129,67068,51308],{"class":139},[129,67070,67071,67073,67075],{"class":131,"line":7987},[129,67072,51786],{"class":139},[129,67074,51801],{"class":51301},[129,67076,51308],{"class":139},[129,67078,67079],{"class":131,"line":7992},[129,67080,2414],{"emptyLinePlaceholder":56},[129,67082,67083,67085,67087],{"class":131,"line":7998},[129,67084,51786],{"class":139},[129,67086,50636],{"class":51301},[129,67088,51308],{"class":139},[14,67090,67091],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67093,67094],{},"if(e.target.ragName==='P') {}",[14,67096,67097],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67099,67100],{},"通过事件委托的方式实现tab栏切换改造：",[14,67102,67103],{},"一定要记住自定义属性！！！！！！",[14,67105,67106],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67108,67109],{},"id是自定义的属性名",[14,67111,67112],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[120,67114,67116],{"className":50634,"code":67115,"language":50636,"meta":42,"style":42},"\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",[126,67117,67118,67128,67142,67146,67154,67168,67188,67208,67220,67228,67234,67244,67254,67258,67262,67268,67280,67292,67304,67320,67324,67328,67334,67346,67358,67370,67380,67390,67394,67398,67406,67418,67428,67440,67444,67448,67456,67466,67476,67486,67490,67494,67504,67518,67530,67534,67538,67550,67560,67576,67586,67590,67594,67608,67618,67628,67632,67636,67642,67656,67660,67664,67672,67682,67686,67690,67699,67709,67713,67721,67729,67733,67741,67755,67769,67781,67789,67828,67860,67892,67924,67956,67964,67972,67986,68020,68054,68088,68122,68156,68164,68172,68180,68185,68190,68209,68214,68234,68242,68247,68260,68281,68294,68298,68303,68308,68321,68341,68369,68373,68377,68381,68389,68397,68401],{"__ignoreMap":42},[129,67119,67120,67122,67124,67126],{"class":131,"line":132},[129,67121,51298],{"class":139},[129,67123,51302],{"class":51301},[129,67125,51305],{"class":1977},[129,67127,51308],{"class":139},[129,67129,67130,67132,67134,67136,67138,67140],{"class":131,"line":51},[129,67131,1049],{"class":139},[129,67133,50636],{"class":51301},[129,67135,51317],{"class":1977},[129,67137,185],{"class":139},[129,67139,51322],{"class":244},[129,67141,51308],{"class":139},[129,67143,67144],{"class":131,"line":1194},[129,67145,2414],{"emptyLinePlaceholder":56},[129,67147,67148,67150,67152],{"class":131,"line":1209},[129,67149,1049],{"class":139},[129,67151,51335],{"class":51301},[129,67153,51308],{"class":139},[129,67155,67156,67158,67160,67162,67164,67166],{"class":131,"line":1215},[129,67157,52145],{"class":139},[129,67159,51345],{"class":51301},[129,67161,51348],{"class":1977},[129,67163,185],{"class":139},[129,67165,51353],{"class":244},[129,67167,59128],{"class":139},[129,67169,67170,67172,67174,67176,67178,67180,67182,67184,67186],{"class":131,"line":1229},[129,67171,52145],{"class":139},[129,67173,51345],{"class":51301},[129,67175,51364],{"class":1977},[129,67177,185],{"class":139},[129,67179,51369],{"class":244},[129,67181,51372],{"class":1977},[129,67183,185],{"class":139},[129,67185,51377],{"class":244},[129,67187,59128],{"class":139},[129,67189,67190,67192,67194,67196,67198,67200,67202,67204,67206],{"class":131,"line":1235},[129,67191,52145],{"class":139},[129,67193,51345],{"class":51301},[129,67195,14935],{"class":1977},[129,67197,185],{"class":139},[129,67199,51392],{"class":244},[129,67201,51372],{"class":1977},[129,67203,185],{"class":139},[129,67205,51399],{"class":244},[129,67207,59128],{"class":139},[129,67209,67210,67212,67214,67216,67218],{"class":131,"line":1326},[129,67211,52145],{"class":139},[129,67213,51408],{"class":51301},[129,67215,63626],{"class":139},[129,67217,51408],{"class":51301},[129,67219,51308],{"class":139},[129,67221,67222,67224,67226],{"class":131,"line":1332},[129,67223,52145],{"class":139},[129,67225,5141],{"class":51301},[129,67227,51308],{"class":139},[129,67229,67230,67232],{"class":131,"line":1344},[129,67231,6418],{"class":51301},[129,67233,15587],{"class":139},[129,67235,67236,67238,67240,67242],{"class":131,"line":1626},[129,67237,54707],{"class":188},[129,67239,51438],{"class":139},[129,67241,331],{"class":188},[129,67243,1305],{"class":139},[129,67245,67246,67248,67250,67252],{"class":131,"line":1631},[129,67247,54696],{"class":188},[129,67249,51438],{"class":139},[129,67251,331],{"class":188},[129,67253,1305],{"class":139},[129,67255,67256],{"class":131,"line":1637},[129,67257,2201],{"class":139},[129,67259,67260],{"class":131,"line":1642},[129,67261,2414],{"emptyLinePlaceholder":56},[129,67263,67264,67266],{"class":131,"line":1656},[129,67265,63677],{"class":1977},[129,67267,15587],{"class":139},[129,67269,67270,67272,67274,67276,67278],{"class":131,"line":1661},[129,67271,54772],{"class":188},[129,67273,51438],{"class":139},[129,67275,63688],{"class":188},[129,67277,51493],{"class":135},[129,67279,1305],{"class":139},[129,67281,67282,67284,67286,67288,67290],{"class":131,"line":1667},[129,67283,54786],{"class":188},[129,67285,51438],{"class":139},[129,67287,63701],{"class":188},[129,67289,51493],{"class":135},[129,67291,1305],{"class":139},[129,67293,67294,67296,67298,67300,67302],{"class":131,"line":1688},[129,67295,54707],{"class":188},[129,67297,51438],{"class":139},[129,67299,839],{"class":188},[129,67301,51493],{"class":135},[129,67303,1305],{"class":139},[129,67305,67306,67308,67310,67312,67314,67316,67318],{"class":131,"line":1693},[129,67307,61978],{"class":188},[129,67309,51438],{"class":139},[129,67311,357],{"class":188},[129,67313,51493],{"class":135},[129,67315,51522],{"class":188},[129,67317,62245],{"class":188},[129,67319,1305],{"class":139},[129,67321,67322],{"class":131,"line":1707},[129,67323,2201],{"class":139},[129,67325,67326],{"class":131,"line":1712},[129,67327,2414],{"emptyLinePlaceholder":56},[129,67329,67330,67332],{"class":131,"line":1741},[129,67331,63746],{"class":1977},[129,67333,15587],{"class":139},[129,67335,67336,67338,67340,67342,67344],{"class":131,"line":1746},[129,67337,54772],{"class":188},[129,67339,51438],{"class":139},[129,67341,450],{"class":188},[129,67343,467],{"class":135},[129,67345,1305],{"class":139},[129,67347,67348,67350,67352,67354,67356],{"class":131,"line":1763},[129,67349,54786],{"class":188},[129,67351,51438],{"class":139},[129,67353,1046],{"class":188},[129,67355,51493],{"class":135},[129,67357,1305],{"class":139},[129,67359,67360,67362,67364,67366,67368],{"class":131,"line":1768},[129,67361,57360],{"class":188},[129,67363,51438],{"class":139},[129,67365,1046],{"class":188},[129,67367,51493],{"class":135},[129,67369,1305],{"class":139},[129,67371,67372,67374,67376,67378],{"class":131,"line":1773},[129,67373,55010],{"class":188},[129,67375,51438],{"class":139},[129,67377,51478],{"class":188},[129,67379,1305],{"class":139},[129,67381,67382,67384,67386,67388],{"class":131,"line":1778},[129,67383,55021],{"class":188},[129,67385,51438],{"class":139},[129,67387,51669],{"class":188},[129,67389,1305],{"class":139},[129,67391,67392],{"class":131,"line":1792},[129,67393,2201],{"class":139},[129,67395,67396],{"class":131,"line":1797},[129,67397,2414],{"emptyLinePlaceholder":56},[129,67399,67400,67402,67404],{"class":131,"line":2591},[129,67401,63746],{"class":1977},[129,67403,63819],{"class":51301},[129,67405,15587],{"class":139},[129,67407,67408,67410,67412,67414,67416],{"class":131,"line":2605},[129,67409,54923],{"class":188},[129,67411,51438],{"class":139},[129,67413,939],{"class":188},[129,67415,51493],{"class":135},[129,67417,1305],{"class":139},[129,67419,67420,67422,67424,67426],{"class":131,"line":2613},[129,67421,62335],{"class":188},[129,67423,51438],{"class":139},[129,67425,63842],{"class":188},[129,67427,1305],{"class":139},[129,67429,67430,67432,67434,67436,67438],{"class":131,"line":2618},[129,67431,62001],{"class":188},[129,67433,51438],{"class":139},[129,67435,839],{"class":188},[129,67437,51493],{"class":135},[129,67439,1305],{"class":139},[129,67441,67442],{"class":131,"line":2624},[129,67443,2201],{"class":139},[129,67445,67446],{"class":131,"line":2630},[129,67447,2414],{"emptyLinePlaceholder":56},[129,67449,67450,67452,67454],{"class":131,"line":2635},[129,67451,63746],{"class":1977},[129,67453,61293],{"class":51301},[129,67455,15587],{"class":139},[129,67457,67458,67460,67462,67464],{"class":131,"line":7963},[129,67459,54733],{"class":188},[129,67461,51438],{"class":139},[129,67463,54738],{"class":188},[129,67465,1305],{"class":139},[129,67467,67468,67470,67472,67474],{"class":131,"line":7987},[129,67469,55010],{"class":188},[129,67471,51438],{"class":139},[129,67473,51478],{"class":188},[129,67475,1305],{"class":139},[129,67477,67478,67480,67482,67484],{"class":131,"line":7992},[129,67479,55021],{"class":188},[129,67481,51438],{"class":139},[129,67483,51581],{"class":188},[129,67485,1305],{"class":139},[129,67487,67488],{"class":131,"line":7998},[129,67489,2201],{"class":139},[129,67491,67492],{"class":131,"line":8025},[129,67493,2414],{"emptyLinePlaceholder":56},[129,67495,67496,67498,67500,67502],{"class":131,"line":8030},[129,67497,63746],{"class":1977},[129,67499,61293],{"class":51301},[129,67501,55076],{"class":51301},[129,67503,15587],{"class":139},[129,67505,67506,67508,67510,67512,67514,67516],{"class":131,"line":8036},[129,67507,54707],{"class":188},[129,67509,51438],{"class":139},[129,67511,331],{"class":188},[129,67513,8965],{"class":188},[129,67515,51493],{"class":135},[129,67517,1305],{"class":139},[129,67519,67520,67522,67524,67526,67528],{"class":131,"line":8048},[129,67521,54923],{"class":188},[129,67523,51438],{"class":139},[129,67525,688],{"class":188},[129,67527,51493],{"class":135},[129,67529,1305],{"class":139},[129,67531,67532],{"class":131,"line":8060},[129,67533,2201],{"class":139},[129,67535,67536],{"class":131,"line":8072},[129,67537,2414],{"emptyLinePlaceholder":56},[129,67539,67540,67542,67544,67546,67548],{"class":131,"line":9731},[129,67541,63746],{"class":1977},[129,67543,61293],{"class":51301},[129,67545,55076],{"class":51301},[129,67547,1413],{"class":51301},[129,67549,15587],{"class":139},[129,67551,67552,67554,67556,67558],{"class":131,"line":9756},[129,67553,63971],{"class":188},[129,67555,51438],{"class":139},[129,67557,54738],{"class":188},[129,67559,1305],{"class":139},[129,67561,67562,67564,67566,67568,67570,67572,67574],{"class":131,"line":9779},[129,67563,62233],{"class":188},[129,67565,51438],{"class":139},[129,67567,217],{"class":188},[129,67569,51493],{"class":135},[129,67571,51522],{"class":188},[129,67573,63992],{"class":188},[129,67575,1305],{"class":139},[129,67577,67578,67580,67582,67584],{"class":131,"line":9803},[129,67579,57417],{"class":188},[129,67581,51438],{"class":139},[129,67583,62370],{"class":188},[129,67585,1305],{"class":139},[129,67587,67588],{"class":131,"line":9808},[129,67589,2201],{"class":139},[129,67591,67592],{"class":131,"line":9813},[129,67593,2414],{"emptyLinePlaceholder":56},[129,67595,67596,67598,67600,67602,67604,67606],{"class":131,"line":9818},[129,67597,63746],{"class":1977},[129,67599,61293],{"class":51301},[129,67601,55076],{"class":51301},[129,67603,1413],{"class":51301},[129,67605,64025],{"class":1977},[129,67607,15587],{"class":139},[129,67609,67610,67612,67614,67616],{"class":131,"line":9827},[129,67611,61792],{"class":188},[129,67613,51438],{"class":139},[129,67615,64036],{"class":188},[129,67617,1305],{"class":139},[129,67619,67620,67622,67624,67626],{"class":131,"line":9832},[129,67621,57417],{"class":188},[129,67623,51438],{"class":139},[129,67625,64036],{"class":188},[129,67627,1305],{"class":139},[129,67629,67630],{"class":131,"line":9838},[129,67631,2201],{"class":139},[129,67633,67634],{"class":131,"line":9859},[129,67635,2414],{"emptyLinePlaceholder":56},[129,67637,67638,67640],{"class":131,"line":9865},[129,67639,64061],{"class":1977},[129,67641,15587],{"class":139},[129,67643,67644,67646,67648,67650,67652,67654],{"class":131,"line":9879},[129,67645,54696],{"class":188},[129,67647,51438],{"class":139},[129,67649,331],{"class":188},[129,67651,64074],{"class":188},[129,67653,51493],{"class":135},[129,67655,1305],{"class":139},[129,67657,67658],{"class":131,"line":9885},[129,67659,2201],{"class":139},[129,67661,67662],{"class":131,"line":9912},[129,67663,2414],{"emptyLinePlaceholder":56},[129,67665,67666,67668,67670],{"class":131,"line":9921},[129,67667,64061],{"class":1977},[129,67669,62175],{"class":1977},[129,67671,15587],{"class":139},[129,67673,67674,67676,67678,67680],{"class":131,"line":9927},[129,67675,55010],{"class":188},[129,67677,51438],{"class":139},[129,67679,54738],{"class":188},[129,67681,1305],{"class":139},[129,67683,67684],{"class":131,"line":9935},[129,67685,2201],{"class":139},[129,67687,67688],{"class":131,"line":9940},[129,67689,2414],{"emptyLinePlaceholder":56},[129,67691,67692,67694,67697],{"class":131,"line":16619},[129,67693,64061],{"class":1977},[129,67695,67696],{"class":1977}," .active",[129,67698,15587],{"class":139},[129,67700,67701,67703,67705,67707],{"class":131,"line":16625},[129,67702,55010],{"class":188},[129,67704,51438],{"class":139},[129,67706,60870],{"class":188},[129,67708,1305],{"class":139},[129,67710,67711],{"class":131,"line":16648},[129,67712,2201],{"class":139},[129,67714,67715,67717,67719],{"class":131,"line":16654},[129,67716,52418],{"class":139},[129,67718,5141],{"class":51301},[129,67720,51308],{"class":139},[129,67722,67723,67725,67727],{"class":131,"line":16677},[129,67724,51786],{"class":139},[129,67726,51335],{"class":51301},[129,67728,51308],{"class":139},[129,67730,67731],{"class":131,"line":16691},[129,67732,2414],{"emptyLinePlaceholder":56},[129,67734,67735,67737,67739],{"class":131,"line":16711},[129,67736,1049],{"class":139},[129,67738,51801],{"class":51301},[129,67740,51308],{"class":139},[129,67742,67743,67745,67747,67749,67751,67753],{"class":131,"line":16717},[129,67744,52145],{"class":139},[129,67746,51612],{"class":51301},[129,67748,53487],{"class":1977},[129,67750,185],{"class":139},[129,67752,64176],{"class":244},[129,67754,51308],{"class":139},[129,67756,67757,67759,67761,67763,67765,67767],{"class":131,"line":16728},[129,67758,51342],{"class":139},[129,67760,51612],{"class":51301},[129,67762,53487],{"class":1977},[129,67764,185],{"class":139},[129,67766,64191],{"class":244},[129,67768,51308],{"class":139},[129,67770,67771,67773,67775,67777,67779],{"class":131,"line":16751},[129,67772,55235],{"class":139},[129,67774,100],{"class":51301},[129,67776,64202],{"class":139},[129,67778,100],{"class":51301},[129,67780,51308],{"class":139},[129,67782,67783,67785,67787],{"class":131,"line":16773},[129,67784,55235],{"class":139},[129,67786,1146],{"class":51301},[129,67788,51308],{"class":139},[129,67790,67791,67793,67795,67797,67799,67801,67803,67805,67807,67809,67811,67813,67815,67818,67820,67822,67824,67826],{"class":131,"line":16778},[129,67792,55303],{"class":139},[129,67794,86],{"class":51301},[129,67796,61053],{"class":139},[129,67798,20],{"class":51301},[129,67800,53487],{"class":1977},[129,67802,185],{"class":139},[129,67804,59707],{"class":244},[129,67806,61058],{"class":1977},[129,67808,185],{"class":139},[129,67810,64237],{"class":244},[129,67812,53952],{"class":1977},[129,67814,185],{"class":139},[129,67816,67817],{"class":244},"\"0\"",[129,67819,64240],{"class":139},[129,67821,20],{"class":51301},[129,67823,55315],{"class":139},[129,67825,86],{"class":51301},[129,67827,51308],{"class":139},[129,67829,67830,67832,67834,67836,67838,67840,67842,67844,67846,67848,67850,67852,67854,67856,67858],{"class":131,"line":16784},[129,67831,55303],{"class":139},[129,67833,86],{"class":51301},[129,67835,61053],{"class":139},[129,67837,20],{"class":51301},[129,67839,61058],{"class":1977},[129,67841,185],{"class":139},[129,67843,64237],{"class":244},[129,67845,53952],{"class":1977},[129,67847,185],{"class":139},[129,67849,3692],{"class":244},[129,67851,64267],{"class":139},[129,67853,20],{"class":51301},[129,67855,55315],{"class":139},[129,67857,86],{"class":51301},[129,67859,51308],{"class":139},[129,67861,67862,67864,67866,67868,67870,67872,67874,67876,67878,67880,67882,67884,67886,67888,67890],{"class":131,"line":16798},[129,67863,55303],{"class":139},[129,67865,86],{"class":51301},[129,67867,61053],{"class":139},[129,67869,20],{"class":51301},[129,67871,61058],{"class":1977},[129,67873,185],{"class":139},[129,67875,64237],{"class":244},[129,67877,53952],{"class":1977},[129,67879,185],{"class":139},[129,67881,3715],{"class":244},[129,67883,64294],{"class":139},[129,67885,20],{"class":51301},[129,67887,55315],{"class":139},[129,67889,86],{"class":51301},[129,67891,51308],{"class":139},[129,67893,67894,67896,67898,67900,67902,67904,67906,67908,67910,67912,67914,67916,67918,67920,67922],{"class":131,"line":16811},[129,67895,55303],{"class":139},[129,67897,86],{"class":51301},[129,67899,61053],{"class":139},[129,67901,20],{"class":51301},[129,67903,61058],{"class":1977},[129,67905,185],{"class":139},[129,67907,64237],{"class":244},[129,67909,53952],{"class":1977},[129,67911,185],{"class":139},[129,67913,3728],{"class":244},[129,67915,64321],{"class":139},[129,67917,20],{"class":51301},[129,67919,55315],{"class":139},[129,67921,86],{"class":51301},[129,67923,51308],{"class":139},[129,67925,67926,67928,67930,67932,67934,67936,67938,67940,67942,67944,67946,67948,67950,67952,67954],{"class":131,"line":16816},[129,67927,55303],{"class":139},[129,67929,86],{"class":51301},[129,67931,61053],{"class":139},[129,67933,20],{"class":51301},[129,67935,61058],{"class":1977},[129,67937,185],{"class":139},[129,67939,64237],{"class":244},[129,67941,53952],{"class":1977},[129,67943,185],{"class":139},[129,67945,3741],{"class":244},[129,67947,64348],{"class":139},[129,67949,20],{"class":51301},[129,67951,55315],{"class":139},[129,67953,86],{"class":51301},[129,67955,51308],{"class":139},[129,67957,67958,67960,67962],{"class":131,"line":16830},[129,67959,55408],{"class":139},[129,67961,1146],{"class":51301},[129,67963,51308],{"class":139},[129,67965,67966,67968,67970],{"class":131,"line":16835},[129,67967,51777],{"class":139},[129,67969,51612],{"class":51301},[129,67971,51308],{"class":139},[129,67973,67974,67976,67978,67980,67982,67984],{"class":131,"line":16841},[129,67975,51342],{"class":139},[129,67977,51612],{"class":51301},[129,67979,53487],{"class":1977},[129,67981,185],{"class":139},[129,67983,64385],{"class":244},[129,67985,51308],{"class":139},[129,67987,67988,67990,67992,67994,67996,67998,68000,68002,68004,68006,68008,68010,68012,68014,68016,68018],{"class":131,"line":16846},[129,67989,55235],{"class":139},[129,67991,51612],{"class":51301},[129,67993,53487],{"class":1977},[129,67995,185],{"class":139},[129,67997,64400],{"class":244},[129,67999,61053],{"class":139},[129,68001,40],{"class":51301},[129,68003,55240],{"class":1977},[129,68005,185],{"class":139},[129,68007,64411],{"class":244},[129,68009,55248],{"class":1977},[129,68011,185],{"class":139},[129,68013,7667],{"class":244},[129,68015,64420],{"class":139},[129,68017,51612],{"class":51301},[129,68019,51308],{"class":139},[129,68021,68022,68024,68026,68028,68030,68032,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052],{"class":131,"line":16860},[129,68023,55235],{"class":139},[129,68025,51612],{"class":51301},[129,68027,53487],{"class":1977},[129,68029,185],{"class":139},[129,68031,62624],{"class":244},[129,68033,61053],{"class":139},[129,68035,40],{"class":51301},[129,68037,55240],{"class":1977},[129,68039,185],{"class":139},[129,68041,64447],{"class":244},[129,68043,55248],{"class":1977},[129,68045,185],{"class":139},[129,68047,7667],{"class":244},[129,68049,64420],{"class":139},[129,68051,51612],{"class":51301},[129,68053,51308],{"class":139},[129,68055,68056,68058,68060,68062,68064,68066,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086],{"class":131,"line":16865},[129,68057,55235],{"class":139},[129,68059,51612],{"class":51301},[129,68061,53487],{"class":1977},[129,68063,185],{"class":139},[129,68065,62624],{"class":244},[129,68067,61053],{"class":139},[129,68069,40],{"class":51301},[129,68071,55240],{"class":1977},[129,68073,185],{"class":139},[129,68075,64482],{"class":244},[129,68077,55248],{"class":1977},[129,68079,185],{"class":139},[129,68081,7667],{"class":244},[129,68083,64420],{"class":139},[129,68085,51612],{"class":51301},[129,68087,51308],{"class":139},[129,68089,68090,68092,68094,68096,68098,68100,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120],{"class":131,"line":16870},[129,68091,55235],{"class":139},[129,68093,51612],{"class":51301},[129,68095,53487],{"class":1977},[129,68097,185],{"class":139},[129,68099,62624],{"class":244},[129,68101,61053],{"class":139},[129,68103,40],{"class":51301},[129,68105,55240],{"class":1977},[129,68107,185],{"class":139},[129,68109,64517],{"class":244},[129,68111,55248],{"class":1977},[129,68113,185],{"class":139},[129,68115,7667],{"class":244},[129,68117,64420],{"class":139},[129,68119,51612],{"class":51301},[129,68121,51308],{"class":139},[129,68123,68124,68126,68128,68130,68132,68134,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154],{"class":131,"line":16884},[129,68125,55235],{"class":139},[129,68127,51612],{"class":51301},[129,68129,53487],{"class":1977},[129,68131,185],{"class":139},[129,68133,62624],{"class":244},[129,68135,61053],{"class":139},[129,68137,40],{"class":51301},[129,68139,55240],{"class":1977},[129,68141,185],{"class":139},[129,68143,64552],{"class":244},[129,68145,55248],{"class":1977},[129,68147,185],{"class":139},[129,68149,7667],{"class":244},[129,68151,64420],{"class":139},[129,68153,51612],{"class":51301},[129,68155,51308],{"class":139},[129,68157,68158,68160,68162],{"class":131,"line":16896},[129,68159,51777],{"class":139},[129,68161,51612],{"class":51301},[129,68163,51308],{"class":139},[129,68165,68166,68168,68170],{"class":131,"line":16901},[129,68167,52418],{"class":139},[129,68169,51612],{"class":51301},[129,68171,51308],{"class":139},[129,68173,68174,68176,68178],{"class":131,"line":16914},[129,68175,52145],{"class":139},[129,68177,51814],{"class":51301},[129,68179,51308],{"class":139},[129,68181,68182],{"class":131,"line":16919},[129,68183,68184],{"class":198},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[129,68186,68187],{"class":131,"line":16924},[129,68188,68189],{"class":198},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[129,68191,68192,68194,68196,68198,68200,68202,68204,68207],{"class":131,"line":16929},[129,68193,11236],{"class":135},[129,68195,61293],{"class":188},[129,68197,13579],{"class":135},[129,68199,54397],{"class":139},[129,68201,54400],{"class":1977},[129,68203,140],{"class":139},[129,68205,68206],{"class":244},"'.tab-nav ul'",[129,68208,146],{"class":139},[129,68210,68211],{"class":131,"line":16942},[129,68212,68213],{"class":198},"    \u002F\u002F 2.添加事件\n",[129,68215,68216,68218,68220,68222,68224,68226,68228,68230,68232],{"class":131,"line":16947},[129,68217,66955],{"class":139},[129,68219,57814],{"class":1977},[129,68221,140],{"class":139},[129,68223,57819],{"class":244},[129,68225,12450],{"class":139},[129,68227,54450],{"class":135},[129,68229,1672],{"class":139},[129,68231,214],{"class":5231},[129,68233,12457],{"class":139},[129,68235,68236,68238,68240],{"class":131,"line":32634},[129,68237,58245],{"class":139},[129,68239,67011],{"class":1977},[129,68241,67014],{"class":139},[129,68243,68244],{"class":131,"line":32640},[129,68245,68246],{"class":198},"      \u002F\u002Fe.targer是我们点击的对象\n",[129,68248,68249,68251,68253,68255,68258],{"class":131,"line":32646},[129,68250,54481],{"class":135},[129,68252,67035],{"class":139},[129,68254,54487],{"class":135},[129,68256,68257],{"class":244}," 'A'",[129,68259,12457],{"class":139},[129,68261,68262,68264,68266,68268,68271,68273,68275,68277,68279],{"class":131,"line":32652},[129,68263,51926],{"class":139},[129,68265,54400],{"class":1977},[129,68267,140],{"class":139},[129,68269,68270],{"class":244},"'.active'",[129,68272,57004],{"class":139},[129,68274,57007],{"class":1977},[129,68276,140],{"class":139},[129,68278,64715],{"class":244},[129,68280,146],{"class":139},[129,68282,68283,68286,68288,68290,68292],{"class":131,"line":32658},[129,68284,68285],{"class":139},"        e.target.classList.",[129,68287,5349],{"class":1977},[129,68289,140],{"class":139},[129,68291,64715],{"class":244},[129,68293,146],{"class":139},[129,68295,68296],{"class":131,"line":32669},[129,68297,2414],{"emptyLinePlaceholder":56},[129,68299,68300],{"class":131,"line":32675},[129,68301,68302],{"class":198},"        \u002F\u002F 下面大盒子模块\n",[129,68304,68305],{"class":131,"line":32695},[129,68306,68307],{"class":198},"        \u002F\u002F console.log(e.target.dataset.id)\n",[129,68309,68310,68312,68314,68316,68318],{"class":131,"line":32701},[129,68311,61271],{"class":135},[129,68313,3046],{"class":188},[129,68315,13579],{"class":135},[129,68317,45567],{"class":135},[129,68319,68320],{"class":139},"e.target.dataset.id\n",[129,68322,68323,68325,68327,68329,68331,68333,68335,68337,68339],{"class":131,"line":32712},[129,68324,51926],{"class":139},[129,68326,54400],{"class":1977},[129,68328,140],{"class":139},[129,68330,64763],{"class":244},[129,68332,57004],{"class":139},[129,68334,57007],{"class":1977},[129,68336,140],{"class":139},[129,68338,64715],{"class":244},[129,68340,146],{"class":139},[129,68342,68343,68345,68347,68349,68351,68353,68355,68357,68359,68361,68363,68365,68367],{"class":131,"line":32718},[129,68344,51926],{"class":139},[129,68346,54400],{"class":1977},[129,68348,140],{"class":139},[129,68350,64789],{"class":244},[129,68352,580],{"class":139},[129,68354,45567],{"class":135},[129,68356,25119],{"class":188},[129,68358,57033],{"class":244},[129,68360,57004],{"class":139},[129,68362,5349],{"class":1977},[129,68364,140],{"class":139},[129,68366,64715],{"class":244},[129,68368,146],{"class":139},[129,68370,68371],{"class":131,"line":32724},[129,68372,2414],{"emptyLinePlaceholder":56},[129,68374,68375],{"class":131,"line":32730},[129,68376,52399],{"class":139},[129,68378,68379],{"class":131,"line":32736},[129,68380,33462],{"class":139},[129,68382,68383,68385,68387],{"class":131,"line":32742},[129,68384,52418],{"class":139},[129,68386,51814],{"class":51301},[129,68388,51308],{"class":139},[129,68390,68391,68393,68395],{"class":131,"line":32748},[129,68392,51786],{"class":139},[129,68394,51801],{"class":51301},[129,68396,51308],{"class":139},[129,68398,68399],{"class":131,"line":32754},[129,68400,2414],{"emptyLinePlaceholder":56},[129,68402,68403,68405,68407],{"class":131,"line":32774},[129,68404,51786],{"class":139},[129,68406,50636],{"class":51301},[129,68408,51308],{"class":139},[100,68410,68412],{"id":68411},"_333-页面加载事件","3.3.3 页面加载事件",[83,68414,68415],{},[86,68416,68417],{},"load",[14,68419,68420],{},[40,68421],{"alt":42,"src":68422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68424,68425],{},"window代表整个窗口，比document还要大",[14,68427,68428],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68430,68431],{},"img.addEventListener('load', function () {",[14,68433,68434],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68436,52465],{},[83,68438,68439],{"start":51},[86,68440,68441],{},"DOMContentLoaded",[14,68443,68444],{},[40,68445],{"alt":42,"src":68446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68448,68449],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[100,68451,68453],{"id":68452},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68455,68456],{},[40,68457],{"alt":42,"src":68458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68460,68461],{},[40,68462],{"alt":42,"src":68463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68465,68466],{},[40,68467],{"alt":42,"src":68468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68470,68471],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68473,68474],{},"获得的是数字型数据，不带单位",[14,68476,68477],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68479,68480],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68482,68483],{},"它是通过document.documentElement来获取",[14,68485,68486],{},[40,68487],{"alt":42,"src":68488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68490,68491],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[100,68493,68495],{"id":68494},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68497,68498],{},[40,68499],{"alt":42,"src":68500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68502,68503],{},[40,68504],{"alt":42,"src":68505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[100,68507,68509],{"id":68508},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68511,68512],{},[40,68513],{"alt":42,"src":68514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68516,68517],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68519,68520],{},[40,68521],{"alt":42,"src":68522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68524,68525],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68527,68528],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68530,68531],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68533,68534],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68536,68537],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68539,68540],{},[40,68541],{"alt":42,"src":68542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68544,68545],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68547,68548],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68550,68551],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68553,68554],{},"e.pageX-box.getBoundingClientRect()",[100,68556,68558],{"id":68557},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68560,68561],{},[40,68562],{"alt":42,"src":68563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68565,68566],{},"这个是相对于视口来说的，它是个方法，不是属性值",[100,68568,68570],{"id":68569},"_338-总结","3.3.8 总结",[14,68572,68573],{},[40,68574],{"alt":42,"src":68575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68577,68578],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68580,68581],{},"修改盒子的宽高只能通过width和height来实现",[100,68583,68585],{"id":68584},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[120,68587,68589],{"className":50634,"code":68588,"language":50636,"meta":42,"style":42},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[126,68590,68591,68596,68601,68606,68611],{"__ignoreMap":42},[129,68592,68593],{"class":131,"line":132},[129,68594,68595],{"class":139},"\u002F* 页面滑动 *\u002F\n",[129,68597,68598],{"class":131,"line":51},[129,68599,68600],{"class":139},"html {\n",[129,68602,68603],{"class":131,"line":1194},[129,68604,68605],{"class":139},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[129,68607,68608],{"class":131,"line":1209},[129,68609,68610],{"class":139},"  scroll-behavior: smooth;\n",[129,68612,68613],{"class":131,"line":1215},[129,68614,1579],{"class":139},[14,68616,68617],{},"默认是auto",[100,68619,68621],{"id":68620},"_3310-日期对象","3.3.10 日期对象",[22013,68623,68625],{"id":68624},"_33101-实例化","3.3.10.1 实例化",[14,68627,68628],{},[40,68629],{"alt":42,"src":68630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22013,68632,68634],{"id":68633},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68636,68637],{},[40,68638],{"alt":42,"src":68639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68641,68642],{},"月份+1",[14,68644,68645],{},"老外认为第一天为0，星期天",[14,68647,68648],{},"方法使用的时候必须要跟括号",[14,68650,68651],{},"快速获得日期",[14,68653,68654],{},"\u002F\u002F 得到年月日",[14,68656,68657],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68659,68660],{},"\u002F\u002F 得到当地日期",[14,68662,68663],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68665,68666],{},"\u002F\u002F 得到当地时间",[14,68668,68669],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68671,68672],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68674,68675],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51814,68677,68678],{},"\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,68680,68681],{},"学会去封装函数！",[22013,68683,68685],{"id":68684},"_33103-时间戳","3.3.10.3 时间戳",[14,68687,68688],{},[40,68689],{"alt":42,"src":68690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68692,68693],{},[40,68694],{"alt":42,"src":68695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68697,68698],{},"三种方法记住一个就可以",[100,68700,68702],{"id":68701},"_3311-节点操作","3.3.11 节点操作",[22013,68704,68706],{"id":68705},"_33111-dom节点","3.3.11.1 DOM节点",[14,68708,68709],{},[40,68710],{"alt":42,"src":68711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68713,68714],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22013,68716,68718],{"id":68717},"_33112-查找节点","3.3.11.2 查找节点",[14,68720,68721],{},"前边的document.querySelector()是获取的元素",[14,68723,68724],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68726,68727],{},[40,68728],{"alt":42,"src":68729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[83,68731,68732],{},[86,68733,68734],{},"父节点",[14,68736,68737],{},[40,68738],{"alt":42,"src":68739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[83,68741,68742],{"start":51},[86,68743,68744],{},"子节点",[14,68746,68747],{},[40,68748],{"alt":42,"src":68749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68751,68752],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68754,68755],{},"children获得的是伪数组，是亲儿子",[83,68757,68758],{"start":1194},[86,68759,68760],{},"兄弟节点",[14,68762,68763],{},[40,68764],{"alt":42,"src":68765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22013,68767,68769],{"id":68768},"_33113-增加节点","3.3.11.3 增加节点",[14,68771,68772],{},[40,68773],{"alt":42,"src":68774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68776,68777],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68779,68780],{},[40,68781],{"alt":42,"src":68782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68784,68785],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68787,68788],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68790,68791],{},"例：",[51814,68793,68794],{},"\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,68796,68797],{},[40,68798],{"alt":42,"src":68799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68801,68802],{},"false只克隆标签，里边的内容不会克隆过来",[120,68804,68806],{"className":50634,"code":68805,"language":50636,"meta":42,"style":42},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[126,68807,68808],{"__ignoreMap":42},[129,68809,68810],{"class":131,"line":132},[129,68811,68805],{"class":139},[22013,68813,68815],{"id":68814},"_33114-删除节点","3.3.11.4 删除节点",[14,68817,68818],{},[40,68819],{"alt":42,"src":68820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68822,68823],{},"父亲删儿子",[14,68825,68826],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[100,68828,68830],{"id":68829},"_3312-m端事件","3.3.12 M端事件",[14,68832,68833],{},"M端就是移动端",[14,68835,68836],{},[40,68837],{"alt":42,"src":68838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[100,68840,68842],{"id":68841},"_3313-插件","3.3.13 插件",[14,68844,68845],{},"要熟悉官网！！！",[14,68847,68848],{},[20,68849,68850],{"href":68850,"rel":68851},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24],[14,68853,68854],{},[20,68855,68856],{"href":68856,"rel":68857},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24],[100,68859,68861],{"id":68860},"_3314-学生信息表","3.3.14 学生信息表",[83,68863,68864,68867,68870,68873,68876,68879,68882,68885],{},[86,68865,68866],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[86,68868,68869],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[86,68871,68872],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[86,68874,68875],{},"用好表单元素自带的属性，value,name等",[86,68877,68878],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[86,68880,68881],{},"不要忘记事件对象",[86,68883,68884],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[86,68886,68887],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68889,68890],{},"结构：",[120,68892,68894],{"className":50634,"code":68893,"language":50636,"meta":42,"style":42},"\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",[126,68895,68896,68906,68920,68924,68932,68946,68966,68987,69000,69024,69032,69036,69044,69057,69078,69106,69134,69139,69161,69181,69200,69208,69236,69258,69278,69298,69318,69338,69358,69366,69386,69394,69398,69411,69419,69427,69435,69448,69461,69474,69487,69500,69513,69526,69534,69542,69550,69555,69560,69565,69570,69575,69580,69585,69590,69595,69600,69605,69610,69615,69623,69631,69639,69643,69663,69682,69702,69722,69742,69762,69766,69771,69791,69796,69806,69811,69816,69836,69858,69863,69873,69877,69881,69886,69891,69920,69934,69949,69953,69957,69961,69966,69977,69990,69995,70000,70005,70010,70015,70019,70024,70029,70038,70043,70048,70060,70065,70072,70076,70081,70091,70096,70106,70111,70139,70160,70170,70190,70208,70225,70242,70259,70276,70280,70290,70295,70300,70305,70316,70320,70324,70328,70333,70338,70359,70371,70376,70381,70386,70400,70405,70412,70416,70420,70428,70432,70440,70444],{"__ignoreMap":42},[129,68897,68898,68900,68902,68904],{"class":131,"line":132},[129,68899,51298],{"class":139},[129,68901,51302],{"class":51301},[129,68903,51305],{"class":1977},[129,68905,51308],{"class":139},[129,68907,68908,68910,68912,68914,68916,68918],{"class":131,"line":51},[129,68909,1049],{"class":139},[129,68911,50636],{"class":51301},[129,68913,51317],{"class":1977},[129,68915,185],{"class":139},[129,68917,51322],{"class":244},[129,68919,51308],{"class":139},[129,68921,68922],{"class":131,"line":1194},[129,68923,2414],{"emptyLinePlaceholder":56},[129,68925,68926,68928,68930],{"class":131,"line":1209},[129,68927,1049],{"class":139},[129,68929,51335],{"class":51301},[129,68931,51308],{"class":139},[129,68933,68934,68936,68938,68940,68942,68944],{"class":131,"line":1215},[129,68935,52145],{"class":139},[129,68937,51345],{"class":51301},[129,68939,51348],{"class":1977},[129,68941,185],{"class":139},[129,68943,51353],{"class":244},[129,68945,59128],{"class":139},[129,68947,68948,68950,68952,68954,68956,68958,68960,68962,68964],{"class":131,"line":1229},[129,68949,52145],{"class":139},[129,68951,51345],{"class":51301},[129,68953,14935],{"class":1977},[129,68955,185],{"class":139},[129,68957,51392],{"class":244},[129,68959,51372],{"class":1977},[129,68961,185],{"class":139},[129,68963,51399],{"class":244},[129,68965,59128],{"class":139},[129,68967,68968,68970,68972,68974,68976,68978,68980,68982,68985],{"class":131,"line":1235},[129,68969,52145],{"class":139},[129,68971,51345],{"class":51301},[129,68973,51364],{"class":1977},[129,68975,185],{"class":139},[129,68977,51369],{"class":244},[129,68979,51372],{"class":1977},[129,68981,185],{"class":139},[129,68983,68984],{"class":244},"\"ie=edge\"",[129,68986,59128],{"class":139},[129,68988,68989,68991,68993,68996,68998],{"class":131,"line":1326},[129,68990,52145],{"class":139},[129,68992,51408],{"class":51301},[129,68994,68995],{"class":139},">学生信息管理\u003C\u002F",[129,68997,51408],{"class":51301},[129,68999,51308],{"class":139},[129,69001,69002,69004,69007,69010,69012,69015,69017,69019,69022],{"class":131,"line":1332},[129,69003,52145],{"class":139},[129,69005,69006],{"class":51301},"link",[129,69008,69009],{"class":1977}," rel",[129,69011,185],{"class":139},[129,69013,69014],{"class":244},"\"stylesheet\"",[129,69016,61058],{"class":1977},[129,69018,185],{"class":139},[129,69020,69021],{"class":244},"\"css\u002Findex.css\"",[129,69023,59128],{"class":139},[129,69025,69026,69028,69030],{"class":131,"line":1344},[129,69027,51786],{"class":139},[129,69029,51335],{"class":51301},[129,69031,51308],{"class":139},[129,69033,69034],{"class":131,"line":1626},[129,69035,2414],{"emptyLinePlaceholder":56},[129,69037,69038,69040,69042],{"class":131,"line":1631},[129,69039,1049],{"class":139},[129,69041,51801],{"class":51301},[129,69043,51308],{"class":139},[129,69045,69046,69048,69050,69053,69055],{"class":131,"line":1637},[129,69047,52145],{"class":139},[129,69049,10],{"class":51301},[129,69051,69052],{"class":139},">新增学员\u003C\u002F",[129,69054,10],{"class":51301},[129,69056,51308],{"class":139},[129,69058,69059,69061,69063,69065,69067,69069,69072,69074,69076],{"class":131,"line":1642},[129,69060,52145],{"class":139},[129,69062,66626],{"class":51301},[129,69064,53487],{"class":1977},[129,69066,185],{"class":139},[129,69068,62665],{"class":244},[129,69070,69071],{"class":1977}," autocomplete",[129,69073,185],{"class":139},[129,69075,31777],{"class":244},[129,69077,51308],{"class":139},[129,69079,69080,69083,69085,69087,69089,69091,69093,69095,69098,69100,69102,69104],{"class":131,"line":1656},[129,69081,69082],{"class":139},"    姓名：\u003C",[129,69084,53822],{"class":51301},[129,69086,53825],{"class":1977},[129,69088,185],{"class":139},[129,69090,62700],{"class":244},[129,69092,53487],{"class":1977},[129,69094,185],{"class":139},[129,69096,69097],{"class":244},"\"uname\"",[129,69099,14935],{"class":1977},[129,69101,185],{"class":139},[129,69103,69097],{"class":244},[129,69105,59128],{"class":139},[129,69107,69108,69111,69113,69115,69117,69119,69121,69123,69126,69128,69130,69132],{"class":131,"line":1661},[129,69109,69110],{"class":139},"    年龄：\u003C",[129,69112,53822],{"class":51301},[129,69114,53825],{"class":1977},[129,69116,185],{"class":139},[129,69118,62700],{"class":244},[129,69120,53487],{"class":1977},[129,69122,185],{"class":139},[129,69124,69125],{"class":244},"\"age\"",[129,69127,14935],{"class":1977},[129,69129,185],{"class":139},[129,69131,69125],{"class":244},[129,69133,59128],{"class":139},[129,69135,69136],{"class":131,"line":1667},[129,69137,69138],{"class":139},"    性别:\n",[129,69140,69141,69143,69146,69148,69150,69153,69155,69157,69159],{"class":131,"line":1688},[129,69142,51342],{"class":139},[129,69144,69145],{"class":51301},"select",[129,69147,14935],{"class":1977},[129,69149,185],{"class":139},[129,69151,69152],{"class":244},"\"gender\"",[129,69154,53487],{"class":1977},[129,69156,185],{"class":139},[129,69158,69152],{"class":244},[129,69160,51308],{"class":139},[129,69162,69163,69165,69168,69170,69172,69174,69177,69179],{"class":131,"line":1693},[129,69164,55235],{"class":139},[129,69166,69167],{"class":51301},"option",[129,69169,66652],{"class":1977},[129,69171,185],{"class":139},[129,69173,9976],{"class":244},[129,69175,69176],{"class":139},">男\u003C\u002F",[129,69178,69167],{"class":51301},[129,69180,51308],{"class":139},[129,69182,69183,69185,69187,69189,69191,69193,69196,69198],{"class":131,"line":1707},[129,69184,55235],{"class":139},[129,69186,69167],{"class":51301},[129,69188,66652],{"class":1977},[129,69190,185],{"class":139},[129,69192,10045],{"class":244},[129,69194,69195],{"class":139},">女\u003C\u002F",[129,69197,69167],{"class":51301},[129,69199,51308],{"class":139},[129,69201,69202,69204,69206],{"class":131,"line":1712},[129,69203,51777],{"class":139},[129,69205,69145],{"class":51301},[129,69207,51308],{"class":139},[129,69209,69210,69213,69215,69217,69219,69221,69223,69225,69228,69230,69232,69234],{"class":131,"line":1741},[129,69211,69212],{"class":139},"    薪资：\u003C",[129,69214,53822],{"class":51301},[129,69216,53825],{"class":1977},[129,69218,185],{"class":139},[129,69220,62700],{"class":244},[129,69222,53487],{"class":1977},[129,69224,185],{"class":139},[129,69226,69227],{"class":244},"\"salary\"",[129,69229,14935],{"class":1977},[129,69231,185],{"class":139},[129,69233,69227],{"class":244},[129,69235,59128],{"class":139},[129,69237,69238,69241,69243,69245,69247,69250,69252,69254,69256],{"class":131,"line":1746},[129,69239,69240],{"class":139},"    就业城市：\u003C",[129,69242,69145],{"class":51301},[129,69244,14935],{"class":1977},[129,69246,185],{"class":139},[129,69248,69249],{"class":244},"\"city\"",[129,69251,53487],{"class":1977},[129,69253,185],{"class":139},[129,69255,69249],{"class":244},[129,69257,51308],{"class":139},[129,69259,69260,69262,69264,69266,69268,69271,69274,69276],{"class":131,"line":1763},[129,69261,55235],{"class":139},[129,69263,69167],{"class":51301},[129,69265,66652],{"class":1977},[129,69267,185],{"class":139},[129,69269,69270],{"class":244},"\"北京\"",[129,69272,69273],{"class":139},">北京\u003C\u002F",[129,69275,69167],{"class":51301},[129,69277,51308],{"class":139},[129,69279,69280,69282,69284,69286,69288,69291,69294,69296],{"class":131,"line":1768},[129,69281,55235],{"class":139},[129,69283,69167],{"class":51301},[129,69285,66652],{"class":1977},[129,69287,185],{"class":139},[129,69289,69290],{"class":244},"\"上海\"",[129,69292,69293],{"class":139},">上海\u003C\u002F",[129,69295,69167],{"class":51301},[129,69297,51308],{"class":139},[129,69299,69300,69302,69304,69306,69308,69311,69314,69316],{"class":131,"line":1773},[129,69301,55235],{"class":139},[129,69303,69167],{"class":51301},[129,69305,66652],{"class":1977},[129,69307,185],{"class":139},[129,69309,69310],{"class":244},"\"广州\"",[129,69312,69313],{"class":139},">广州\u003C\u002F",[129,69315,69167],{"class":51301},[129,69317,51308],{"class":139},[129,69319,69320,69322,69324,69326,69328,69331,69334,69336],{"class":131,"line":1778},[129,69321,55235],{"class":139},[129,69323,69167],{"class":51301},[129,69325,66652],{"class":1977},[129,69327,185],{"class":139},[129,69329,69330],{"class":244},"\"深圳\"",[129,69332,69333],{"class":139},">深圳\u003C\u002F",[129,69335,69167],{"class":51301},[129,69337,51308],{"class":139},[129,69339,69340,69342,69344,69346,69348,69351,69354,69356],{"class":131,"line":1792},[129,69341,55235],{"class":139},[129,69343,69167],{"class":51301},[129,69345,66652],{"class":1977},[129,69347,185],{"class":139},[129,69349,69350],{"class":244},"\"曹县\"",[129,69352,69353],{"class":139},">曹县\u003C\u002F",[129,69355,69167],{"class":51301},[129,69357,51308],{"class":139},[129,69359,69360,69362,69364],{"class":131,"line":1797},[129,69361,51777],{"class":139},[129,69363,69145],{"class":51301},[129,69365,51308],{"class":139},[129,69367,69368,69370,69372,69374,69376,69379,69382,69384],{"class":131,"line":2591},[129,69369,51342],{"class":139},[129,69371,53888],{"class":51301},[129,69373,53487],{"class":1977},[129,69375,185],{"class":139},[129,69377,69378],{"class":244},"\"add\"",[129,69380,69381],{"class":139},">录入\u003C\u002F",[129,69383,53888],{"class":51301},[129,69385,51308],{"class":139},[129,69387,69388,69390,69392],{"class":131,"line":2605},[129,69389,52418],{"class":139},[129,69391,66626],{"class":51301},[129,69393,51308],{"class":139},[129,69395,69396],{"class":131,"line":2613},[129,69397,2414],{"emptyLinePlaceholder":56},[129,69399,69400,69402,69404,69407,69409],{"class":131,"line":2618},[129,69401,52145],{"class":139},[129,69403,10],{"class":51301},[129,69405,69406],{"class":139},">就业榜\u003C\u002F",[129,69408,10],{"class":51301},[129,69410,51308],{"class":139},[129,69412,69413,69415,69417],{"class":131,"line":2624},[129,69414,52145],{"class":139},[129,69416,277],{"class":51301},[129,69418,51308],{"class":139},[129,69420,69421,69423,69425],{"class":131,"line":2630},[129,69422,51342],{"class":139},[129,69424,280],{"class":51301},[129,69426,51308],{"class":139},[129,69428,69429,69431,69433],{"class":131,"line":2635},[129,69430,55235],{"class":139},[129,69432,283],{"class":51301},[129,69434,51308],{"class":139},[129,69436,69437,69439,69441,69444,69446],{"class":131,"line":7963},[129,69438,55303],{"class":139},[129,69440,286],{"class":51301},[129,69442,69443],{"class":139},">序号\u003C\u002F",[129,69445,286],{"class":51301},[129,69447,51308],{"class":139},[129,69449,69450,69452,69454,69457,69459],{"class":131,"line":7987},[129,69451,55303],{"class":139},[129,69453,286],{"class":51301},[129,69455,69456],{"class":139},">姓名\u003C\u002F",[129,69458,286],{"class":51301},[129,69460,51308],{"class":139},[129,69462,69463,69465,69467,69470,69472],{"class":131,"line":7992},[129,69464,55303],{"class":139},[129,69466,286],{"class":51301},[129,69468,69469],{"class":139},">年龄\u003C\u002F",[129,69471,286],{"class":51301},[129,69473,51308],{"class":139},[129,69475,69476,69478,69480,69483,69485],{"class":131,"line":7998},[129,69477,55303],{"class":139},[129,69479,286],{"class":51301},[129,69481,69482],{"class":139},">性别\u003C\u002F",[129,69484,286],{"class":51301},[129,69486,51308],{"class":139},[129,69488,69489,69491,69493,69496,69498],{"class":131,"line":8025},[129,69490,55303],{"class":139},[129,69492,286],{"class":51301},[129,69494,69495],{"class":139},">薪资\u003C\u002F",[129,69497,286],{"class":51301},[129,69499,51308],{"class":139},[129,69501,69502,69504,69506,69509,69511],{"class":131,"line":8030},[129,69503,55303],{"class":139},[129,69505,286],{"class":51301},[129,69507,69508],{"class":139},">就业城市\u003C\u002F",[129,69510,286],{"class":51301},[129,69512,51308],{"class":139},[129,69514,69515,69517,69519,69522,69524],{"class":131,"line":8036},[129,69516,55303],{"class":139},[129,69518,286],{"class":51301},[129,69520,69521],{"class":139},">操作\u003C\u002F",[129,69523,286],{"class":51301},[129,69525,51308],{"class":139},[129,69527,69528,69530,69532],{"class":131,"line":8048},[129,69529,55408],{"class":139},[129,69531,283],{"class":51301},[129,69533,51308],{"class":139},[129,69535,69536,69538,69540],{"class":131,"line":8060},[129,69537,51777],{"class":139},[129,69539,280],{"class":51301},[129,69541,51308],{"class":139},[129,69543,69544,69546,69548],{"class":131,"line":8072},[129,69545,51342],{"class":139},[129,69547,324],{"class":51301},[129,69549,51308],{"class":139},[129,69551,69552],{"class":131,"line":9731},[129,69553,69554],{"class":198},"      \u003C!-- \n",[129,69556,69557],{"class":131,"line":9756},[129,69558,69559],{"class":198},"        \u003Ctr>\n",[129,69561,69562],{"class":131,"line":9779},[129,69563,69564],{"class":198},"          \u003Ctd>1001\u003C\u002Ftd>\n",[129,69566,69567],{"class":131,"line":9803},[129,69568,69569],{"class":198},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[129,69571,69572],{"class":131,"line":9808},[129,69573,69574],{"class":198},"          \u003Ctd>19\u003C\u002Ftd>\n",[129,69576,69577],{"class":131,"line":9813},[129,69578,69579],{"class":198},"          \u003Ctd>男\u003C\u002Ftd>\n",[129,69581,69582],{"class":131,"line":9818},[129,69583,69584],{"class":198},"          \u003Ctd>15000\u003C\u002Ftd>\n",[129,69586,69587],{"class":131,"line":9827},[129,69588,69589],{"class":198},"          \u003Ctd>上海\u003C\u002Ftd>\n",[129,69591,69592],{"class":131,"line":9832},[129,69593,69594],{"class":198},"          \u003Ctd>\n",[129,69596,69597],{"class":131,"line":9838},[129,69598,69599],{"class":198},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[129,69601,69602],{"class":131,"line":9859},[129,69603,69604],{"class":198},"          \u003C\u002Ftd>\n",[129,69606,69607],{"class":131,"line":9865},[129,69608,69609],{"class":198},"        \u003C\u002Ftr> \n",[129,69611,69612],{"class":131,"line":9879},[129,69613,69614],{"class":198},"        -->\n",[129,69616,69617,69619,69621],{"class":131,"line":9885},[129,69618,51777],{"class":139},[129,69620,324],{"class":51301},[129,69622,51308],{"class":139},[129,69624,69625,69627,69629],{"class":131,"line":9912},[129,69626,52418],{"class":139},[129,69628,277],{"class":51301},[129,69630,51308],{"class":139},[129,69632,69633,69635,69637],{"class":131,"line":9921},[129,69634,52145],{"class":139},[129,69636,51814],{"class":51301},[129,69638,51308],{"class":139},[129,69640,69641],{"class":131,"line":9927},[129,69642,59959],{"class":198},[129,69644,69645,69647,69650,69652,69654,69656,69658,69661],{"class":131,"line":9935},[129,69646,11236],{"class":135},[129,69648,69649],{"class":188}," uname",[129,69651,13579],{"class":135},[129,69653,54397],{"class":139},[129,69655,54400],{"class":1977},[129,69657,140],{"class":139},[129,69659,69660],{"class":244},"'.uname'",[129,69662,146],{"class":139},[129,69664,69665,69667,69669,69671,69673,69675,69677,69680],{"class":131,"line":9940},[129,69666,11236],{"class":135},[129,69668,15704],{"class":188},[129,69670,13579],{"class":135},[129,69672,54397],{"class":139},[129,69674,54400],{"class":1977},[129,69676,140],{"class":139},[129,69678,69679],{"class":244},"'.age'",[129,69681,146],{"class":139},[129,69683,69684,69686,69689,69691,69693,69695,69697,69700],{"class":131,"line":16619},[129,69685,11236],{"class":135},[129,69687,69688],{"class":188}," gender",[129,69690,13579],{"class":135},[129,69692,54397],{"class":139},[129,69694,54400],{"class":1977},[129,69696,140],{"class":139},[129,69698,69699],{"class":244},"'.gender'",[129,69701,146],{"class":139},[129,69703,69704,69706,69709,69711,69713,69715,69717,69720],{"class":131,"line":16625},[129,69705,11236],{"class":135},[129,69707,69708],{"class":188}," salary",[129,69710,13579],{"class":135},[129,69712,54397],{"class":139},[129,69714,54400],{"class":1977},[129,69716,140],{"class":139},[129,69718,69719],{"class":244},"'.salary'",[129,69721,146],{"class":139},[129,69723,69724,69726,69729,69731,69733,69735,69737,69740],{"class":131,"line":16648},[129,69725,11236],{"class":135},[129,69727,69728],{"class":188}," city",[129,69730,13579],{"class":135},[129,69732,54397],{"class":139},[129,69734,54400],{"class":1977},[129,69736,140],{"class":139},[129,69738,69739],{"class":244},"'.city'",[129,69741,146],{"class":139},[129,69743,69744,69746,69749,69751,69753,69755,69757,69760],{"class":131,"line":16654},[129,69745,11236],{"class":135},[129,69747,69748],{"class":188}," tbody",[129,69750,13579],{"class":135},[129,69752,54397],{"class":139},[129,69754,54400],{"class":1977},[129,69756,140],{"class":139},[129,69758,69759],{"class":244},"'tbody'",[129,69761,146],{"class":139},[129,69763,69764],{"class":131,"line":16677},[129,69765,2414],{"emptyLinePlaceholder":56},[129,69767,69768],{"class":131,"line":16691},[129,69769,69770],{"class":198},"    \u002F\u002F 获取所有带有name属性的元素\n",[129,69772,69773,69775,69778,69780,69782,69784,69786,69789],{"class":131,"line":16711},[129,69774,11236],{"class":135},[129,69776,69777],{"class":188}," items",[129,69779,13579],{"class":135},[129,69781,54397],{"class":139},[129,69783,55682],{"class":1977},[129,69785,140],{"class":139},[129,69787,69788],{"class":244},"'[name]'",[129,69790,146],{"class":139},[129,69792,69793],{"class":131,"line":16717},[129,69794,69795],{"class":198},"    \u002F\u002F 声明一个空的数组\n",[129,69797,69798,69800,69802,69804],{"class":131,"line":16728},[129,69799,11236],{"class":135},[129,69801,57696],{"class":188},[129,69803,13579],{"class":135},[129,69805,51839],{"class":139},[129,69807,69808],{"class":131,"line":16751},[129,69809,69810],{"class":198},"    \u002F\u002F 1.录入模块\n",[129,69812,69813],{"class":131,"line":16773},[129,69814,69815],{"class":198},"    \u002F\u002F 1.1这是一个表单提交事件\n",[129,69817,69818,69820,69823,69825,69827,69829,69831,69834],{"class":131,"line":16778},[129,69819,11236],{"class":135},[129,69821,69822],{"class":188}," info",[129,69824,13579],{"class":135},[129,69826,54397],{"class":139},[129,69828,54400],{"class":1977},[129,69830,140],{"class":139},[129,69832,69833],{"class":244},"'.info'",[129,69835,146],{"class":139},[129,69837,69838,69841,69843,69845,69848,69850,69852,69854,69856],{"class":131,"line":16784},[129,69839,69840],{"class":139},"    info.",[129,69842,57814],{"class":1977},[129,69844,140],{"class":139},[129,69846,69847],{"class":244},"'submit'",[129,69849,12450],{"class":139},[129,69851,54450],{"class":135},[129,69853,1672],{"class":139},[129,69855,214],{"class":5231},[129,69857,12457],{"class":139},[129,69859,69860],{"class":131,"line":16798},[129,69861,69862],{"class":198},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[129,69864,69865,69868,69871],{"class":131,"line":16811},[129,69866,69867],{"class":139},"      e.",[129,69869,69870],{"class":1977},"preventDefault",[129,69872,1990],{"class":139},[129,69874,69875],{"class":131,"line":16816},[129,69876,60013],{"class":198},[129,69878,69879],{"class":131,"line":16830},[129,69880,2414],{"emptyLinePlaceholder":56},[129,69882,69883],{"class":131,"line":16835},[129,69884,69885],{"class":198},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[129,69887,69888],{"class":131,"line":16841},[129,69889,69890],{"class":198},"      \u002F\u002F 先遍历循环\n",[129,69892,69893,69895,69897,69899,69901,69903,69905,69907,69909,69912,69914,69916,69918],{"class":131,"line":16846},[129,69894,52285],{"class":135},[129,69896,1672],{"class":139},[129,69898,51848],{"class":135},[129,69900,9453],{"class":139},[129,69902,185],{"class":135},[129,69904,4107],{"class":188},[129,69906,9460],{"class":139},[129,69908,1049],{"class":135},[129,69910,69911],{"class":139}," items.",[129,69913,51969],{"class":188},[129,69915,3228],{"class":139},[129,69917,2306],{"class":135},[129,69919,12457],{"class":139},[129,69921,69922,69924,69927,69929,69932],{"class":131,"line":16860},[129,69923,2511],{"class":135},[129,69925,69926],{"class":139}," (items[i].value ",[129,69928,54487],{"class":135},[129,69930,69931],{"class":244}," ''",[129,69933,12457],{"class":139},[129,69935,69936,69939,69942,69944,69947],{"class":131,"line":16865},[129,69937,69938],{"class":135},"          return",[129,69940,69941],{"class":1977}," alert",[129,69943,140],{"class":139},[129,69945,69946],{"class":244},"'输入内容不能为空'",[129,69948,146],{"class":139},[129,69950,69951],{"class":131,"line":16870},[129,69952,2543],{"class":139},[129,69954,69955],{"class":131,"line":16884},[129,69956,52399],{"class":139},[129,69958,69959],{"class":131,"line":16896},[129,69960,2414],{"emptyLinePlaceholder":56},[129,69962,69963],{"class":131,"line":16901},[129,69964,69965],{"class":198},"      \u002F\u002F 创建新的对象\n",[129,69967,69968,69970,69973,69975],{"class":131,"line":16914},[129,69969,58229],{"class":135},[129,69971,69972],{"class":188}," obj",[129,69974,13579],{"class":135},[129,69976,15587],{"class":139},[129,69978,69979,69982,69984,69986,69988],{"class":131,"line":16919},[129,69980,69981],{"class":139},"        stuID: arr.",[129,69983,51969],{"class":188},[129,69985,45567],{"class":135},[129,69987,25119],{"class":188},[129,69989,31467],{"class":139},[129,69991,69992],{"class":131,"line":16924},[129,69993,69994],{"class":139},"        uname: uname.value,\n",[129,69996,69997],{"class":131,"line":16929},[129,69998,69999],{"class":139},"        age: age.value,\n",[129,70001,70002],{"class":131,"line":16942},[129,70003,70004],{"class":139},"        gender: gender.value,\n",[129,70006,70007],{"class":131,"line":16947},[129,70008,70009],{"class":139},"        salary: salary.value,\n",[129,70011,70012],{"class":131,"line":32634},[129,70013,70014],{"class":139},"        city: city.value\n",[129,70016,70017],{"class":131,"line":32640},[129,70018,52399],{"class":139},[129,70020,70021],{"class":131,"line":32646},[129,70022,70023],{"class":198},"      \u002F\u002F console.log(obj);\n",[129,70025,70026],{"class":131,"line":32652},[129,70027,70028],{"class":198},"      \u002F\u002F 追加到数组里面\n",[129,70030,70031,70033,70035],{"class":131,"line":32658},[129,70032,58008],{"class":139},[129,70034,51885],{"class":1977},[129,70036,70037],{"class":139},"(obj)\n",[129,70039,70040],{"class":131,"line":32669},[129,70041,70042],{"class":198},"      \u002F\u002F console.log(arr);\n",[129,70044,70045],{"class":131,"line":32675},[129,70046,70047],{"class":198},"      \u002F\u002F 清空表单  reset重置表单\n",[129,70049,70050,70053,70055,70058],{"class":131,"line":32695},[129,70051,70052],{"class":188},"      this",[129,70054,697],{"class":139},[129,70056,70057],{"class":1977},"reset",[129,70059,1990],{"class":139},[129,70061,70062],{"class":131,"line":32701},[129,70063,70064],{"class":198},"      \u002F\u002F 调用渲染函数\n",[129,70066,70067,70070],{"class":131,"line":32712},[129,70068,70069],{"class":1977},"      render",[129,70071,1990],{"class":139},[129,70073,70074],{"class":131,"line":32718},[129,70075,33462],{"class":139},[129,70077,70078],{"class":131,"line":32724},[129,70079,70080],{"class":198},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[129,70082,70083,70086,70089],{"class":131,"line":32730},[129,70084,70085],{"class":135},"    function",[129,70087,70088],{"class":1977}," render",[129,70090,10868],{"class":139},[129,70092,70093],{"class":131,"line":32736},[129,70094,70095],{"class":198},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[129,70097,70098,70101,70103],{"class":131,"line":32742},[129,70099,70100],{"class":139},"      tbody.innerHTML ",[129,70102,185],{"class":135},[129,70104,70105],{"class":244}," ''\n",[129,70107,70108],{"class":131,"line":32748},[129,70109,70110],{"class":198},"      \u002F\u002F 遍历数组\n",[129,70112,70113,70115,70117,70119,70121,70123,70125,70127,70129,70131,70133,70135,70137],{"class":131,"line":32754},[129,70114,52285],{"class":135},[129,70116,1672],{"class":139},[129,70118,51848],{"class":135},[129,70120,9453],{"class":139},[129,70122,185],{"class":135},[129,70124,4107],{"class":188},[129,70126,9460],{"class":139},[129,70128,1049],{"class":135},[129,70130,51966],{"class":139},[129,70132,51969],{"class":188},[129,70134,3228],{"class":139},[129,70136,2306],{"class":135},[129,70138,12457],{"class":139},[129,70140,70141,70143,70146,70148,70150,70153,70155,70158],{"class":131,"line":32774},[129,70142,61271],{"class":135},[129,70144,70145],{"class":188}," tr",[129,70147,13579],{"class":135},[129,70149,54397],{"class":139},[129,70151,70152],{"class":1977},"createElement",[129,70154,140],{"class":139},[129,70156,70157],{"class":244},"'tr'",[129,70159,146],{"class":139},[129,70161,70162,70165,70167],{"class":131,"line":32780},[129,70163,70164],{"class":139},"        tr.innerHTML ",[129,70166,185],{"class":135},[129,70168,70169],{"class":244}," `\n",[129,70171,70172,70175,70177,70179,70181,70184,70187],{"class":131,"line":32796},[129,70173,70174],{"class":244},"        \u003Ctd>${",[129,70176,3894],{"class":139},[129,70178,1029],{"class":244},[129,70180,580],{"class":139},[129,70182,70183],{"class":244},"].",[129,70185,70186],{"class":139},"stuID",[129,70188,70189],{"class":244},"}\u003C\u002Ftd>\n",[129,70191,70192,70195,70197,70199,70201,70203,70206],{"class":131,"line":32802},[129,70193,70194],{"class":244},"          \u003Ctd>${",[129,70196,3894],{"class":139},[129,70198,1029],{"class":244},[129,70200,580],{"class":139},[129,70202,70183],{"class":244},[129,70204,70205],{"class":139},"uname",[129,70207,70189],{"class":244},[129,70209,70210,70212,70214,70216,70218,70220,70223],{"class":131,"line":32816},[129,70211,70194],{"class":244},[129,70213,3894],{"class":139},[129,70215,1029],{"class":244},[129,70217,580],{"class":139},[129,70219,70183],{"class":244},[129,70221,70222],{"class":139},"age",[129,70224,70189],{"class":244},[129,70226,70227,70229,70231,70233,70235,70237,70240],{"class":131,"line":32822},[129,70228,70194],{"class":244},[129,70230,3894],{"class":139},[129,70232,1029],{"class":244},[129,70234,580],{"class":139},[129,70236,70183],{"class":244},[129,70238,70239],{"class":139},"gender",[129,70241,70189],{"class":244},[129,70243,70244,70246,70248,70250,70252,70254,70257],{"class":131,"line":32837},[129,70245,70194],{"class":244},[129,70247,3894],{"class":139},[129,70249,1029],{"class":244},[129,70251,580],{"class":139},[129,70253,70183],{"class":244},[129,70255,70256],{"class":139},"salary",[129,70258,70189],{"class":244},[129,70260,70261,70263,70265,70267,70269,70271,70274],{"class":131,"line":32843},[129,70262,70194],{"class":244},[129,70264,3894],{"class":139},[129,70266,1029],{"class":244},[129,70268,580],{"class":139},[129,70270,70183],{"class":244},[129,70272,70273],{"class":139},"city",[129,70275,70189],{"class":244},[129,70277,70278],{"class":131,"line":32852},[129,70279,69594],{"class":244},[129,70281,70282,70285,70287],{"class":131,"line":32858},[129,70283,70284],{"class":244},"            \u003Ca href=\"javascript:\" data-id=${",[129,70286,580],{"class":139},[129,70288,70289],{"class":244},"}>删除\u003C\u002Fa>\n",[129,70291,70292],{"class":131,"line":32867},[129,70293,70294],{"class":244},"          \u003C\u002Ftd> \n",[129,70296,70297],{"class":131,"line":32873},[129,70298,70299],{"class":244},"          `\n",[129,70301,70302],{"class":131,"line":32879},[129,70303,70304],{"class":198},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[129,70306,70307,70310,70313],{"class":131,"line":32888},[129,70308,70309],{"class":139},"        tbody.",[129,70311,70312],{"class":1977},"appendChild",[129,70314,70315],{"class":139},"(tr)\n",[129,70317,70318],{"class":131,"line":32894},[129,70319,52399],{"class":139},[129,70321,70322],{"class":131,"line":32905},[129,70323,2201],{"class":139},[129,70325,70326],{"class":131,"line":32911},[129,70327,2414],{"emptyLinePlaceholder":56},[129,70329,70330],{"class":131,"line":32930},[129,70331,70332],{"class":198},"    \u002F\u002F 3.删除委托\n",[129,70334,70335],{"class":131,"line":32936},[129,70336,70337],{"class":198},"    \u002F\u002F 3.1 事件委托 tbody\n",[129,70339,70340,70343,70345,70347,70349,70351,70353,70355,70357],{"class":131,"line":32947},[129,70341,70342],{"class":139},"    tbody.",[129,70344,57814],{"class":1977},[129,70346,140],{"class":139},[129,70348,57819],{"class":244},[129,70350,12450],{"class":139},[129,70352,54450],{"class":135},[129,70354,1672],{"class":139},[129,70356,214],{"class":5231},[129,70358,12457],{"class":139},[129,70360,70361,70363,70365,70367,70369],{"class":131,"line":32953},[129,70362,54481],{"class":135},[129,70364,67035],{"class":139},[129,70366,54487],{"class":135},[129,70368,68257],{"class":244},[129,70370,12457],{"class":139},[129,70372,70373],{"class":131,"line":32973},[129,70374,70375],{"class":198},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[129,70377,70378],{"class":131,"line":32989},[129,70379,70380],{"class":198},"        \u002F\u002F console.log(e.target.dataset.id);\n",[129,70382,70383],{"class":131,"line":32995},[129,70384,70385],{"class":198},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[129,70387,70388,70391,70393,70396,70398],{"class":131,"line":33009},[129,70389,70390],{"class":139},"        arr.",[129,70392,58011],{"class":1977},[129,70394,70395],{"class":139},"(e.target.dataset.id, ",[129,70397,357],{"class":188},[129,70399,146],{"class":139},[129,70401,70402],{"class":131,"line":33015},[129,70403,70404],{"class":198},"        \u002F\u002F 重新渲染一次\n",[129,70406,70407,70410],{"class":131,"line":33021},[129,70408,70409],{"class":1977},"        render",[129,70411,1990],{"class":139},[129,70413,70414],{"class":131,"line":33032},[129,70415,52399],{"class":139},[129,70417,70418],{"class":131,"line":33038},[129,70419,33462],{"class":139},[129,70421,70422,70424,70426],{"class":131,"line":33044},[129,70423,52418],{"class":139},[129,70425,51814],{"class":51301},[129,70427,51308],{"class":139},[129,70429,70430],{"class":131,"line":33054},[129,70431,2414],{"emptyLinePlaceholder":56},[129,70433,70434,70436,70438],{"class":131,"line":33060},[129,70435,51786],{"class":139},[129,70437,51801],{"class":51301},[129,70439,51308],{"class":139},[129,70441,70442],{"class":131,"line":33071},[129,70443,2414],{"emptyLinePlaceholder":56},[129,70445,70446,70448,70450],{"class":131,"line":33077},[129,70447,51786],{"class":139},[129,70449,50636],{"class":51301},[129,70451,51308],{"class":139},[14,70453,70454],{},"样式：",[120,70456,70460],{"className":70457,"code":70458,"language":70459,"meta":42,"style":42},"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",[126,70461,70462,70467,70477,70486,70490,70494,70499,70509,70514,70518,70523,70533,70538,70547,70551,70555,70560,70565,70575,70585,70590,70594,70599,70608,70618,70623,70633,70643,70647,70652,70660,70664,70669,70674,70679,70687,70696,70700,70705,70714,70718,70723,70732,70736,70741,70750,70759,70767,70771,70776,70785,70795,70804,70814,70820,70829,70839,70849,70853,70858,70867,70875,70885,70893,70902,70911,70921,70929,70933,70938,70947],{"__ignoreMap":42},[129,70463,70464],{"class":131,"line":132},[129,70465,70466],{"class":139},"* {\n",[129,70468,70469,70472,70474],{"class":131,"line":51},[129,70470,70471],{"class":51301},"  margin",[129,70473,51438],{"class":139},[129,70475,70476],{"class":244},"0;\n",[129,70478,70479,70482,70484],{"class":131,"line":1194},[129,70480,70481],{"class":244},"  padding",[129,70483,51438],{"class":139},[129,70485,70476],{"class":244},[129,70487,70488],{"class":131,"line":1209},[129,70489,1579],{"class":139},[129,70491,70492],{"class":131,"line":1215},[129,70493,2414],{"emptyLinePlaceholder":56},[129,70495,70496],{"class":131,"line":1229},[129,70497,70498],{"class":244},"a {\n",[129,70500,70501,70504,70506],{"class":131,"line":1235},[129,70502,70503],{"class":51301},"  text-decoration",[129,70505,51438],{"class":139},[129,70507,70508],{"class":244},"none;\n",[129,70510,70511],{"class":131,"line":1326},[129,70512,70513],{"class":244},"  color:#721c24;\n",[129,70515,70516],{"class":131,"line":1332},[129,70517,1579],{"class":139},[129,70519,70520],{"class":131,"line":1344},[129,70521,70522],{"class":244},"h1 {\n",[129,70524,70525,70528,70530],{"class":131,"line":1626},[129,70526,70527],{"class":51301},"  text-align",[129,70529,51438],{"class":139},[129,70531,70532],{"class":244},"center;\n",[129,70534,70535],{"class":131,"line":1631},[129,70536,70537],{"class":244},"  color:#333;\n",[129,70539,70540,70542,70544],{"class":131,"line":1637},[129,70541,70471],{"class":51301},[129,70543,51438],{"class":139},[129,70545,70546],{"class":244},"20px 0;\n",[129,70548,70549],{"class":131,"line":1642},[129,70550,2688],{"class":139},[129,70552,70553],{"class":131,"line":1656},[129,70554,1579],{"class":139},[129,70556,70557],{"class":131,"line":1661},[129,70558,70559],{"class":244},"table {\n",[129,70561,70562],{"class":131,"line":1667},[129,70563,70564],{"class":244},"  margin:0 auto;\n",[129,70566,70567,70570,70572],{"class":131,"line":1688},[129,70568,70569],{"class":51301},"  width",[129,70571,51438],{"class":139},[129,70573,70574],{"class":244},"800px;\n",[129,70576,70577,70580,70582],{"class":131,"line":1693},[129,70578,70579],{"class":51301},"  border-collapse",[129,70581,51438],{"class":139},[129,70583,70584],{"class":244},"collapse;\n",[129,70586,70587],{"class":131,"line":1707},[129,70588,70589],{"class":244},"  color:#004085;\n",[129,70591,70592],{"class":131,"line":1712},[129,70593,1579],{"class":139},[129,70595,70596],{"class":131,"line":1741},[129,70597,70598],{"class":244},"th {\n",[129,70600,70601,70603,70605],{"class":131,"line":1746},[129,70602,70481],{"class":51301},[129,70604,51438],{"class":139},[129,70606,70607],{"class":244},"10px;\n",[129,70609,70610,70613,70615],{"class":131,"line":1763},[129,70611,70612],{"class":51301},"  background",[129,70614,51438],{"class":139},[129,70616,70617],{"class":198},"#cfe5ff;\n",[129,70619,70620],{"class":131,"line":1768},[129,70621,70622],{"class":139},"  \n",[129,70624,70625,70628,70630],{"class":131,"line":1773},[129,70626,70627],{"class":51301},"  font-size",[129,70629,51438],{"class":139},[129,70631,70632],{"class":244},"20px;\n",[129,70634,70635,70638,70640],{"class":131,"line":1778},[129,70636,70637],{"class":51301},"  font-weight",[129,70639,51438],{"class":139},[129,70641,70642],{"class":244},"400;\n",[129,70644,70645],{"class":131,"line":1792},[129,70646,1579],{"class":139},[129,70648,70649],{"class":131,"line":1797},[129,70650,70651],{"class":244},"td,th {\n",[129,70653,70654,70657],{"class":131,"line":2591},[129,70655,70656],{"class":244},"  border:1px solid",[129,70658,70659],{"class":198}," #b8daff;\n",[129,70661,70662],{"class":131,"line":2605},[129,70663,1579],{"class":139},[129,70665,70666],{"class":131,"line":2613},[129,70667,70668],{"class":244},"td {\n",[129,70670,70671],{"class":131,"line":2618},[129,70672,70673],{"class":244},"  padding:10px;\n",[129,70675,70676],{"class":131,"line":2624},[129,70677,70678],{"class":244},"  color:#666;\n",[129,70680,70681,70683,70685],{"class":131,"line":2630},[129,70682,70527],{"class":51301},[129,70684,51438],{"class":139},[129,70686,70532],{"class":244},[129,70688,70689,70691,70693],{"class":131,"line":2635},[129,70690,70627],{"class":51301},[129,70692,51438],{"class":139},[129,70694,70695],{"class":244},"16px;\n",[129,70697,70698],{"class":131,"line":7963},[129,70699,1579],{"class":139},[129,70701,70702],{"class":131,"line":7987},[129,70703,70704],{"class":244},"tbody tr {\n",[129,70706,70707,70709,70711],{"class":131,"line":7992},[129,70708,70612],{"class":51301},[129,70710,51438],{"class":139},[129,70712,70713],{"class":198},"#fff;\n",[129,70715,70716],{"class":131,"line":7998},[129,70717,1579],{"class":139},[129,70719,70720],{"class":131,"line":8025},[129,70721,70722],{"class":244},"tbody tr:hover {\n",[129,70724,70725,70727,70729],{"class":131,"line":8030},[129,70726,70612],{"class":51301},[129,70728,51438],{"class":139},[129,70730,70731],{"class":198},"#e1ecf8;\n",[129,70733,70734],{"class":131,"line":8036},[129,70735,1579],{"class":139},[129,70737,70738],{"class":131,"line":8048},[129,70739,70740],{"class":244},".info {\n",[129,70742,70743,70745,70747],{"class":131,"line":8060},[129,70744,70569],{"class":51301},[129,70746,51438],{"class":139},[129,70748,70749],{"class":244},"900px;\n",[129,70751,70752,70754,70756],{"class":131,"line":8072},[129,70753,70471],{"class":51301},[129,70755,51438],{"class":139},[129,70757,70758],{"class":244},"50px auto;\n",[129,70760,70761,70763,70765],{"class":131,"line":9731},[129,70762,70527],{"class":51301},[129,70764,51438],{"class":139},[129,70766,70532],{"class":244},[129,70768,70769],{"class":131,"line":9756},[129,70770,1579],{"class":139},[129,70772,70773],{"class":131,"line":9779},[129,70774,70775],{"class":244},".info  input, .info select {\n",[129,70777,70778,70780,70782],{"class":131,"line":9803},[129,70779,70569],{"class":51301},[129,70781,51438],{"class":139},[129,70783,70784],{"class":244},"80px;\n",[129,70786,70787,70790,70792],{"class":131,"line":9808},[129,70788,70789],{"class":51301},"  height",[129,70791,51438],{"class":139},[129,70793,70794],{"class":244},"27px;\n",[129,70796,70797,70800,70802],{"class":131,"line":9813},[129,70798,70799],{"class":51301},"  outline",[129,70801,51438],{"class":139},[129,70803,70508],{"class":244},[129,70805,70806,70809,70811],{"class":131,"line":9818},[129,70807,70808],{"class":51301},"  border-radius",[129,70810,51438],{"class":139},[129,70812,70813],{"class":244},"5px;\n",[129,70815,70816,70818],{"class":131,"line":9827},[129,70817,70656],{"class":244},[129,70819,70659],{"class":198},[129,70821,70822,70825,70827],{"class":131,"line":9832},[129,70823,70824],{"class":51301},"  padding-left",[129,70826,51438],{"class":139},[129,70828,70813],{"class":244},[129,70830,70831,70834,70836],{"class":131,"line":9838},[129,70832,70833],{"class":51301},"  box-sizing",[129,70835,51438],{"class":139},[129,70837,70838],{"class":244},"border-box;\n",[129,70840,70841,70844,70846],{"class":131,"line":9859},[129,70842,70843],{"class":51301},"  margin-right",[129,70845,51438],{"class":139},[129,70847,70848],{"class":244},"15px;\n",[129,70850,70851],{"class":131,"line":9865},[129,70852,1579],{"class":139},[129,70854,70855],{"class":131,"line":9879},[129,70856,70857],{"class":244},".info button {\n",[129,70859,70860,70862,70864],{"class":131,"line":9885},[129,70861,70569],{"class":51301},[129,70863,51438],{"class":139},[129,70865,70866],{"class":244},"60px;\n",[129,70868,70869,70871,70873],{"class":131,"line":9912},[129,70870,70789],{"class":51301},[129,70872,51438],{"class":139},[129,70874,70794],{"class":244},[129,70876,70877,70880,70882],{"class":131,"line":9921},[129,70878,70879],{"class":51301},"  background-color",[129,70881,51438],{"class":139},[129,70883,70884],{"class":198},"#004085;\n",[129,70886,70887,70889,70891],{"class":131,"line":9927},[129,70888,70799],{"class":51301},[129,70890,51438],{"class":139},[129,70892,70508],{"class":244},[129,70894,70895,70898,70900],{"class":131,"line":9935},[129,70896,70897],{"class":51301},"  border",[129,70899,51438],{"class":139},[129,70901,70476],{"class":244},[129,70903,70904,70907,70909],{"class":131,"line":9940},[129,70905,70906],{"class":51301},"  color",[129,70908,51438],{"class":139},[129,70910,70713],{"class":198},[129,70912,70913,70916,70918],{"class":131,"line":16619},[129,70914,70915],{"class":51301},"  cursor",[129,70917,51438],{"class":139},[129,70919,70920],{"class":244},"pointer;\n",[129,70922,70923,70925,70927],{"class":131,"line":16625},[129,70924,70808],{"class":51301},[129,70926,51438],{"class":139},[129,70928,70813],{"class":244},[129,70930,70931],{"class":131,"line":16648},[129,70932,1579],{"class":139},[129,70934,70935],{"class":131,"line":16654},[129,70936,70937],{"class":244},".info .age {\n",[129,70939,70940,70942,70944],{"class":131,"line":16677},[129,70941,70569],{"class":51301},[129,70943,51438],{"class":139},[129,70945,70946],{"class":244},"50px;\n",[129,70948,70949],{"class":131,"line":16691},[129,70950,1579],{"class":139},[14,70952,70953],{},"思路：",[14,70955,70956],{},[40,70957],{"alt":42,"src":70958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,70960,70961],{},[40,70962],{"alt":42,"src":70963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,70965,70966],{},[40,70967],{"alt":42,"src":70968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[100,70970,70972],{"id":70971},"_3315-重绘回流","3.3.15 重绘回流",[14,70974,70975],{},[40,70976],{"alt":42,"src":70977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,70979,70980],{},[40,70981],{"alt":42,"src":70982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,70984,70985],{},[40,70986],{"alt":42,"src":70987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[71,70989,70991],{"id":70990},"_34-bom","3.4 BOM",[14,70993,70994],{},[40,70995],{"alt":42,"src":70996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,70998,70999],{},"平时写的document省略了window而已，实际上是window.document",[14,71001,71002],{},"函数也是这样，调用的时候实际为window.fn()",[14,71004,71005],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71007,71008],{},"window大部分情况下可以省略",[100,71010,71012],{"id":71011},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71014,71015],{},"只执行一次",[14,71017,71018],{},[40,71019],{"alt":42,"src":71020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71022,71023],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71025,71026],{},[40,71027],{"alt":42,"src":71028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[100,71030,71032],{"id":71031},"_342-js执行机制","3.4.2 JS执行机制",[14,71034,71035],{},[40,71036],{"alt":42,"src":71037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71039,71040],{},"两个的结果都是1111 3333 2222",[14,71042,71043],{},[40,71044],{"alt":42,"src":71045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71047,71048],{},[40,71049],{"alt":42,"src":71050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71052,71053],{},[40,71054],{"alt":42,"src":71055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71057,71058],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71060,71061],{},"工作流程：",[14,71063,71064],{},[40,71065],{"alt":42,"src":71066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71068,71069],{},[40,71070],{"alt":42,"src":71071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71073,71074],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71076,71077],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[100,71079,71081],{"id":71080},"_343-location对象","3.4.3 location对象",[14,71083,71084],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71086,71087],{},[40,71088],{"alt":42,"src":71089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71091,71092],{},"href可以跳转页面",[83,71094,71095],{},[86,71096,71097],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71099,71100],{},"search得到提交信息之后网站后边的地址",[14,71102,71103],{},[40,71104],{"alt":42,"src":71105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71107,71108],{},[40,71109],{"alt":42,"src":71110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[83,71112,71113],{"start":51},[86,71114,71115],{},"hash:这个获取单页面应用#后边的地址",[14,71117,71118],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71120,71121],{},[40,71122],{"alt":42,"src":71123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[120,71125,71127],{"className":53068,"code":71126,"language":53070,"meta":42,"style":42},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[126,71128,71129,71149,71169],{"__ignoreMap":42},[129,71130,71131,71133,71135,71137,71139,71142,71145,71147],{"class":131,"line":132},[129,71132,52145],{"class":139},[129,71134,20],{"class":51301},[129,71136,61058],{"class":1977},[129,71138,185],{"class":139},[129,71140,71141],{"class":244},"\"#\u002Fmy\"",[129,71143,71144],{"class":139},">我的\u003C\u002F",[129,71146,20],{"class":51301},[129,71148,51308],{"class":139},[129,71150,71151,71153,71155,71157,71159,71162,71165,71167],{"class":131,"line":51},[129,71152,52145],{"class":139},[129,71154,20],{"class":51301},[129,71156,61058],{"class":1977},[129,71158,185],{"class":139},[129,71160,71161],{"class":244},"\"#\u002Ffriend\"",[129,71163,71164],{"class":139},">关注\u003C\u002F",[129,71166,20],{"class":51301},[129,71168,51308],{"class":139},[129,71170,71171,71173,71175,71177,71179,71182,71185,71187],{"class":131,"line":1194},[129,71172,52145],{"class":139},[129,71174,20],{"class":51301},[129,71176,61058],{"class":1977},[129,71178,185],{"class":139},[129,71180,71181],{"class":244},"\"#\u002Fdownload\"",[129,71183,71184],{"class":139},">下载\u003C\u002F",[129,71186,20],{"class":51301},[129,71188,51308],{"class":139},[14,71190,71191],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[83,71193,71194],{"start":1194},[86,71195,71196,71197,71199,71200,71202],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53717,71198],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53717,71201],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[100,71204,71206],{"id":71205},"_345-navigator对象","3.4.5 navigator对象",[14,71208,71209],{},[40,71210],{"alt":42,"src":71211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[120,71213,71217],{"className":71214,"code":71215,"language":71216,"meta":42,"style":42},"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",[126,71218,71219,71224,71235,71247,71252,71303,71344,71349,71362,71374,71379],{"__ignoreMap":42},[129,71220,71221],{"class":131,"line":132},[129,71222,71223],{"class":198},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[129,71225,71226,71228,71230,71232],{"class":131,"line":51},[129,71227,366],{"class":135},[129,71229,140],{"class":139},[129,71231,54450],{"class":135},[129,71233,71234],{"class":139}," () { \n",[129,71236,71237,71239,71242,71244],{"class":131,"line":1194},[129,71238,6807],{"class":135},[129,71240,71241],{"class":188}," userAgent",[129,71243,13579],{"class":135},[129,71245,71246],{"class":139}," navigator.userAgent \n",[129,71248,71249],{"class":131,"line":1209},[129,71250,71251],{"class":198},"\u002F\u002F 验证是否为Android或iPhone \n",[129,71253,71254,71256,71259,71261,71264,71267,71269,71271,71274,71276,71279,71283,71285,71287,71289,71292,71294,71296,71298,71300],{"class":131,"line":1215},[129,71255,6807],{"class":135},[129,71257,71258],{"class":188}," android",[129,71260,13579],{"class":135},[129,71262,71263],{"class":139}," userAgent.",[129,71265,71266],{"class":1977},"match",[129,71268,140],{"class":139},[129,71270,723],{"class":244},[129,71272,71273],{"class":47978},"(Android);",[129,71275,1125],{"class":135},[129,71277,71278],{"class":188},"[\\s",[129,71280,71282],{"class":71281},"snhLl","\\\u002F",[129,71284,1079],{"class":188},[129,71286,620],{"class":135},[129,71288,140],{"class":47978},[129,71290,71291],{"class":188},"[\\d.]",[129,71293,620],{"class":135},[129,71295,568],{"class":47978},[129,71297,1125],{"class":135},[129,71299,723],{"class":244},[129,71301,71302],{"class":139},") \n",[129,71304,71305,71307,71310,71312,71314,71316,71318,71320,71323,71326,71329,71331,71333,71336,71338,71340,71342],{"class":131,"line":1229},[129,71306,6807],{"class":135},[129,71308,71309],{"class":188}," iphone",[129,71311,13579],{"class":135},[129,71313,71263],{"class":139},[129,71315,71266],{"class":1977},[129,71317,140],{"class":139},[129,71319,723],{"class":244},[129,71321,71322],{"class":47978},"(iPhone",[129,71324,71325],{"class":188},"\\s",[129,71327,71328],{"class":47978},"OS)",[129,71330,71325],{"class":188},[129,71332,140],{"class":47978},[129,71334,71335],{"class":188},"[\\d_]",[129,71337,620],{"class":135},[129,71339,568],{"class":47978},[129,71341,723],{"class":244},[129,71343,71302],{"class":139},[129,71345,71346],{"class":131,"line":1235},[129,71347,71348],{"class":198},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[129,71350,71351,71353,71356,71359],{"class":131,"line":1326},[129,71352,1545],{"class":135},[129,71354,71355],{"class":139}," (android ",[129,71357,71358],{"class":135},"||",[129,71360,71361],{"class":139}," iphone) { \n",[129,71363,71364,71367,71369,71372],{"class":131,"line":1332},[129,71365,71366],{"class":139},"location.href ",[129,71368,185],{"class":135},[129,71370,71371],{"class":244}," 'http:\u002F\u002Fm.itcast.cn'",[129,71373,2688],{"class":139},[129,71375,71376],{"class":131,"line":1344},[129,71377,71378],{"class":139},"} \n",[129,71380,71381],{"class":131,"line":1626},[129,71382,71383],{"class":139},"})()\n",[100,71385,71387],{"id":71386},"_346-histroy对象","3.4.6 histroy对象",[14,71389,71390],{},[40,71391],{"alt":42,"src":71392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71394,71395],{},"浏览器地址的前进与后退!!!",[14,71397,71398],{},"history.back() 等效于 history.go(-1)",[14,71400,71401],{},"history.forward() 等效于 history.go(1)",[71,71403,71405],{"id":71404},"_35-本地存储","3.5 本地存储",[83,71407,71408,71411,71414],{},[86,71409,71410],{},"数据存储在用户浏览器中",[86,71412,71413],{},"设置、读取方便、甚至页面刷新不丢失数据",[86,71415,71416],{},"容量较大，sessionStorage和localStorage约 5M 左右",[100,71418,71420],{"id":71419},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71422,71423],{},"只能存储字符串",[14,71425,71426],{},[40,71427],{"alt":42,"src":71428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71430,71431],{},[40,71432],{"alt":42,"src":71433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71435,71436],{},"键值对要加引号,不然就会当变量来看了",[14,71438,71439],{},"localStorage.setItem('uname', 'pink')",[14,71441,71442],{},"刷新之后信息不再丢失",[14,71444,71445],{},"操作key,value会跟着变",[14,71447,71448],{},"删除只删除键就可以,即名字",[14,71450,71439],{},[14,71452,71453],{},"改:",[14,71455,71456],{},"localStorage.setItem('uname','red')",[14,71458,71459],{},"有这个键就是改,没有这个键就是改",[14,71461,71462],{},[40,71463],{"alt":42,"src":71464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71466,71467],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71469,71470],{},[40,71471],{"alt":42,"src":71472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71474,71475],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[100,71477,71479],{"id":71478},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71481,71482],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71484,71485],{},"特性:",[83,71487,71488,71491,71494,71497],{},[86,71489,71490],{},"生命周期为关闭浏览器窗口",[86,71492,71493],{},"在同一个窗口(页面)下数据可以共享",[86,71495,71496],{},"以键值对的形式存储使用",[86,71498,71499],{},"用法跟localStorage 基本相同",[100,71501,71503],{"id":71502},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71505,71506],{},"本地只能存储字符串,无法直接存储复杂数据类型",[120,71508,71510],{"className":53068,"code":71509,"language":53070,"meta":42,"style":42},"\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",[126,71511,71512,71520,71525,71530,71535,71540,71544,71549,71554],{"__ignoreMap":42},[129,71513,71514,71516,71518],{"class":131,"line":132},[129,71515,1049],{"class":139},[129,71517,51814],{"class":51301},[129,71519,51308],{"class":139},[129,71521,71522],{"class":131,"line":51},[129,71523,71524],{"class":139},"    const obj = {\n",[129,71526,71527],{"class":131,"line":1194},[129,71528,71529],{"class":139},"      uname: 'pink老师',\n",[129,71531,71532],{"class":131,"line":1209},[129,71533,71534],{"class":139},"      age: 18,\n",[129,71536,71537],{"class":131,"line":1215},[129,71538,71539],{"class":139},"      gender: '女'\n",[129,71541,71542],{"class":131,"line":1229},[129,71543,2201],{"class":139},[129,71545,71546],{"class":131,"line":1235},[129,71547,71548],{"class":139},"    \u002F\u002F 存储复杂数据类型\n",[129,71550,71551],{"class":131,"line":1326},[129,71552,71553],{"class":139},"    localStorage.setItem('obj', obj)\n",[129,71555,71556,71558,71560],{"class":131,"line":1332},[129,71557,52418],{"class":139},[129,71559,51814],{"class":51301},[129,71561,51308],{"class":139},[14,71563,71564],{},[40,71565],{"alt":42,"src":71566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71568,71569],{},"如果获取一下数据:",[14,71571,71572],{},"log(localStorage.getItem('obj'))",[14,71574,71575],{},[40,71576],{"alt":42,"src":71577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71579,71580],{},"发现直接存对象是使用不了的!!!",[22013,71582,71584],{"id":71583},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71586,71587],{},[40,71588],{"alt":42,"src":71589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[120,71591,71593],{"className":50634,"code":71592,"language":50636,"meta":42,"style":42},"\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",[126,71594,71595,71603,71613,71623,71632,71640,71644,71648,71674,71693,71701,71705,71710,71715],{"__ignoreMap":42},[129,71596,71597,71599,71601],{"class":131,"line":132},[129,71598,1049],{"class":139},[129,71600,51814],{"class":51301},[129,71602,51308],{"class":139},[129,71604,71605,71607,71609,71611],{"class":131,"line":51},[129,71606,11236],{"class":135},[129,71608,69972],{"class":188},[129,71610,13579],{"class":135},[129,71612,15587],{"class":139},[129,71614,71615,71618,71621],{"class":131,"line":1194},[129,71616,71617],{"class":139},"      uname: ",[129,71619,71620],{"class":244},"'pink老师'",[129,71622,31467],{"class":139},[129,71624,71625,71628,71630],{"class":131,"line":1209},[129,71626,71627],{"class":139},"      age: ",[129,71629,789],{"class":188},[129,71631,31467],{"class":139},[129,71633,71634,71637],{"class":131,"line":1215},[129,71635,71636],{"class":139},"      gender: ",[129,71638,71639],{"class":244},"'女'\n",[129,71641,71642],{"class":131,"line":1229},[129,71643,2201],{"class":139},[129,71645,71646],{"class":131,"line":1235},[129,71647,71548],{"class":198},[129,71649,71650,71653,71656,71658,71661,71663,71666,71668,71671],{"class":131,"line":1326},[129,71651,71652],{"class":139},"  localStorage.",[129,71654,71655],{"class":1977},"setItem",[129,71657,140],{"class":139},[129,71659,71660],{"class":244},"'obj'",[129,71662,12450],{"class":139},[129,71664,71665],{"class":188},"JSON",[129,71667,697],{"class":139},[129,71669,71670],{"class":1977},"stringify",[129,71672,71673],{"class":139},"(obj))\n",[129,71675,71676,71679,71681,71684,71687,71689,71691],{"class":131,"line":1332},[129,71677,71678],{"class":139},"  console.",[129,71680,58248],{"class":1977},[129,71682,71683],{"class":139},"(localStorage.",[129,71685,71686],{"class":1977},"getItem",[129,71688,140],{"class":139},[129,71690,71660],{"class":244},[129,71692,30498],{"class":139},[129,71694,71695,71697,71699],{"class":131,"line":1344},[129,71696,52418],{"class":139},[129,71698,51814],{"class":51301},[129,71700,51308],{"class":139},[129,71702,71703],{"class":131,"line":1626},[129,71704,70622],{"class":139},[129,71706,71707],{"class":131,"line":1631},[129,71708,71709],{"class":139},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[129,71711,71712],{"class":131,"line":1637},[129,71713,71714],{"class":139},"  类型是字符串的\n",[129,71716,71717],{"class":131,"line":1642},[129,71718,71719],{"class":139},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22013,71721,71723],{"id":71722},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71725,71726],{},[40,71727],{"alt":42,"src":71728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71730,71731],{},[40,71732],{"alt":42,"src":71733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[120,71735,71737],{"className":53068,"code":71736,"language":53070,"meta":42,"style":42},"  \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",[126,71738,71739,71747,71751,71755,71759,71763,71767,71772,71777,71782,71787,71792,71797,71802,71807],{"__ignoreMap":42},[129,71740,71741,71743,71745],{"class":131,"line":132},[129,71742,52145],{"class":139},[129,71744,51814],{"class":51301},[129,71746,51308],{"class":139},[129,71748,71749],{"class":131,"line":51},[129,71750,71524],{"class":139},[129,71752,71753],{"class":131,"line":1194},[129,71754,71529],{"class":139},[129,71756,71757],{"class":131,"line":1209},[129,71758,71534],{"class":139},[129,71760,71761],{"class":131,"line":1215},[129,71762,71539],{"class":139},[129,71764,71765],{"class":131,"line":1229},[129,71766,2201],{"class":139},[129,71768,71769],{"class":131,"line":1235},[129,71770,71771],{"class":139},"    \u002F\u002F 1.存储复杂数据类型\n",[129,71773,71774],{"class":131,"line":1326},[129,71775,71776],{"class":139},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[129,71778,71779],{"class":131,"line":1332},[129,71780,71781],{"class":139},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[129,71783,71784],{"class":131,"line":1344},[129,71785,71786],{"class":139},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[129,71788,71789],{"class":131,"line":1626},[129,71790,71791],{"class":139},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[129,71793,71794],{"class":131,"line":1631},[129,71795,71796],{"class":139},"    \u002F\u002F 取\n",[129,71798,71799],{"class":131,"line":1637},[129,71800,71801],{"class":139},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[129,71803,71804],{"class":131,"line":1642},[129,71805,71806],{"class":139},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[129,71808,71809,71811,71813],{"class":131,"line":1656},[129,71810,52418],{"class":139},[129,71812,51814],{"class":51301},[129,71814,51308],{"class":139},[14,71816,71817],{},[40,71818],{"alt":42,"src":71819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[100,71821,71823],{"id":71822},"_356-数组map方法","3.5.6 数组map方法",[14,71825,71826],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71828,71829],{},[40,71830],{"alt":42,"src":71831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71833,71834],{},[40,71835],{"alt":42,"src":71836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71838,71839,71842],{},[289,71840,71841],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71844,71845],{},"map有返回值，但是forEach没有返回值",[14,71847,71848],{},"map是个方法。用的时候要加 ()",[14,71850,71851],{},"map返回的是一个数组",[100,71853,71855],{"id":71854},"_357-数组中join方法","3.5.7 数组中join方法",[14,71857,71858],{},[40,71859],{"alt":42,"src":71860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71862,71863],{},"类似于python中拼接字符串一样！",[83,71865,71866,71869,71872],{},[86,71867,71868],{},"小括号为空则逗号分开",[86,71870,71871],{},"小括号为空字符串 ''，则元素之间没有分隔符",[86,71873,71874],{},"小括号用啥符号就用进行分割",[100,71876,71878],{"id":71877},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[83,71880,71881,71884,71887,71890,71893],{},[86,71882,71883],{},"记住本地时间获取快速方式：new Date().toDateString()",[86,71885,71886],{},"尽量减少DOM操作，用好map+join的渲染方式",[86,71888,71889],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[86,71891,71892],{},"return可以实现函数的结束",[86,71894,71895],{},"禁止跳转是 preventDefault() 不要忘记",[120,71897,71899],{"className":50634,"code":71898,"language":50636,"meta":42,"style":42},"\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",[126,71900,71901,71911,71925,71929,71937,71951,71971,71983,71991,71997,72007,72017,72021,72025,72031,72041,72053,72057,72061,72068,72080,72094,72104,72108,72112,72119,72126,72133,72145,72157,72167,72179,72183,72187,72194,72201,72213,72225,72235,72247,72277,72281,72285,72292,72304,72316,72340,72350,72360,72364,72368,72376,72387,72399,72411,72423,72440,72452,72464,72468,72472,72479,72491,72503,72515,72526,72544,72557,72569,72593,72604,72608,72612,72620,72630,72634,72638,72644,72656,72667,72677,72681,72685,72691,72713,72717,72721,72727,72733,72745,72755,72767,72797,72810,72827,72831,72835,72846,72868,72878,72882,72886,72899,72909,72921,72933,72945,72957,72967,72977,72987,72998,73011,73015,73023,73031,73035,73043,73056,73076,73109,73142,73175,73201,73219,73237,73245,73271,73289,73307,73325,73343,73361,73369,73377,73395,73403,73432,73440,73448,73456,73469,73481,73493,73505,73517,73529,73542,73554,73562,73570,73578,73583,73588,73592,73596,73600,73604,73608,73612,73617,73622,73627,73632,73640,73648,73656,73661,73666,73671,73676,73681,73686,73691,73696,73701,73706,73711,73716,73721,73726,73730,73735,73740,73750,73759,73763,73768,73777,73793,73835,73875,73914,73979,73987,73991,73996,74014,74022,74027,74032,74062,74068,74073,74086,74098,74110,74122,74134,74146,74158,74162,74172,74176,74181,74186,74190,74199,74203,74208,74213,74232,74237,74257,74261,74266,74270,74275,74293,74311,74329,74348,74367,74386,74391,74397,74418,74424,74433,74439,74445,74451,74478,74491,74496,74506,74512,74518,74524,74530,74535,74541,74547,74553,74559,74592,74597,74602,74607,74612,74618,74624,74630,74641,74646,74652,74659,74673,74679,74703,74708,74713,74719,74725,74746,74752,74765,74771,74777,74783,74789,74794,74800,74806,74812,74830,74844,74850,74858,74864,74886,74891,74896,74901,74906,74911,74920,74929,74934],{"__ignoreMap":42},[129,71902,71903,71905,71907,71909],{"class":131,"line":132},[129,71904,51298],{"class":139},[129,71906,51302],{"class":51301},[129,71908,51305],{"class":1977},[129,71910,51308],{"class":139},[129,71912,71913,71915,71917,71919,71921,71923],{"class":131,"line":51},[129,71914,1049],{"class":139},[129,71916,50636],{"class":51301},[129,71918,51317],{"class":1977},[129,71920,185],{"class":139},[129,71922,51322],{"class":244},[129,71924,51308],{"class":139},[129,71926,71927],{"class":131,"line":1194},[129,71928,2414],{"emptyLinePlaceholder":56},[129,71930,71931,71933,71935],{"class":131,"line":1209},[129,71932,1049],{"class":139},[129,71934,51335],{"class":51301},[129,71936,51308],{"class":139},[129,71938,71939,71941,71943,71945,71947,71949],{"class":131,"line":1215},[129,71940,52145],{"class":139},[129,71942,51345],{"class":51301},[129,71944,51348],{"class":1977},[129,71946,185],{"class":139},[129,71948,51353],{"class":244},[129,71950,51308],{"class":139},[129,71952,71953,71955,71957,71959,71961,71963,71965,71967,71969],{"class":131,"line":1229},[129,71954,52145],{"class":139},[129,71956,51345],{"class":51301},[129,71958,14935],{"class":1977},[129,71960,185],{"class":139},[129,71962,51392],{"class":244},[129,71964,51372],{"class":1977},[129,71966,185],{"class":139},[129,71968,51399],{"class":244},[129,71970,51308],{"class":139},[129,71972,71973,71975,71977,71979,71981],{"class":131,"line":1235},[129,71974,52145],{"class":139},[129,71976,51408],{"class":51301},[129,71978,51411],{"class":139},[129,71980,51408],{"class":51301},[129,71982,51308],{"class":139},[129,71984,71985,71987,71989],{"class":131,"line":1326},[129,71986,52145],{"class":139},[129,71988,5141],{"class":51301},[129,71990,51308],{"class":139},[129,71992,71993,71995],{"class":131,"line":1332},[129,71994,6418],{"class":51301},[129,71996,15587],{"class":139},[129,71998,71999,72001,72003,72005],{"class":131,"line":1344},[129,72000,54696],{"class":188},[129,72002,51438],{"class":139},[129,72004,331],{"class":188},[129,72006,1305],{"class":139},[129,72008,72009,72011,72013,72015],{"class":131,"line":1626},[129,72010,54707],{"class":188},[129,72012,51438],{"class":139},[129,72014,331],{"class":188},[129,72016,1305],{"class":139},[129,72018,72019],{"class":131,"line":1631},[129,72020,2201],{"class":139},[129,72022,72023],{"class":131,"line":1637},[129,72024,2414],{"emptyLinePlaceholder":56},[129,72026,72027,72029],{"class":131,"line":1642},[129,72028,57280],{"class":51301},[129,72030,15587],{"class":139},[129,72032,72033,72035,72037,72039],{"class":131,"line":1656},[129,72034,57287],{"class":188},[129,72036,51438],{"class":139},[129,72038,51593],{"class":188},[129,72040,1305],{"class":139},[129,72042,72043,72045,72047,72049,72051],{"class":131,"line":1661},[129,72044,62078],{"class":188},[129,72046,51438],{"class":139},[129,72048,839],{"class":188},[129,72050,51493],{"class":135},[129,72052,1305],{"class":139},[129,72054,72055],{"class":131,"line":1667},[129,72056,2201],{"class":139},[129,72058,72059],{"class":131,"line":1688},[129,72060,2414],{"emptyLinePlaceholder":56},[129,72062,72063,72066],{"class":131,"line":1693},[129,72064,72065],{"class":1977},"    .info",[129,72067,15587],{"class":139},[129,72069,72070,72072,72074,72076,72078],{"class":131,"line":1707},[129,72071,54772],{"class":188},[129,72073,51438],{"class":139},[129,72075,51490],{"class":188},[129,72077,51493],{"class":135},[129,72079,1305],{"class":139},[129,72081,72082,72084,72086,72088,72090,72092],{"class":131,"line":1712},[129,72083,54707],{"class":188},[129,72085,51438],{"class":139},[129,72087,585],{"class":188},[129,72089,51493],{"class":135},[129,72091,51557],{"class":188},[129,72093,1305],{"class":139},[129,72095,72096,72098,72100,72102],{"class":131,"line":1741},[129,72097,57287],{"class":188},[129,72099,51438],{"class":139},[129,72101,51593],{"class":188},[129,72103,1305],{"class":139},[129,72105,72106],{"class":131,"line":1746},[129,72107,2201],{"class":139},[129,72109,72110],{"class":131,"line":1763},[129,72111,2414],{"emptyLinePlaceholder":56},[129,72113,72114,72117],{"class":131,"line":1768},[129,72115,72116],{"class":1977},"    .uname",[129,72118,31467],{"class":139},[129,72120,72121,72124],{"class":131,"line":1773},[129,72122,72123],{"class":1977},"    .age",[129,72125,31467],{"class":139},[129,72127,72128,72131],{"class":131,"line":1778},[129,72129,72130],{"class":1977},"    .salary",[129,72132,15587],{"class":139},[129,72134,72135,72137,72139,72141,72143],{"class":131,"line":1792},[129,72136,54772],{"class":188},[129,72138,51438],{"class":139},[129,72140,450],{"class":188},[129,72142,51493],{"class":135},[129,72144,1305],{"class":139},[129,72146,72147,72149,72151,72153,72155],{"class":131,"line":1797},[129,72148,54786],{"class":188},[129,72150,51438],{"class":139},[129,72152,839],{"class":188},[129,72154,51493],{"class":135},[129,72156,1305],{"class":139},[129,72158,72159,72161,72163,72165],{"class":131,"line":2591},[129,72160,61781],{"class":188},[129,72162,51438],{"class":139},[129,72164,54738],{"class":188},[129,72166,1305],{"class":139},[129,72168,72169,72171,72173,72175,72177],{"class":131,"line":2605},[129,72170,61751],{"class":188},[129,72172,51438],{"class":139},[129,72174,714],{"class":188},[129,72176,51493],{"class":135},[129,72178,1305],{"class":139},[129,72180,72181],{"class":131,"line":2613},[129,72182,2201],{"class":139},[129,72184,72185],{"class":131,"line":2618},[129,72186,2414],{"emptyLinePlaceholder":56},[129,72188,72189,72192],{"class":131,"line":2624},[129,72190,72191],{"class":1977},"    .gender",[129,72193,31467],{"class":139},[129,72195,72196,72199],{"class":131,"line":2630},[129,72197,72198],{"class":1977},"    .city",[129,72200,15587],{"class":139},[129,72202,72203,72205,72207,72209,72211],{"class":131,"line":2635},[129,72204,54772],{"class":188},[129,72206,51438],{"class":139},[129,72208,450],{"class":188},[129,72210,51493],{"class":135},[129,72212,1305],{"class":139},[129,72214,72215,72217,72219,72221,72223],{"class":131,"line":7963},[129,72216,54786],{"class":188},[129,72218,51438],{"class":139},[129,72220,964],{"class":188},[129,72222,51493],{"class":135},[129,72224,1305],{"class":139},[129,72226,72227,72229,72231,72233],{"class":131,"line":7987},[129,72228,61781],{"class":188},[129,72230,51438],{"class":139},[129,72232,54738],{"class":188},[129,72234,1305],{"class":139},[129,72236,72237,72239,72241,72243,72245],{"class":131,"line":7992},[129,72238,61751],{"class":188},[129,72240,51438],{"class":139},[129,72242,714],{"class":188},[129,72244,51493],{"class":135},[129,72246,1305],{"class":139},[129,72248,72249,72251,72253,72255,72257,72259,72262,72264,72266,72268,72271,72273,72275],{"class":131,"line":7998},[129,72250,61978],{"class":188},[129,72252,51438],{"class":139},[129,72254,357],{"class":188},[129,72256,51493],{"class":135},[129,72258,51522],{"class":188},[129,72260,72261],{"class":188}," rgb",[129,72263,140],{"class":139},[129,72265,1736],{"class":188},[129,72267,12450],{"class":139},[129,72269,72270],{"class":188},"197",[129,72272,12450],{"class":139},[129,72274,72270],{"class":188},[129,72276,2733],{"class":139},[129,72278,72279],{"class":131,"line":8025},[129,72280,2201],{"class":139},[129,72282,72283],{"class":131,"line":8030},[129,72284,2414],{"emptyLinePlaceholder":56},[129,72286,72287,72290],{"class":131,"line":8036},[129,72288,72289],{"class":51301},"    button",[129,72291,15587],{"class":139},[129,72293,72294,72296,72298,72300,72302],{"class":131,"line":8048},[129,72295,54786],{"class":188},[129,72297,51438],{"class":139},[129,72299,964],{"class":188},[129,72301,51493],{"class":135},[129,72303,1305],{"class":139},[129,72305,72306,72308,72310,72312,72314],{"class":131,"line":8060},[129,72307,54772],{"class":188},[129,72309,51438],{"class":139},[129,72311,623],{"class":188},[129,72313,51493],{"class":135},[129,72315,1305],{"class":139},[129,72317,72318,72320,72322,72325,72327,72329,72331,72334,72336,72338],{"class":131,"line":8072},[129,72319,54885],{"class":188},[129,72321,51438],{"class":139},[129,72323,72324],{"class":188},"rgb",[129,72326,140],{"class":139},[129,72328,1108],{"class":188},[129,72330,12450],{"class":139},[129,72332,72333],{"class":188},"187",[129,72335,12450],{"class":139},[129,72337,438],{"class":188},[129,72339,2733],{"class":139},[129,72341,72342,72344,72346,72348],{"class":131,"line":9731},[129,72343,57417],{"class":188},[129,72345,51438],{"class":139},[129,72347,60843],{"class":188},[129,72349,1305],{"class":139},[129,72351,72352,72354,72356,72358],{"class":131,"line":9756},[129,72353,61978],{"class":188},[129,72355,51438],{"class":139},[129,72357,331],{"class":188},[129,72359,1305],{"class":139},[129,72361,72362],{"class":131,"line":9779},[129,72363,2201],{"class":139},[129,72365,72366],{"class":131,"line":9803},[129,72367,2414],{"emptyLinePlaceholder":56},[129,72369,72370,72372,72374],{"class":131,"line":9808},[129,72371,72289],{"class":51301},[129,72373,51689],{"class":51301},[129,72375,15587],{"class":139},[129,72377,72378,72380,72382,72385],{"class":131,"line":9813},[129,72379,55010],{"class":188},[129,72381,51438],{"class":139},[129,72383,72384],{"class":188},"inline-block",[129,72386,1305],{"class":139},[129,72388,72389,72391,72393,72395,72397],{"class":131,"line":9818},[129,72390,54772],{"class":188},[129,72392,51438],{"class":139},[129,72394,585],{"class":188},[129,72396,51493],{"class":135},[129,72398,1305],{"class":139},[129,72400,72401,72403,72405,72407,72409],{"class":131,"line":9827},[129,72402,54786],{"class":188},[129,72404,51438],{"class":139},[129,72406,585],{"class":188},[129,72408,51493],{"class":135},[129,72410,1305],{"class":139},[129,72412,72413,72415,72417,72419,72421],{"class":131,"line":9832},[129,72414,57360],{"class":188},[129,72416,51438],{"class":139},[129,72418,611],{"class":188},[129,72420,51493],{"class":135},[129,72422,1305],{"class":139},[129,72424,72425,72427,72429,72431,72433,72435,72438],{"class":131,"line":9838},[129,72426,61978],{"class":188},[129,72428,51438],{"class":139},[129,72430,357],{"class":188},[129,72432,51493],{"class":135},[129,72434,51522],{"class":188},[129,72436,72437],{"class":188}," #fff",[129,72439,1305],{"class":139},[129,72441,72442,72444,72446,72448,72450],{"class":131,"line":9859},[129,72443,55135],{"class":188},[129,72445,51438],{"class":139},[129,72447,458],{"class":188},[129,72449,51493],{"class":135},[129,72451,1305],{"class":139},[129,72453,72454,72456,72458,72460,72462],{"class":131,"line":9865},[129,72455,61751],{"class":188},[129,72457,51438],{"class":139},[129,72459,357],{"class":188},[129,72461,51493],{"class":135},[129,72463,1305],{"class":139},[129,72465,72466],{"class":131,"line":9879},[129,72467,2201],{"class":139},[129,72469,72470],{"class":131,"line":9885},[129,72471,2414],{"emptyLinePlaceholder":56},[129,72473,72474,72477],{"class":131,"line":9912},[129,72475,72476],{"class":1977},"    .total",[129,72478,15587],{"class":139},[129,72480,72481,72483,72485,72487,72489],{"class":131,"line":9921},[129,72482,54772],{"class":188},[129,72484,51438],{"class":139},[129,72486,61630],{"class":188},[129,72488,51493],{"class":135},[129,72490,1305],{"class":139},[129,72492,72493,72495,72497,72499,72501],{"class":131,"line":9927},[129,72494,54786],{"class":188},[129,72496,51438],{"class":139},[129,72498,540],{"class":188},[129,72500,51493],{"class":135},[129,72502,1305],{"class":139},[129,72504,72505,72507,72509,72511,72513],{"class":131,"line":9935},[129,72506,57360],{"class":188},[129,72508,51438],{"class":139},[129,72510,540],{"class":188},[129,72512,51493],{"class":135},[129,72514,1305],{"class":139},[129,72516,72517,72519,72521,72524],{"class":131,"line":9940},[129,72518,57287],{"class":188},[129,72520,51438],{"class":139},[129,72522,72523],{"class":188},"right",[129,72525,1305],{"class":139},[129,72527,72528,72530,72532,72534,72536,72538,72540,72542],{"class":131,"line":16619},[129,72529,54707],{"class":188},[129,72531,51438],{"class":139},[129,72533,540],{"class":188},[129,72535,51493],{"class":135},[129,72537,51557],{"class":188},[129,72539,2052],{"class":188},[129,72541,51493],{"class":135},[129,72543,1305],{"class":139},[129,72545,72546,72549,72551,72553,72555],{"class":131,"line":16625},[129,72547,72548],{"class":188},"      padding-right",[129,72550,51438],{"class":139},[129,72552,585],{"class":188},[129,72554,51493],{"class":135},[129,72556,1305],{"class":139},[129,72558,72559,72561,72563,72565,72567],{"class":131,"line":16648},[129,72560,54923],{"class":188},[129,72562,51438],{"class":139},[129,72564,662],{"class":188},[129,72566,51493],{"class":135},[129,72568,1305],{"class":139},[129,72570,72571,72573,72575,72577,72579,72582,72584,72587,72589,72591],{"class":131,"line":16654},[129,72572,54885],{"class":188},[129,72574,51438],{"class":139},[129,72576,72324],{"class":188},[129,72578,140],{"class":139},[129,72580,72581],{"class":188},"237",[129,72583,12450],{"class":139},[129,72585,72586],{"class":188},"235",[129,72588,12450],{"class":139},[129,72590,72586],{"class":188},[129,72592,2733],{"class":139},[129,72594,72595,72598,72600,72602],{"class":131,"line":16677},[129,72596,72597],{"class":188},"      box-sizing",[129,72599,51438],{"class":139},[129,72601,60506],{"class":188},[129,72603,1305],{"class":139},[129,72605,72606],{"class":131,"line":16691},[129,72607,2201],{"class":139},[129,72609,72610],{"class":131,"line":16711},[129,72611,2414],{"emptyLinePlaceholder":56},[129,72613,72614,72616,72618],{"class":131,"line":16717},[129,72615,72476],{"class":1977},[129,72617,51689],{"class":51301},[129,72619,15587],{"class":139},[129,72621,72622,72624,72626,72628],{"class":131,"line":16728},[129,72623,57417],{"class":188},[129,72625,51438],{"class":139},[129,72627,57422],{"class":188},[129,72629,1305],{"class":139},[129,72631,72632],{"class":131,"line":16751},[129,72633,2201],{"class":139},[129,72635,72636],{"class":131,"line":16773},[129,72637,2414],{"emptyLinePlaceholder":56},[129,72639,72640,72642],{"class":131,"line":16778},[129,72641,65024],{"class":51301},[129,72643,15587],{"class":139},[129,72645,72646,72648,72650,72652,72654],{"class":131,"line":16784},[129,72647,54772],{"class":188},[129,72649,51438],{"class":139},[129,72651,61630],{"class":188},[129,72653,51493],{"class":135},[129,72655,1305],{"class":139},[129,72657,72658,72660,72662,72665],{"class":131,"line":16798},[129,72659,54707],{"class":188},[129,72661,51438],{"class":139},[129,72663,72664],{"class":188},"auto",[129,72666,1305],{"class":139},[129,72668,72669,72671,72673,72675],{"class":131,"line":16811},[129,72670,65031],{"class":188},[129,72672,51438],{"class":139},[129,72674,65036],{"class":188},[129,72676,1305],{"class":139},[129,72678,72679],{"class":131,"line":16816},[129,72680,2201],{"class":139},[129,72682,72683],{"class":131,"line":16830},[129,72684,2414],{"emptyLinePlaceholder":56},[129,72686,72687,72689],{"class":131,"line":16835},[129,72688,65116],{"class":51301},[129,72690,15587],{"class":139},[129,72692,72693,72695,72697,72699,72701,72703,72705,72707,72709,72711],{"class":131,"line":16841},[129,72694,54885],{"class":188},[129,72696,51438],{"class":139},[129,72698,72324],{"class":188},[129,72700,140],{"class":139},[129,72702,72581],{"class":188},[129,72704,12450],{"class":139},[129,72706,72586],{"class":188},[129,72708,12450],{"class":139},[129,72710,72586],{"class":188},[129,72712,2733],{"class":139},[129,72714,72715],{"class":131,"line":16846},[129,72716,2201],{"class":139},[129,72718,72719],{"class":131,"line":16860},[129,72720,2414],{"emptyLinePlaceholder":56},[129,72722,72723,72725],{"class":131,"line":16865},[129,72724,65116],{"class":51301},[129,72726,31467],{"class":139},[129,72728,72729,72731],{"class":131,"line":16870},[129,72730,65182],{"class":51301},[129,72732,15587],{"class":139},[129,72734,72735,72737,72739,72741,72743],{"class":131,"line":16884},[129,72736,54786],{"class":188},[129,72738,51438],{"class":139},[129,72740,412],{"class":188},[129,72742,51493],{"class":135},[129,72744,1305],{"class":139},[129,72746,72747,72749,72751,72753],{"class":131,"line":16896},[129,72748,57287],{"class":188},[129,72750,51438],{"class":139},[129,72752,23751],{"class":188},[129,72754,1305],{"class":139},[129,72756,72757,72759,72761,72763,72765],{"class":131,"line":16901},[129,72758,54923],{"class":188},[129,72760,51438],{"class":139},[129,72762,688],{"class":188},[129,72764,51493],{"class":135},[129,72766,1305],{"class":139},[129,72768,72769,72771,72773,72775,72777,72779,72781,72783,72786,72788,72791,72793,72795],{"class":131,"line":16914},[129,72770,61978],{"class":188},[129,72772,51438],{"class":139},[129,72774,357],{"class":188},[129,72776,51493],{"class":135},[129,72778,51522],{"class":188},[129,72780,72261],{"class":188},[129,72782,140],{"class":139},[129,72784,72785],{"class":188},"228",[129,72787,12450],{"class":139},[129,72789,72790],{"class":188},"225",[129,72792,12450],{"class":139},[129,72794,72790],{"class":188},[129,72796,2733],{"class":139},[129,72798,72799,72802,72804,72806,72808],{"class":131,"line":16919},[129,72800,72801],{"class":188},"      padding-left",[129,72803,51438],{"class":139},[129,72805,458],{"class":188},[129,72807,51493],{"class":135},[129,72809,1305],{"class":139},[129,72811,72812,72814,72816,72818,72821,72823,72825],{"class":131,"line":16924},[129,72813,61861],{"class":188},[129,72815,51438],{"class":139},[129,72817,28122],{"class":188},[129,72819,72820],{"class":188}," linear",[129,72822,61868],{"class":188},[129,72824,834],{"class":135},[129,72826,1305],{"class":139},[129,72828,72829],{"class":131,"line":16929},[129,72830,2201],{"class":139},[129,72832,72833],{"class":131,"line":16942},[129,72834,2414],{"emptyLinePlaceholder":56},[129,72836,72837,72840,72842,72844],{"class":131,"line":16947},[129,72838,72839],{"class":51301},"    tbody",[129,72841,70145],{"class":51301},[129,72843,60941],{"class":1977},[129,72845,15587],{"class":139},[129,72847,72848,72850,72852,72854,72856,72858,72860,72862,72864,72866],{"class":131,"line":32634},[129,72849,54885],{"class":188},[129,72851,51438],{"class":139},[129,72853,72324],{"class":188},[129,72855,140],{"class":139},[129,72857,72581],{"class":188},[129,72859,12450],{"class":139},[129,72861,72586],{"class":188},[129,72863,12450],{"class":139},[129,72865,72586],{"class":188},[129,72867,2733],{"class":139},[129,72869,72870,72872,72874,72876],{"class":131,"line":32640},[129,72871,62026],{"class":188},[129,72873,51438],{"class":139},[129,72875,62031],{"class":188},[129,72877,1305],{"class":139},[129,72879,72880],{"class":131,"line":32646},[129,72881,2201],{"class":139},[129,72883,72884],{"class":131,"line":32652},[129,72885,2414],{"emptyLinePlaceholder":56},[129,72887,72888,72890,72892,72895,72897],{"class":131,"line":32658},[129,72889,72839],{"class":51301},[129,72891,70145],{"class":51301},[129,72893,72894],{"class":51301}," td",[129,72896,1413],{"class":51301},[129,72898,15587],{"class":139},[129,72900,72901,72903,72905,72907],{"class":131,"line":32669},[129,72902,55010],{"class":188},[129,72904,51438],{"class":139},[129,72906,60870],{"class":188},[129,72908,1305],{"class":139},[129,72910,72911,72913,72915,72917,72919],{"class":131,"line":32675},[129,72912,54772],{"class":188},[129,72914,51438],{"class":139},[129,72916,1046],{"class":188},[129,72918,51493],{"class":135},[129,72920,1305],{"class":139},[129,72922,72923,72925,72927,72929,72931],{"class":131,"line":32695},[129,72924,54786],{"class":188},[129,72926,51438],{"class":139},[129,72928,964],{"class":188},[129,72930,51493],{"class":135},[129,72932,1305],{"class":139},[129,72934,72935,72937,72939,72941,72943],{"class":131,"line":32701},[129,72936,57360],{"class":188},[129,72938,51438],{"class":139},[129,72940,964],{"class":188},[129,72942,51493],{"class":135},[129,72944,1305],{"class":139},[129,72946,72947,72949,72951,72953,72955],{"class":131,"line":32712},[129,72948,62078],{"class":188},[129,72950,51438],{"class":139},[129,72952,217],{"class":188},[129,72954,51493],{"class":135},[129,72956,1305],{"class":139},[129,72958,72959,72961,72963,72965],{"class":131,"line":32718},[129,72960,57417],{"class":188},[129,72962,51438],{"class":139},[129,72964,60843],{"class":188},[129,72966,1305],{"class":139},[129,72968,72969,72971,72973,72975],{"class":131,"line":32724},[129,72970,57287],{"class":188},[129,72972,51438],{"class":139},[129,72974,51593],{"class":188},[129,72976,1305],{"class":139},[129,72978,72979,72981,72983,72985],{"class":131,"line":32730},[129,72980,63971],{"class":188},[129,72982,51438],{"class":139},[129,72984,54738],{"class":188},[129,72986,1305],{"class":139},[129,72988,72989,72991,72993,72996],{"class":131,"line":32736},[129,72990,54885],{"class":188},[129,72992,51438],{"class":139},[129,72994,72995],{"class":188},"orange",[129,72997,1305],{"class":139},[129,72999,73000,73002,73004,73007,73009],{"class":131,"line":32742},[129,73001,55135],{"class":188},[129,73003,51438],{"class":139},[129,73005,73006],{"class":188},"12.5",[129,73008,51493],{"class":135},[129,73010,1305],{"class":139},[129,73012,73013],{"class":131,"line":32748},[129,73014,2201],{"class":139},[129,73016,73017,73019,73021],{"class":131,"line":32754},[129,73018,52418],{"class":139},[129,73020,5141],{"class":51301},[129,73022,51308],{"class":139},[129,73024,73025,73027,73029],{"class":131,"line":32774},[129,73026,51786],{"class":139},[129,73028,51335],{"class":51301},[129,73030,51308],{"class":139},[129,73032,73033],{"class":131,"line":32780},[129,73034,2414],{"emptyLinePlaceholder":56},[129,73036,73037,73039,73041],{"class":131,"line":32796},[129,73038,1049],{"class":139},[129,73040,51801],{"class":51301},[129,73042,51308],{"class":139},[129,73044,73045,73047,73049,73052,73054],{"class":131,"line":32802},[129,73046,52145],{"class":139},[129,73048,71],{"class":51301},[129,73050,73051],{"class":139},">学生就业统计表\u003C\u002F",[129,73053,71],{"class":51301},[129,73055,51308],{"class":139},[129,73057,73058,73060,73062,73064,73066,73068,73070,73072,73074],{"class":131,"line":32816},[129,73059,52145],{"class":139},[129,73061,66626],{"class":51301},[129,73063,53487],{"class":1977},[129,73065,185],{"class":139},[129,73067,62665],{"class":244},[129,73069,69071],{"class":1977},[129,73071,185],{"class":139},[129,73073,31777],{"class":244},[129,73075,51308],{"class":139},[129,73077,73078,73080,73082,73084,73086,73088,73090,73092,73094,73096,73098,73101,73103,73105,73107],{"class":131,"line":32822},[129,73079,51342],{"class":139},[129,73081,53822],{"class":51301},[129,73083,53825],{"class":1977},[129,73085,185],{"class":139},[129,73087,62700],{"class":244},[129,73089,14935],{"class":1977},[129,73091,185],{"class":139},[129,73093,69097],{"class":244},[129,73095,61021],{"class":1977},[129,73097,185],{"class":139},[129,73099,73100],{"class":244},"\"姓名\"",[129,73102,53487],{"class":1977},[129,73104,185],{"class":139},[129,73106,69097],{"class":244},[129,73108,51308],{"class":139},[129,73110,73111,73113,73115,73117,73119,73121,73123,73125,73127,73129,73131,73134,73136,73138,73140],{"class":131,"line":32837},[129,73112,51342],{"class":139},[129,73114,53822],{"class":51301},[129,73116,53825],{"class":1977},[129,73118,185],{"class":139},[129,73120,62700],{"class":244},[129,73122,14935],{"class":1977},[129,73124,185],{"class":139},[129,73126,69125],{"class":244},[129,73128,61021],{"class":1977},[129,73130,185],{"class":139},[129,73132,73133],{"class":244},"\"年龄\"",[129,73135,53487],{"class":1977},[129,73137,185],{"class":139},[129,73139,69125],{"class":244},[129,73141,51308],{"class":139},[129,73143,73144,73146,73148,73150,73152,73154,73156,73158,73160,73162,73164,73167,73169,73171,73173],{"class":131,"line":32843},[129,73145,51342],{"class":139},[129,73147,53822],{"class":51301},[129,73149,53825],{"class":1977},[129,73151,185],{"class":139},[129,73153,62700],{"class":244},[129,73155,14935],{"class":1977},[129,73157,185],{"class":139},[129,73159,69227],{"class":244},[129,73161,61021],{"class":1977},[129,73163,185],{"class":139},[129,73165,73166],{"class":244},"\"薪资\"",[129,73168,53487],{"class":1977},[129,73170,185],{"class":139},[129,73172,69227],{"class":244},[129,73174,51308],{"class":139},[129,73176,73177,73179,73181,73183,73185,73187,73189,73191,73193,73195,73197,73199],{"class":131,"line":32852},[129,73178,51342],{"class":139},[129,73180,69145],{"class":51301},[129,73182,14935],{"class":1977},[129,73184,185],{"class":139},[129,73186,69152],{"class":244},[129,73188,14974],{"class":1977},[129,73190,185],{"class":139},[129,73192,7667],{"class":244},[129,73194,53487],{"class":1977},[129,73196,185],{"class":139},[129,73198,69152],{"class":244},[129,73200,51308],{"class":139},[129,73202,73203,73205,73207,73209,73211,73213,73215,73217],{"class":131,"line":32858},[129,73204,55235],{"class":139},[129,73206,69167],{"class":51301},[129,73208,66652],{"class":1977},[129,73210,185],{"class":139},[129,73212,9976],{"class":244},[129,73214,69176],{"class":139},[129,73216,69167],{"class":51301},[129,73218,51308],{"class":139},[129,73220,73221,73223,73225,73227,73229,73231,73233,73235],{"class":131,"line":32867},[129,73222,55235],{"class":139},[129,73224,69167],{"class":51301},[129,73226,66652],{"class":1977},[129,73228,185],{"class":139},[129,73230,10045],{"class":244},[129,73232,69195],{"class":139},[129,73234,69167],{"class":51301},[129,73236,51308],{"class":139},[129,73238,73239,73241,73243],{"class":131,"line":32873},[129,73240,51777],{"class":139},[129,73242,69145],{"class":51301},[129,73244,51308],{"class":139},[129,73246,73247,73249,73251,73253,73255,73257,73259,73261,73263,73265,73267,73269],{"class":131,"line":32879},[129,73248,51342],{"class":139},[129,73250,69145],{"class":51301},[129,73252,14935],{"class":1977},[129,73254,185],{"class":139},[129,73256,69249],{"class":244},[129,73258,14974],{"class":1977},[129,73260,185],{"class":139},[129,73262,7667],{"class":244},[129,73264,53487],{"class":1977},[129,73266,185],{"class":139},[129,73268,69249],{"class":244},[129,73270,51308],{"class":139},[129,73272,73273,73275,73277,73279,73281,73283,73285,73287],{"class":131,"line":32888},[129,73274,55235],{"class":139},[129,73276,69167],{"class":51301},[129,73278,66652],{"class":1977},[129,73280,185],{"class":139},[129,73282,69270],{"class":244},[129,73284,69273],{"class":139},[129,73286,69167],{"class":51301},[129,73288,51308],{"class":139},[129,73290,73291,73293,73295,73297,73299,73301,73303,73305],{"class":131,"line":32894},[129,73292,55235],{"class":139},[129,73294,69167],{"class":51301},[129,73296,66652],{"class":1977},[129,73298,185],{"class":139},[129,73300,69290],{"class":244},[129,73302,69293],{"class":139},[129,73304,69167],{"class":51301},[129,73306,51308],{"class":139},[129,73308,73309,73311,73313,73315,73317,73319,73321,73323],{"class":131,"line":32905},[129,73310,55235],{"class":139},[129,73312,69167],{"class":51301},[129,73314,66652],{"class":1977},[129,73316,185],{"class":139},[129,73318,69310],{"class":244},[129,73320,69313],{"class":139},[129,73322,69167],{"class":51301},[129,73324,51308],{"class":139},[129,73326,73327,73329,73331,73333,73335,73337,73339,73341],{"class":131,"line":32911},[129,73328,55235],{"class":139},[129,73330,69167],{"class":51301},[129,73332,66652],{"class":1977},[129,73334,185],{"class":139},[129,73336,69330],{"class":244},[129,73338,69333],{"class":139},[129,73340,69167],{"class":51301},[129,73342,51308],{"class":139},[129,73344,73345,73347,73349,73351,73353,73355,73357,73359],{"class":131,"line":32930},[129,73346,55235],{"class":139},[129,73348,69167],{"class":51301},[129,73350,66652],{"class":1977},[129,73352,185],{"class":139},[129,73354,69350],{"class":244},[129,73356,69353],{"class":139},[129,73358,69167],{"class":51301},[129,73360,51308],{"class":139},[129,73362,73363,73365,73367],{"class":131,"line":32936},[129,73364,51777],{"class":139},[129,73366,69145],{"class":51301},[129,73368,51308],{"class":139},[129,73370,73371,73373,73375],{"class":131,"line":32947},[129,73372,51342],{"class":139},[129,73374,53888],{"class":51301},[129,73376,51308],{"class":139},[129,73378,73379,73381,73383,73386,73388,73391,73393],{"class":131,"line":32953},[129,73380,55235],{"class":139},[129,73382,129],{"class":51301},[129,73384,73385],{"class":139},">+\u003C\u002F",[129,73387,129],{"class":51301},[129,73389,73390],{"class":139},">添加\u003C\u002F",[129,73392,53888],{"class":51301},[129,73394,51308],{"class":139},[129,73396,73397,73399,73401],{"class":131,"line":32973},[129,73398,52418],{"class":139},[129,73400,66626],{"class":51301},[129,73402,51308],{"class":139},[129,73404,73405,73407,73409,73411,73413,73415,73418,73420,73423,73425,73428,73430],{"class":131,"line":32989},[129,73406,52145],{"class":139},[129,73408,51612],{"class":51301},[129,73410,53487],{"class":1977},[129,73412,185],{"class":139},[129,73414,62581],{"class":244},[129,73416,73417],{"class":139},">共有数据 \u003C",[129,73419,129],{"class":51301},[129,73421,73422],{"class":139},">0\u003C\u002F",[129,73424,129],{"class":51301},[129,73426,73427],{"class":139},"> 条\u003C\u002F",[129,73429,51612],{"class":51301},[129,73431,51308],{"class":139},[129,73433,73434,73436,73438],{"class":131,"line":32995},[129,73435,52145],{"class":139},[129,73437,277],{"class":51301},[129,73439,51308],{"class":139},[129,73441,73442,73444,73446],{"class":131,"line":33009},[129,73443,51342],{"class":139},[129,73445,280],{"class":51301},[129,73447,51308],{"class":139},[129,73449,73450,73452,73454],{"class":131,"line":33015},[129,73451,55235],{"class":139},[129,73453,283],{"class":51301},[129,73455,51308],{"class":139},[129,73457,73458,73460,73462,73465,73467],{"class":131,"line":33021},[129,73459,55303],{"class":139},[129,73461,286],{"class":51301},[129,73463,73464],{"class":139},">ID\u003C\u002F",[129,73466,286],{"class":51301},[129,73468,51308],{"class":139},[129,73470,73471,73473,73475,73477,73479],{"class":131,"line":33032},[129,73472,55303],{"class":139},[129,73474,286],{"class":51301},[129,73476,69456],{"class":139},[129,73478,286],{"class":51301},[129,73480,51308],{"class":139},[129,73482,73483,73485,73487,73489,73491],{"class":131,"line":33038},[129,73484,55303],{"class":139},[129,73486,286],{"class":51301},[129,73488,69469],{"class":139},[129,73490,286],{"class":51301},[129,73492,51308],{"class":139},[129,73494,73495,73497,73499,73501,73503],{"class":131,"line":33044},[129,73496,55303],{"class":139},[129,73498,286],{"class":51301},[129,73500,69482],{"class":139},[129,73502,286],{"class":51301},[129,73504,51308],{"class":139},[129,73506,73507,73509,73511,73513,73515],{"class":131,"line":33054},[129,73508,55303],{"class":139},[129,73510,286],{"class":51301},[129,73512,69495],{"class":139},[129,73514,286],{"class":51301},[129,73516,51308],{"class":139},[129,73518,73519,73521,73523,73525,73527],{"class":131,"line":33060},[129,73520,55303],{"class":139},[129,73522,286],{"class":51301},[129,73524,69508],{"class":139},[129,73526,286],{"class":51301},[129,73528,51308],{"class":139},[129,73530,73531,73533,73535,73538,73540],{"class":131,"line":33071},[129,73532,55303],{"class":139},[129,73534,286],{"class":51301},[129,73536,73537],{"class":139},">录入时间\u003C\u002F",[129,73539,286],{"class":51301},[129,73541,51308],{"class":139},[129,73543,73544,73546,73548,73550,73552],{"class":131,"line":33077},[129,73545,55303],{"class":139},[129,73547,286],{"class":51301},[129,73549,69521],{"class":139},[129,73551,286],{"class":51301},[129,73553,51308],{"class":139},[129,73555,73556,73558,73560],{"class":131,"line":33087},[129,73557,55408],{"class":139},[129,73559,283],{"class":51301},[129,73561,51308],{"class":139},[129,73563,73564,73566,73568],{"class":131,"line":33092},[129,73565,51777],{"class":139},[129,73567,280],{"class":51301},[129,73569,51308],{"class":139},[129,73571,73572,73574,73576],{"class":131,"line":33098},[129,73573,51342],{"class":139},[129,73575,324],{"class":51301},[129,73577,51308],{"class":139},[129,73579,73580],{"class":131,"line":33147},[129,73581,73582],{"class":198},"      \u003C!-- \u003Ctr>\n",[129,73584,73585],{"class":131,"line":33194},[129,73586,73587],{"class":198},"        \u003Ctd>1\u003C\u002Ftd>\n",[129,73589,73590],{"class":131,"line":33199},[129,73591,73587],{"class":198},[129,73593,73594],{"class":131,"line":33205},[129,73595,73587],{"class":198},[129,73597,73598],{"class":131,"line":33224},[129,73599,73587],{"class":198},[129,73601,73602],{"class":131,"line":33230},[129,73603,73587],{"class":198},[129,73605,73606],{"class":131,"line":33250},[129,73607,73587],{"class":198},[129,73609,73610],{"class":131,"line":33256},[129,73611,73587],{"class":198},[129,73613,73614],{"class":131,"line":33262},[129,73615,73616],{"class":198},"        \u003Ctd>\n",[129,73618,73619],{"class":131,"line":33272},[129,73620,73621],{"class":198},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[129,73623,73624],{"class":131,"line":33277},[129,73625,73626],{"class":198},"        \u003C\u002Ftd>\n",[129,73628,73629],{"class":131,"line":33283},[129,73630,73631],{"class":198},"      \u003C\u002Ftr> -->\n",[129,73633,73634,73636,73638],{"class":131,"line":33299},[129,73635,51777],{"class":139},[129,73637,324],{"class":51301},[129,73639,51308],{"class":139},[129,73641,73642,73644,73646],{"class":131,"line":33344},[129,73643,52418],{"class":139},[129,73645,277],{"class":51301},[129,73647,51308],{"class":139},[129,73649,73650,73652,73654],{"class":131,"line":33350},[129,73651,52145],{"class":139},[129,73653,51814],{"class":51301},[129,73655,51308],{"class":139},[129,73657,73658],{"class":131,"line":33356},[129,73659,73660],{"class":198},"    \u002F\u002F const initData = [{\n",[129,73662,73663],{"class":131,"line":33362},[129,73664,73665],{"class":198},"    \u002F\u002F   unameId: 1,\n",[129,73667,73668],{"class":131,"line":33373},[129,73669,73670],{"class":198},"    \u002F\u002F   uname: '华晨宇',\n",[129,73672,73673],{"class":131,"line":33379},[129,73674,73675],{"class":198},"    \u002F\u002F   age: 22,\n",[129,73677,73678],{"class":131,"line":33385},[129,73679,73680],{"class":198},"    \u002F\u002F   salary: 12000,\n",[129,73682,73683],{"class":131,"line":33391},[129,73684,73685],{"class":198},"    \u002F\u002F   gender: '男',\n",[129,73687,73688],{"class":131,"line":33409},[129,73689,73690],{"class":198},"    \u002F\u002F   city: '北京',\n",[129,73692,73693],{"class":131,"line":33423},[129,73694,73695],{"class":198},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[129,73697,73698],{"class":131,"line":33432},[129,73699,73700],{"class":198},"    \u002F\u002F }]\n",[129,73702,73703],{"class":131,"line":33441},[129,73704,73705],{"class":198},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[129,73707,73708],{"class":131,"line":33450},[129,73709,73710],{"class":198},"    \u002F\u002F 1.渲染业务\n",[129,73712,73713],{"class":131,"line":33459},[129,73714,73715],{"class":198},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[129,73717,73718],{"class":131,"line":33465},[129,73719,73720],{"class":198},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[129,73722,73723],{"class":131,"line":33471},[129,73724,73725],{"class":198},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[129,73727,73728],{"class":131,"line":33479},[129,73729,2414],{"emptyLinePlaceholder":56},[129,73731,73732],{"class":131,"line":33484},[129,73733,73734],{"class":198},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[129,73736,73737],{"class":131,"line":33490},[129,73738,73739],{"class":198},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[129,73741,73742,73744,73746,73748],{"class":131,"line":33501},[129,73743,11236],{"class":135},[129,73745,57696],{"class":188},[129,73747,13579],{"class":135},[129,73749,51839],{"class":139},[129,73751,73752,73755,73757],{"class":131,"line":33507},[129,73753,73754],{"class":139},"    console.",[129,73756,58248],{"class":1977},[129,73758,52413],{"class":139},[129,73760,73761],{"class":131,"line":33527},[129,73762,2414],{"emptyLinePlaceholder":56},[129,73764,73765],{"class":131,"line":33533},[129,73766,73767],{"class":198},"    \u002F\u002F 时间函数\n",[129,73769,73770,73772,73775],{"class":131,"line":33539},[129,73771,70085],{"class":135},[129,73773,73774],{"class":1977}," getTime",[129,73776,10868],{"class":139},[129,73778,73779,73781,73784,73786,73788,73791],{"class":131,"line":33545},[129,73780,58229],{"class":135},[129,73782,73783],{"class":188}," date",[129,73785,13579],{"class":135},[129,73787,11593],{"class":135},[129,73789,73790],{"class":1977}," Date",[129,73792,1990],{"class":139},[129,73794,73795,73797,73799,73801,73804,73807,73809,73811,73813,73816,73819,73821,73823,73825,73827,73829,73831,73833],{"class":131,"line":33562},[129,73796,58229],{"class":135},[129,73798,16106],{"class":188},[129,73800,13579],{"class":135},[129,73802,73803],{"class":139}," date.",[129,73805,73806],{"class":1977},"getHours",[129,73808,13065],{"class":139},[129,73810,1049],{"class":135},[129,73812,2052],{"class":188},[129,73814,73815],{"class":135}," ?",[129,73817,73818],{"class":244}," '0'",[129,73820,45567],{"class":135},[129,73822,73803],{"class":139},[129,73824,73806],{"class":1977},[129,73826,13065],{"class":139},[129,73828,998],{"class":135},[129,73830,73803],{"class":139},[129,73832,73806],{"class":1977},[129,73834,1990],{"class":139},[129,73836,73837,73839,73842,73844,73846,73849,73851,73853,73855,73857,73859,73861,73863,73865,73867,73869,73871,73873],{"class":131,"line":33568},[129,73838,58229],{"class":135},[129,73840,73841],{"class":188}," m",[129,73843,13579],{"class":135},[129,73845,73803],{"class":139},[129,73847,73848],{"class":1977},"getMinutes",[129,73850,13065],{"class":139},[129,73852,1049],{"class":135},[129,73854,2052],{"class":188},[129,73856,73815],{"class":135},[129,73858,73818],{"class":244},[129,73860,45567],{"class":135},[129,73862,73803],{"class":139},[129,73864,73848],{"class":1977},[129,73866,13065],{"class":139},[129,73868,998],{"class":135},[129,73870,73803],{"class":139},[129,73872,73848],{"class":1977},[129,73874,1990],{"class":139},[129,73876,73877,73879,73881,73883,73885,73888,73890,73892,73894,73896,73898,73900,73902,73904,73906,73908,73910,73912],{"class":131,"line":33574},[129,73878,58229],{"class":135},[129,73880,8443],{"class":188},[129,73882,13579],{"class":135},[129,73884,73803],{"class":139},[129,73886,73887],{"class":1977},"getSeconds",[129,73889,13065],{"class":139},[129,73891,1049],{"class":135},[129,73893,2052],{"class":188},[129,73895,73815],{"class":135},[129,73897,73818],{"class":244},[129,73899,45567],{"class":135},[129,73901,73803],{"class":139},[129,73903,73887],{"class":1977},[129,73905,13065],{"class":139},[129,73907,998],{"class":135},[129,73909,73803],{"class":139},[129,73911,73887],{"class":1977},[129,73913,1990],{"class":139},[129,73915,73916,73918,73921,73923,73925,73928,73930,73933,73935,73938,73940,73942,73945,73947,73949,73951,73953,73955,73957,73960,73962,73965,73967,73970,73972,73974,73976],{"class":131,"line":33580},[129,73917,58229],{"class":135},[129,73919,73920],{"class":188}," str",[129,73922,13579],{"class":135},[129,73924,62904],{"class":244},[129,73926,73927],{"class":139},"date",[129,73929,697],{"class":244},[129,73931,73932],{"class":1977},"getFullYear",[129,73934,2441],{"class":244},[129,73936,73937],{"class":244},"}\u002F${",[129,73939,73927],{"class":139},[129,73941,697],{"class":244},[129,73943,73944],{"class":1977},"getMonth",[129,73946,13065],{"class":244},[129,73948,620],{"class":135},[129,73950,25119],{"class":188},[129,73952,73937],{"class":244},[129,73954,73927],{"class":139},[129,73956,697],{"class":244},[129,73958,73959],{"class":1977},"getDate",[129,73961,2441],{"class":244},[129,73963,73964],{"class":244},"} ${",[129,73966,554],{"class":139},[129,73968,73969],{"class":244},"}:${",[129,73971,683],{"class":139},[129,73973,73969],{"class":244},[129,73975,834],{"class":139},[129,73977,73978],{"class":244},"}`\n",[129,73980,73981,73984],{"class":131,"line":33586},[129,73982,73983],{"class":135},"      return",[129,73985,73986],{"class":139}," str\n",[129,73988,73989],{"class":131,"line":33592},[129,73990,2201],{"class":139},[129,73992,73993],{"class":131,"line":33619},[129,73994,73995],{"class":198},"    \u002F\u002F 渲染函数\n",[129,73997,73998,74000,74002,74004,74006,74008,74010,74012],{"class":131,"line":33643},[129,73999,11236],{"class":135},[129,74001,69748],{"class":188},[129,74003,13579],{"class":135},[129,74005,54397],{"class":139},[129,74007,54400],{"class":1977},[129,74009,140],{"class":139},[129,74011,69759],{"class":244},[129,74013,146],{"class":139},[129,74015,74016,74018,74020],{"class":131,"line":33649},[129,74017,70085],{"class":135},[129,74019,70088],{"class":1977},[129,74021,10868],{"class":139},[129,74023,74024],{"class":131,"line":33655},[129,74025,74026],{"class":198},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[129,74028,74029],{"class":131,"line":33661},[129,74030,74031],{"class":198},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[129,74033,74034,74036,74039,74041,74043,74046,74048,74050,74052,74055,74057,74060],{"class":131,"line":33672},[129,74035,58229],{"class":135},[129,74037,74038],{"class":188}," trArr",[129,74040,13579],{"class":135},[129,74042,51966],{"class":139},[129,74044,74045],{"class":1977},"map",[129,74047,140],{"class":139},[129,74049,54450],{"class":135},[129,74051,1672],{"class":139},[129,74053,74054],{"class":5231},"ele",[129,74056,12450],{"class":139},[129,74058,74059],{"class":5231},"index",[129,74061,12457],{"class":139},[129,74063,74064,74066],{"class":131,"line":33683},[129,74065,14767],{"class":135},[129,74067,70169],{"class":244},[129,74069,74070],{"class":131,"line":33689},[129,74071,74072],{"class":244},"      \u003Ctr>\n",[129,74074,74075,74077,74079,74081,74084],{"class":131,"line":33706},[129,74076,70174],{"class":244},[129,74078,74054],{"class":139},[129,74080,697],{"class":244},[129,74082,74083],{"class":139},"unameId",[129,74085,70189],{"class":244},[129,74087,74088,74090,74092,74094,74096],{"class":131,"line":33729},[129,74089,70174],{"class":244},[129,74091,74054],{"class":139},[129,74093,697],{"class":244},[129,74095,70205],{"class":139},[129,74097,70189],{"class":244},[129,74099,74100,74102,74104,74106,74108],{"class":131,"line":33752},[129,74101,70174],{"class":244},[129,74103,74054],{"class":139},[129,74105,697],{"class":244},[129,74107,70222],{"class":139},[129,74109,70189],{"class":244},[129,74111,74112,74114,74116,74118,74120],{"class":131,"line":33758},[129,74113,70174],{"class":244},[129,74115,74054],{"class":139},[129,74117,697],{"class":244},[129,74119,70239],{"class":139},[129,74121,70189],{"class":244},[129,74123,74124,74126,74128,74130,74132],{"class":131,"line":33763},[129,74125,70174],{"class":244},[129,74127,74054],{"class":139},[129,74129,697],{"class":244},[129,74131,70256],{"class":139},[129,74133,70189],{"class":244},[129,74135,74136,74138,74140,74142,74144],{"class":131,"line":33772},[129,74137,70174],{"class":244},[129,74139,74054],{"class":139},[129,74141,697],{"class":244},[129,74143,70273],{"class":139},[129,74145,70189],{"class":244},[129,74147,74148,74150,74152,74154,74156],{"class":131,"line":33782},[129,74149,70174],{"class":244},[129,74151,74054],{"class":139},[129,74153,697],{"class":244},[129,74155,2401],{"class":139},[129,74157,70189],{"class":244},[129,74159,74160],{"class":131,"line":33788},[129,74161,73616],{"class":244},[129,74163,74164,74167,74169],{"class":131,"line":33793},[129,74165,74166],{"class":244},"          \u003Ca href=\"#\" data-id=\"${",[129,74168,74059],{"class":139},[129,74170,74171],{"class":244},"}\">删除\u003C\u002Fa>\n",[129,74173,74174],{"class":131,"line":33799},[129,74175,73626],{"class":244},[129,74177,74178],{"class":131,"line":33812},[129,74179,74180],{"class":244},"      \u003C\u002Ftr>\n",[129,74182,74183],{"class":131,"line":33818},[129,74184,74185],{"class":244},"  `\n",[129,74187,74188],{"class":131,"line":33829},[129,74189,64816],{"class":139},[129,74191,74192,74194,74196],{"class":131,"line":33840},[129,74193,58245],{"class":139},[129,74195,58248],{"class":1977},[129,74197,74198],{"class":139},"(trArr)\n",[129,74200,74201],{"class":131,"line":33859},[129,74202,2414],{"emptyLinePlaceholder":56},[129,74204,74205],{"class":131,"line":49519},[129,74206,74207],{"class":198},"      \u002F\u002F (2) 把数组转换为字符串join\n",[129,74209,74210],{"class":131,"line":49524},[129,74211,74212],{"class":198},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[129,74214,74215,74217,74219,74222,74225,74227,74230],{"class":131,"line":49533},[129,74216,70100],{"class":139},[129,74218,185],{"class":135},[129,74220,74221],{"class":139}," trArr.",[129,74223,74224],{"class":1977},"join",[129,74226,140],{"class":139},[129,74228,74229],{"class":244},"''",[129,74231,146],{"class":139},[129,74233,74234],{"class":131,"line":49542},[129,74235,74236],{"class":198},"      \u002F\u002F 显示共有几条\n",[129,74238,74239,74241,74243,74245,74248,74251,74253,74255],{"class":131,"line":49547},[129,74240,55772],{"class":139},[129,74242,54400],{"class":1977},[129,74244,140],{"class":139},[129,74246,74247],{"class":244},"'.total span'",[129,74249,74250],{"class":139},").innerHTML ",[129,74252,185],{"class":135},[129,74254,51966],{"class":139},[129,74256,55832],{"class":188},[129,74258,74259],{"class":131,"line":49552},[129,74260,2201],{"class":139},[129,74262,74263],{"class":131,"line":49557},[129,74264,74265],{"class":198},"    \u002F\u002F render()\n",[129,74267,74268],{"class":131,"line":49570},[129,74269,2414],{"emptyLinePlaceholder":56},[129,74271,74272],{"class":131,"line":49575},[129,74273,74274],{"class":198},"    \u002F\u002F 获取DOM对象\n",[129,74276,74277,74279,74281,74283,74285,74287,74289,74291],{"class":131,"line":49584},[129,74278,11236],{"class":135},[129,74280,69822],{"class":188},[129,74282,13579],{"class":135},[129,74284,54397],{"class":139},[129,74286,54400],{"class":1977},[129,74288,140],{"class":139},[129,74290,69833],{"class":244},[129,74292,146],{"class":139},[129,74294,74295,74297,74299,74301,74303,74305,74307,74309],{"class":131,"line":49593},[129,74296,11236],{"class":135},[129,74298,69649],{"class":188},[129,74300,13579],{"class":135},[129,74302,54397],{"class":139},[129,74304,54400],{"class":1977},[129,74306,140],{"class":139},[129,74308,69660],{"class":244},[129,74310,146],{"class":139},[129,74312,74313,74315,74317,74319,74321,74323,74325,74327],{"class":131,"line":49610},[129,74314,11236],{"class":135},[129,74316,15704],{"class":188},[129,74318,13579],{"class":135},[129,74320,54397],{"class":139},[129,74322,54400],{"class":1977},[129,74324,140],{"class":139},[129,74326,69679],{"class":244},[129,74328,146],{"class":139},[129,74330,74332,74334,74336,74338,74340,74342,74344,74346],{"class":131,"line":74331},231,[129,74333,11236],{"class":135},[129,74335,69708],{"class":188},[129,74337,13579],{"class":135},[129,74339,54397],{"class":139},[129,74341,54400],{"class":1977},[129,74343,140],{"class":139},[129,74345,69719],{"class":244},[129,74347,146],{"class":139},[129,74349,74351,74353,74355,74357,74359,74361,74363,74365],{"class":131,"line":74350},232,[129,74352,11236],{"class":135},[129,74354,69688],{"class":188},[129,74356,13579],{"class":135},[129,74358,54397],{"class":139},[129,74360,54400],{"class":1977},[129,74362,140],{"class":139},[129,74364,69699],{"class":244},[129,74366,146],{"class":139},[129,74368,74370,74372,74374,74376,74378,74380,74382,74384],{"class":131,"line":74369},233,[129,74371,11236],{"class":135},[129,74373,69728],{"class":188},[129,74375,13579],{"class":135},[129,74377,54397],{"class":139},[129,74379,54400],{"class":1977},[129,74381,140],{"class":139},[129,74383,69739],{"class":244},[129,74385,146],{"class":139},[129,74387,74389],{"class":131,"line":74388},234,[129,74390,2414],{"emptyLinePlaceholder":56},[129,74392,74394],{"class":131,"line":74393},235,[129,74395,74396],{"class":198},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[129,74398,74400,74402,74404,74406,74408,74410,74412,74414,74416],{"class":131,"line":74399},236,[129,74401,69840],{"class":139},[129,74403,57814],{"class":1977},[129,74405,140],{"class":139},[129,74407,69847],{"class":244},[129,74409,12450],{"class":139},[129,74411,54450],{"class":135},[129,74413,1672],{"class":139},[129,74415,214],{"class":5231},[129,74417,12457],{"class":139},[129,74419,74421],{"class":131,"line":74420},237,[129,74422,74423],{"class":198},"      \u002F\u002F 禁止浏览器跳转\n",[129,74425,74427,74429,74431],{"class":131,"line":74426},238,[129,74428,69867],{"class":139},[129,74430,69870],{"class":1977},[129,74432,1990],{"class":139},[129,74434,74436],{"class":131,"line":74435},239,[129,74437,74438],{"class":198},"      \u002F\u002F 非空判断\n",[129,74440,74442],{"class":131,"line":74441},240,[129,74443,74444],{"class":198},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[129,74446,74448],{"class":131,"line":74447},241,[129,74449,74450],{"class":198},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[129,74452,74454,74456,74458,74460,74463,74465,74468,74471,74473,74475],{"class":131,"line":74453},242,[129,74455,54481],{"class":135},[129,74457,1672],{"class":139},[129,74459,366],{"class":135},[129,74461,74462],{"class":139},"uname.value ",[129,74464,71358],{"class":135},[129,74466,74467],{"class":135}," !",[129,74469,74470],{"class":139},"age.value ",[129,74472,71358],{"class":135},[129,74474,74467],{"class":135},[129,74476,74477],{"class":139},"salary.value) {\n",[129,74479,74481,74483,74485,74487,74489],{"class":131,"line":74480},243,[129,74482,14767],{"class":135},[129,74484,69941],{"class":1977},[129,74486,140],{"class":139},[129,74488,69946],{"class":244},[129,74490,146],{"class":139},[129,74492,74494],{"class":131,"line":74493},244,[129,74495,52399],{"class":139},[129,74497,74499,74501,74503],{"class":131,"line":74498},245,[129,74500,58008],{"class":139},[129,74502,51885],{"class":1977},[129,74504,74505],{"class":139},"({\n",[129,74507,74509],{"class":131,"line":74508},246,[129,74510,74511],{"class":198},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[129,74513,74515],{"class":131,"line":74514},247,[129,74516,74517],{"class":198},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[129,74519,74521],{"class":131,"line":74520},248,[129,74522,74523],{"class":198},"        \u002F\u002F 对象的序号应为数组长度+1\n",[129,74525,74527],{"class":131,"line":74526},249,[129,74528,74529],{"class":198},"        \u002F\u002F unameId: arr.length + 1,\n",[129,74531,74533],{"class":131,"line":74532},250,[129,74534,2414],{"emptyLinePlaceholder":56},[129,74536,74538],{"class":131,"line":74537},251,[129,74539,74540],{"class":198},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[129,74542,74544],{"class":131,"line":74543},252,[129,74545,74546],{"class":198},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[129,74548,74550],{"class":131,"line":74549},253,[129,74551,74552],{"class":198},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[129,74554,74556],{"class":131,"line":74555},254,[129,74557,74558],{"class":198},"        \u002F\u002F 0当假看\n",[129,74560,74562,74565,74567,74569,74572,74574,74576,74578,74581,74583,74585,74588,74590],{"class":131,"line":74561},255,[129,74563,74564],{"class":139},"        unameId: arr.",[129,74566,51969],{"class":188},[129,74568,73815],{"class":135},[129,74570,74571],{"class":139}," arr[arr.",[129,74573,51969],{"class":188},[129,74575,52272],{"class":135},[129,74577,25119],{"class":188},[129,74579,74580],{"class":139},"].unameId ",[129,74582,620],{"class":135},[129,74584,25119],{"class":188},[129,74586,74587],{"class":135}," :",[129,74589,25119],{"class":188},[129,74591,31467],{"class":139},[129,74593,74595],{"class":131,"line":74594},256,[129,74596,69994],{"class":139},[129,74598,74600],{"class":131,"line":74599},257,[129,74601,69999],{"class":139},[129,74603,74605],{"class":131,"line":74604},258,[129,74606,70009],{"class":139},[129,74608,74610],{"class":131,"line":74609},259,[129,74611,70004],{"class":139},[129,74613,74615],{"class":131,"line":74614},260,[129,74616,74617],{"class":139},"        city: city.value,\n",[129,74619,74621],{"class":131,"line":74620},261,[129,74622,74623],{"class":198},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[129,74625,74627],{"class":131,"line":74626},262,[129,74628,74629],{"class":198},"        \u002F\u002F time: new Date().toDateString()\n",[129,74631,74633,74636,74639],{"class":131,"line":74632},263,[129,74634,74635],{"class":139},"        time: ",[129,74637,74638],{"class":1977},"getTime",[129,74640,1990],{"class":139},[129,74642,74644],{"class":131,"line":74643},264,[129,74645,64816],{"class":139},[129,74647,74649],{"class":131,"line":74648},265,[129,74650,74651],{"class":198},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[129,74653,74655,74657],{"class":131,"line":74654},266,[129,74656,70069],{"class":1977},[129,74658,1990],{"class":139},[129,74660,74662,74664,74666,74668,74670],{"class":131,"line":74661},267,[129,74663,70052],{"class":188},[129,74665,697],{"class":139},[129,74667,70057],{"class":1977},[129,74669,13065],{"class":139},[129,74671,74672],{"class":198},"\u002F\u002F重置表单\n",[129,74674,74676],{"class":131,"line":74675},268,[129,74677,74678],{"class":198},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[129,74680,74682,74685,74687,74689,74692,74694,74696,74698,74700],{"class":131,"line":74681},269,[129,74683,74684],{"class":139},"      localStorage.",[129,74686,71655],{"class":1977},[129,74688,140],{"class":139},[129,74690,74691],{"class":244},"'data'",[129,74693,12450],{"class":139},[129,74695,71665],{"class":188},[129,74697,697],{"class":139},[129,74699,71670],{"class":1977},[129,74701,74702],{"class":139},"(arr))\n",[129,74704,74706],{"class":131,"line":74705},270,[129,74707,33462],{"class":139},[129,74709,74711],{"class":131,"line":74710},271,[129,74712,2414],{"emptyLinePlaceholder":56},[129,74714,74716],{"class":131,"line":74715},272,[129,74717,74718],{"class":198},"    \u002F\u002F 3.删除业务\n",[129,74720,74722],{"class":131,"line":74721},273,[129,74723,74724],{"class":198},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[129,74726,74728,74730,74732,74734,74736,74738,74740,74742,74744],{"class":131,"line":74727},274,[129,74729,70342],{"class":139},[129,74731,57814],{"class":1977},[129,74733,140],{"class":139},[129,74735,57819],{"class":244},[129,74737,12450],{"class":139},[129,74739,54450],{"class":135},[129,74741,1672],{"class":139},[129,74743,214],{"class":5231},[129,74745,12457],{"class":139},[129,74747,74749],{"class":131,"line":74748},275,[129,74750,74751],{"class":198},"      \u002F\u002F 判断是否点击的是删除按钮\n",[129,74753,74755,74757,74759,74761,74763],{"class":131,"line":74754},276,[129,74756,54481],{"class":135},[129,74758,67035],{"class":139},[129,74760,54487],{"class":135},[129,74762,68257],{"class":244},[129,74764,12457],{"class":139},[129,74766,74768],{"class":131,"line":74767},277,[129,74769,74770],{"class":198},"        \u002F\u002F alert(1)\n",[129,74772,74774],{"class":131,"line":74773},278,[129,74775,74776],{"class":198},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[129,74778,74780],{"class":131,"line":74779},279,[129,74781,74782],{"class":198},"        \u002F\u002F console.log(e.target)\n",[129,74784,74786],{"class":131,"line":74785},280,[129,74787,74788],{"class":198},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[129,74790,74792],{"class":131,"line":74791},281,[129,74793,2414],{"emptyLinePlaceholder":56},[129,74795,74797],{"class":131,"line":74796},282,[129,74798,74799],{"class":198},"        \u002F\u002F 确认框，确然是否真的要删除\n",[129,74801,74803],{"class":131,"line":74802},283,[129,74804,74805],{"class":198},"        \u002F\u002F confirm()为确认框\n",[129,74807,74809],{"class":131,"line":74808},284,[129,74810,74811],{"class":198},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[129,74813,74815,74817,74819,74822,74824,74827],{"class":131,"line":74814},285,[129,74816,2511],{"class":135},[129,74818,1672],{"class":139},[129,74820,74821],{"class":1977},"confirm",[129,74823,140],{"class":139},[129,74825,74826],{"class":244},"'您确定要删除这条数据吗？'",[129,74828,74829],{"class":139},")) {\n",[129,74831,74833,74836,74838,74840,74842],{"class":131,"line":74832},286,[129,74834,74835],{"class":139},"          arr.",[129,74837,58011],{"class":1977},[129,74839,70395],{"class":139},[129,74841,357],{"class":188},[129,74843,146],{"class":139},[129,74845,74847],{"class":131,"line":74846},287,[129,74848,74849],{"class":198},"          \u002F\u002F 3.4 重新渲染页面\n",[129,74851,74853,74856],{"class":131,"line":74852},288,[129,74854,74855],{"class":1977},"          render",[129,74857,1990],{"class":139},[129,74859,74861],{"class":131,"line":74860},289,[129,74862,74863],{"class":198},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[129,74865,74867,74870,74872,74874,74876,74878,74880,74882,74884],{"class":131,"line":74866},290,[129,74868,74869],{"class":139},"          localStorage.",[129,74871,71655],{"class":1977},[129,74873,140],{"class":139},[129,74875,74691],{"class":244},[129,74877,12450],{"class":139},[129,74879,71665],{"class":188},[129,74881,697],{"class":139},[129,74883,71670],{"class":1977},[129,74885,74702],{"class":139},[129,74887,74889],{"class":131,"line":74888},291,[129,74890,2543],{"class":139},[129,74892,74894],{"class":131,"line":74893},292,[129,74895,52399],{"class":139},[129,74897,74899],{"class":131,"line":74898},293,[129,74900,2414],{"emptyLinePlaceholder":56},[129,74902,74904],{"class":131,"line":74903},294,[129,74905,33462],{"class":139},[129,74907,74909],{"class":131,"line":74908},295,[129,74910,2414],{"emptyLinePlaceholder":56},[129,74912,74914,74916,74918],{"class":131,"line":74913},296,[129,74915,52418],{"class":139},[129,74917,51814],{"class":51301},[129,74919,51308],{"class":139},[129,74921,74923,74925,74927],{"class":131,"line":74922},297,[129,74924,51786],{"class":139},[129,74926,51801],{"class":51301},[129,74928,51308],{"class":139},[129,74930,74932],{"class":131,"line":74931},298,[129,74933,2414],{"emptyLinePlaceholder":56},[129,74935,74937,74939,74941],{"class":131,"line":74936},299,[129,74938,51786],{"class":139},[129,74940,50636],{"class":51301},[129,74942,51308],{"class":139},[71,74944,74946],{"id":74945},"_36-正则表达式","3.6 正则表达式",[14,74948,74949],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,74951,74952],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,74954,74955],{},"正则表达式的作用：",[1146,74957,74958,74965,74971],{},[86,74959,74960,74961,74964],{},"表单验证（ ",[289,74962,74963],{},"匹配"," ）",[86,74966,74967,74968,74964],{},"过滤敏感词（ ",[289,74969,74970],{},"替换",[86,74972,74973,74974,74964],{},"字符串中提取我们想要的部分（ ",[289,74975,74976],{},"提取",[100,74978,74980],{"id":74979},"_361-语法","3.6.1 语法",[14,74982,74983],{},"正则表达式使用步骤：",[83,74985,74986,74989],{},[86,74987,74988],{},"定义规则",[86,74990,74991],{},"查找是否匹配",[14,74993,74994],{},"正则表达式里边不需要写引号",[14,74996,74997],{},[40,74998],{"alt":42,"src":74999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75001,75002],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75004,75005],{},"reg.test(str)",[14,75007,75008],{},[40,75009],{"alt":42,"src":75010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75012,75013],{},[40,75014],{"alt":42,"src":75015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[100,75017,75019],{"id":75018},"_362-元字符","3.6.2 元字符",[83,75021,75022,75025,75028,75031,75038],{},[86,75023,75024],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[86,75026,75027],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[86,75029,75030],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[86,75032,75033,75034],{},"正则验证工具：",[20,75035,75036],{"href":75036,"rel":75037},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24],[86,75039,75040],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22013,75042,75044],{"id":75043},"_3621-边界符","3.6.2.1 边界符",[14,75046,75047],{},[40,75048],{"alt":42,"src":75049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75051,75052],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75054,75055],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75057,75058],{},"只匹配一次",[14,75060,75061],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22013,75063,75065],{"id":75064},"_3622-量词","3.6.2.2 量词",[14,75067,75068],{},[40,75069],{"alt":42,"src":75070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75072,75073],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22013,75075,75077],{"id":75076},"_3623-元字符","3.6.2.3 元字符",[14,75079,75080],{},[40,75081],{"alt":42,"src":75082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75084,75085],{},"匹配的是a或b或c []只选一个",[14,75087,75088],{},[40,75089],{"alt":42,"src":75090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75092,75093],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75095,75096],{},[40,75097],{"alt":42,"src":75098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75100,75101],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75103,75104],{},[40,75105],{"alt":42,"src":75106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[120,75108,75110],{"className":50634,"code":75109,"language":50636,"meta":42,"style":42},"\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",[126,75111,75112,75122,75136,75140,75148,75162,75182,75194,75202,75206,75214,75222,75227,75258,75285,75313,75317,75322,75350,75381,75386,75391,75422,75454,75486,75490,75495,75526,75556,75586,75590,75595,75626,75657,75687,75717,75721,75726,75759,75763,75768,75799,75830,75834,75839,75870,75900,75931,75935,75940,75972,76003,76034,76061,76092,76124,76157,76188,76219,76251,76282,76290,76298,76302],{"__ignoreMap":42},[129,75113,75114,75116,75118,75120],{"class":131,"line":132},[129,75115,51298],{"class":139},[129,75117,51302],{"class":51301},[129,75119,51305],{"class":1977},[129,75121,51308],{"class":139},[129,75123,75124,75126,75128,75130,75132,75134],{"class":131,"line":51},[129,75125,1049],{"class":139},[129,75127,50636],{"class":51301},[129,75129,51317],{"class":1977},[129,75131,185],{"class":139},[129,75133,51322],{"class":244},[129,75135,51308],{"class":139},[129,75137,75138],{"class":131,"line":1194},[129,75139,2414],{"emptyLinePlaceholder":56},[129,75141,75142,75144,75146],{"class":131,"line":1209},[129,75143,1049],{"class":139},[129,75145,51335],{"class":51301},[129,75147,51308],{"class":139},[129,75149,75150,75152,75154,75156,75158,75160],{"class":131,"line":1215},[129,75151,52145],{"class":139},[129,75153,51345],{"class":51301},[129,75155,51348],{"class":1977},[129,75157,185],{"class":139},[129,75159,51353],{"class":244},[129,75161,51308],{"class":139},[129,75163,75164,75166,75168,75170,75172,75174,75176,75178,75180],{"class":131,"line":1229},[129,75165,52145],{"class":139},[129,75167,51345],{"class":51301},[129,75169,14935],{"class":1977},[129,75171,185],{"class":139},[129,75173,51392],{"class":244},[129,75175,51372],{"class":1977},[129,75177,185],{"class":139},[129,75179,51399],{"class":244},[129,75181,51308],{"class":139},[129,75183,75184,75186,75188,75190,75192],{"class":131,"line":1235},[129,75185,52145],{"class":139},[129,75187,51408],{"class":51301},[129,75189,51411],{"class":139},[129,75191,51408],{"class":51301},[129,75193,51308],{"class":139},[129,75195,75196,75198,75200],{"class":131,"line":1326},[129,75197,51786],{"class":139},[129,75199,51335],{"class":51301},[129,75201,51308],{"class":139},[129,75203,75204],{"class":131,"line":1332},[129,75205,2414],{"emptyLinePlaceholder":56},[129,75207,75208,75210,75212],{"class":131,"line":1344},[129,75209,1049],{"class":139},[129,75211,51801],{"class":51301},[129,75213,51308],{"class":139},[129,75215,75216,75218,75220],{"class":131,"line":1626},[129,75217,52145],{"class":139},[129,75219,51814],{"class":51301},[129,75221,51308],{"class":139},[129,75223,75224],{"class":131,"line":1631},[129,75225,75226],{"class":198},"    \u002F\u002F 元字符中\n",[129,75228,75229,75231,75233,75235,75237,75240,75242,75244,75247,75249,75252,75255],{"class":131,"line":1637},[129,75230,73754],{"class":139},[129,75232,58248],{"class":1977},[129,75234,140],{"class":139},[129,75236,723],{"class":244},[129,75238,75239],{"class":47978},"哈",[129,75241,723],{"class":244},[129,75243,697],{"class":139},[129,75245,75246],{"class":1977},"test",[129,75248,140],{"class":139},[129,75250,75251],{"class":244},"'哈'",[129,75253,75254],{"class":139},"))  ",[129,75256,75257],{"class":198},"\u002F\u002Ftrue\n",[129,75259,75260,75262,75264,75266,75268,75270,75272,75274,75276,75278,75281,75283],{"class":131,"line":1642},[129,75261,73754],{"class":139},[129,75263,58248],{"class":1977},[129,75265,140],{"class":139},[129,75267,723],{"class":244},[129,75269,75239],{"class":47978},[129,75271,723],{"class":244},[129,75273,697],{"class":139},[129,75275,75246],{"class":1977},[129,75277,140],{"class":139},[129,75279,75280],{"class":244},"'哈哈'",[129,75282,75254],{"class":139},[129,75284,75257],{"class":198},[129,75286,75287,75289,75291,75293,75295,75297,75299,75301,75303,75305,75308,75311],{"class":131,"line":1656},[129,75288,73754],{"class":139},[129,75290,58248],{"class":1977},[129,75292,140],{"class":139},[129,75294,723],{"class":244},[129,75296,75239],{"class":47978},[129,75298,723],{"class":244},[129,75300,697],{"class":139},[129,75302,75246],{"class":1977},[129,75304,140],{"class":139},[129,75306,75307],{"class":244},"'二哈'",[129,75309,75310],{"class":139},"))   ",[129,75312,75257],{"class":198},[129,75314,75315],{"class":131,"line":1661},[129,75316,2414],{"emptyLinePlaceholder":56},[129,75318,75319],{"class":131,"line":1667},[129,75320,75321],{"class":198},"    \u002F\u002F 1.边界符\n",[129,75323,75324,75326,75328,75330,75332,75334,75336,75338,75340,75342,75344,75346,75348],{"class":131,"line":1688},[129,75325,73754],{"class":139},[129,75327,58248],{"class":1977},[129,75329,140],{"class":139},[129,75331,723],{"class":244},[129,75333,1105],{"class":135},[129,75335,75239],{"class":47978},[129,75337,723],{"class":244},[129,75339,697],{"class":139},[129,75341,75246],{"class":1977},[129,75343,140],{"class":139},[129,75345,75251],{"class":244},[129,75347,75254],{"class":139},[129,75349,75257],{"class":198},[129,75351,75352,75354,75356,75358,75360,75362,75364,75366,75368,75370,75372,75374,75376,75378],{"class":131,"line":1693},[129,75353,73754],{"class":139},[129,75355,58248],{"class":1977},[129,75357,140],{"class":139},[129,75359,723],{"class":244},[129,75361,1105],{"class":135},[129,75363,75239],{"class":47978},[129,75365,441],{"class":135},[129,75367,723],{"class":244},[129,75369,697],{"class":139},[129,75371,75246],{"class":1977},[129,75373,140],{"class":139},[129,75375,75280],{"class":244},[129,75377,75254],{"class":139},[129,75379,75380],{"class":198},"\u002F\u002Ffalse\n",[129,75382,75383],{"class":131,"line":1707},[129,75384,75385],{"class":198},"    \u002F\u002F 2.量词\n",[129,75387,75388],{"class":131,"line":1712},[129,75389,75390],{"class":198},"    \u002F\u002F 量词 * 类似于 >= 0\n",[129,75392,75393,75395,75397,75399,75401,75403,75405,75408,75410,75412,75414,75416,75418,75420],{"class":131,"line":1741},[129,75394,73754],{"class":139},[129,75396,58248],{"class":1977},[129,75398,140],{"class":139},[129,75400,723],{"class":244},[129,75402,1105],{"class":135},[129,75404,75239],{"class":47978},[129,75406,75407],{"class":135},"*$",[129,75409,723],{"class":244},[129,75411,697],{"class":139},[129,75413,75246],{"class":1977},[129,75415,140],{"class":139},[129,75417,75280],{"class":244},[129,75419,75254],{"class":139},[129,75421,75257],{"class":198},[129,75423,75424,75426,75428,75430,75432,75434,75436,75438,75440,75442,75444,75446,75449,75451],{"class":131,"line":1746},[129,75425,73754],{"class":139},[129,75427,58248],{"class":1977},[129,75429,140],{"class":139},[129,75431,723],{"class":244},[129,75433,1105],{"class":135},[129,75435,75239],{"class":47978},[129,75437,75407],{"class":135},[129,75439,723],{"class":244},[129,75441,697],{"class":139},[129,75443,75246],{"class":1977},[129,75445,140],{"class":139},[129,75447,75448],{"class":244},"'二哈好傻'",[129,75450,75254],{"class":139},[129,75452,75453],{"class":198},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[129,75455,75456,75458,75460,75462,75464,75466,75468,75470,75472,75474,75476,75478,75481,75483],{"class":131,"line":1763},[129,75457,73754],{"class":139},[129,75459,58248],{"class":1977},[129,75461,140],{"class":139},[129,75463,723],{"class":244},[129,75465,1105],{"class":135},[129,75467,75239],{"class":47978},[129,75469,75407],{"class":135},[129,75471,723],{"class":244},[129,75473,697],{"class":139},[129,75475,75246],{"class":1977},[129,75477,140],{"class":139},[129,75479,75480],{"class":244},"'哈好哈'",[129,75482,75310],{"class":139},[129,75484,75485],{"class":198},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[129,75487,75488],{"class":131,"line":1768},[129,75489,2414],{"emptyLinePlaceholder":56},[129,75491,75492],{"class":131,"line":1773},[129,75493,75494],{"class":198},"    \u002F\u002F +类似于>=1\n",[129,75496,75497,75499,75501,75503,75505,75507,75509,75512,75514,75516,75518,75520,75522,75524],{"class":131,"line":1778},[129,75498,73754],{"class":139},[129,75500,58248],{"class":1977},[129,75502,140],{"class":139},[129,75504,723],{"class":244},[129,75506,1105],{"class":135},[129,75508,75239],{"class":47978},[129,75510,75511],{"class":135},"+$",[129,75513,723],{"class":244},[129,75515,697],{"class":139},[129,75517,75246],{"class":1977},[129,75519,140],{"class":139},[129,75521,75280],{"class":244},[129,75523,75254],{"class":139},[129,75525,75257],{"class":198},[129,75527,75528,75530,75532,75534,75536,75538,75540,75542,75544,75546,75548,75550,75552,75554],{"class":131,"line":1792},[129,75529,73754],{"class":139},[129,75531,58248],{"class":1977},[129,75533,140],{"class":139},[129,75535,723],{"class":244},[129,75537,1105],{"class":135},[129,75539,75239],{"class":47978},[129,75541,75511],{"class":135},[129,75543,723],{"class":244},[129,75545,697],{"class":139},[129,75547,75246],{"class":1977},[129,75549,140],{"class":139},[129,75551,75448],{"class":244},[129,75553,75254],{"class":139},[129,75555,75453],{"class":198},[129,75557,75558,75560,75562,75564,75566,75568,75570,75572,75574,75576,75578,75580,75582,75584],{"class":131,"line":1797},[129,75559,73754],{"class":139},[129,75561,58248],{"class":1977},[129,75563,140],{"class":139},[129,75565,723],{"class":244},[129,75567,1105],{"class":135},[129,75569,75239],{"class":47978},[129,75571,75511],{"class":135},[129,75573,723],{"class":244},[129,75575,697],{"class":139},[129,75577,75246],{"class":1977},[129,75579,140],{"class":139},[129,75581,75480],{"class":244},[129,75583,75310],{"class":139},[129,75585,75380],{"class":198},[129,75587,75588],{"class":131,"line":2591},[129,75589,2414],{"emptyLinePlaceholder":56},[129,75591,75592],{"class":131,"line":2605},[129,75593,75594],{"class":198},"    \u002F\u002F ?类似于0次或一次\n",[129,75596,75597,75599,75601,75603,75605,75607,75610,75612,75614,75616,75618,75620,75622,75624],{"class":131,"line":2613},[129,75598,73754],{"class":139},[129,75600,58248],{"class":1977},[129,75602,140],{"class":139},[129,75604,723],{"class":244},[129,75606,1105],{"class":135},[129,75608,75609],{"class":47978},"哈？",[129,75611,441],{"class":135},[129,75613,723],{"class":244},[129,75615,697],{"class":139},[129,75617,75246],{"class":1977},[129,75619,140],{"class":139},[129,75621,74229],{"class":244},[129,75623,75310],{"class":139},[129,75625,75257],{"class":198},[129,75627,75628,75630,75632,75634,75636,75638,75640,75643,75645,75647,75649,75651,75653,75655],{"class":131,"line":2618},[129,75629,73754],{"class":139},[129,75631,58248],{"class":1977},[129,75633,140],{"class":139},[129,75635,723],{"class":244},[129,75637,1105],{"class":135},[129,75639,75239],{"class":47978},[129,75641,75642],{"class":135},"?$",[129,75644,723],{"class":244},[129,75646,697],{"class":139},[129,75648,75246],{"class":1977},[129,75650,140],{"class":139},[129,75652,75280],{"class":244},[129,75654,75254],{"class":139},[129,75656,75380],{"class":198},[129,75658,75659,75661,75663,75665,75667,75669,75671,75673,75675,75677,75679,75681,75683,75685],{"class":131,"line":2624},[129,75660,73754],{"class":139},[129,75662,58248],{"class":1977},[129,75664,140],{"class":139},[129,75666,723],{"class":244},[129,75668,1105],{"class":135},[129,75670,75239],{"class":47978},[129,75672,75642],{"class":135},[129,75674,723],{"class":244},[129,75676,697],{"class":139},[129,75678,75246],{"class":1977},[129,75680,140],{"class":139},[129,75682,75448],{"class":244},[129,75684,75254],{"class":139},[129,75686,75453],{"class":198},[129,75688,75689,75691,75693,75695,75697,75699,75701,75703,75705,75707,75709,75711,75713,75715],{"class":131,"line":2630},[129,75690,73754],{"class":139},[129,75692,58248],{"class":1977},[129,75694,140],{"class":139},[129,75696,723],{"class":244},[129,75698,1105],{"class":135},[129,75700,75239],{"class":47978},[129,75702,75642],{"class":135},[129,75704,723],{"class":244},[129,75706,697],{"class":139},[129,75708,75246],{"class":1977},[129,75710,140],{"class":139},[129,75712,75480],{"class":244},[129,75714,75254],{"class":139},[129,75716,75380],{"class":198},[129,75718,75719],{"class":131,"line":2635},[129,75720,2414],{"emptyLinePlaceholder":56},[129,75722,75723],{"class":131,"line":7963},[129,75724,75725],{"class":198},"    \u002F\u002F {n}写几，就必须出现几次\n",[129,75727,75728,75730,75732,75734,75736,75738,75740,75743,75745,75747,75749,75751,75754,75757],{"class":131,"line":7987},[129,75729,73754],{"class":139},[129,75731,58248],{"class":1977},[129,75733,140],{"class":139},[129,75735,723],{"class":244},[129,75737,1105],{"class":135},[129,75739,75239],{"class":47978},[129,75741,75742],{"class":135},"{4}$",[129,75744,723],{"class":244},[129,75746,697],{"class":139},[129,75748,75246],{"class":1977},[129,75750,140],{"class":139},[129,75752,75753],{"class":244},"'哈哈哈哈'",[129,75755,75756],{"class":139},")) ",[129,75758,75257],{"class":198},[129,75760,75761],{"class":131,"line":7992},[129,75762,2414],{"emptyLinePlaceholder":56},[129,75764,75765],{"class":131,"line":7998},[129,75766,75767],{"class":198},"    \u002F\u002F {n,}大于等于n次\n",[129,75769,75770,75772,75774,75776,75778,75780,75782,75785,75787,75789,75791,75793,75795,75797],{"class":131,"line":8025},[129,75771,73754],{"class":139},[129,75773,58248],{"class":1977},[129,75775,140],{"class":139},[129,75777,723],{"class":244},[129,75779,1105],{"class":135},[129,75781,75239],{"class":47978},[129,75783,75784],{"class":135},"{4,}$",[129,75786,723],{"class":244},[129,75788,697],{"class":139},[129,75790,75246],{"class":1977},[129,75792,140],{"class":139},[129,75794,75753],{"class":244},[129,75796,75756],{"class":139},[129,75798,75257],{"class":198},[129,75800,75801,75803,75805,75807,75809,75811,75813,75815,75817,75819,75821,75823,75826,75828],{"class":131,"line":8030},[129,75802,73754],{"class":139},[129,75804,58248],{"class":1977},[129,75806,140],{"class":139},[129,75808,723],{"class":244},[129,75810,1105],{"class":135},[129,75812,75239],{"class":47978},[129,75814,75784],{"class":135},[129,75816,723],{"class":244},[129,75818,697],{"class":139},[129,75820,75246],{"class":1977},[129,75822,140],{"class":139},[129,75824,75825],{"class":244},"'哈哈哈哈哈'",[129,75827,75756],{"class":139},[129,75829,75257],{"class":198},[129,75831,75832],{"class":131,"line":8036},[129,75833,2414],{"emptyLinePlaceholder":56},[129,75835,75836],{"class":131,"line":8048},[129,75837,75838],{"class":198},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[129,75840,75841,75843,75845,75847,75849,75851,75853,75856,75858,75860,75862,75864,75866,75868],{"class":131,"line":8060},[129,75842,73754],{"class":139},[129,75844,58248],{"class":1977},[129,75846,140],{"class":139},[129,75848,723],{"class":244},[129,75850,1105],{"class":135},[129,75852,75239],{"class":47978},[129,75854,75855],{"class":135},"{4,6}$",[129,75857,723],{"class":244},[129,75859,697],{"class":139},[129,75861,75246],{"class":1977},[129,75863,140],{"class":139},[129,75865,75753],{"class":244},[129,75867,75756],{"class":139},[129,75869,75257],{"class":198},[129,75871,75872,75874,75876,75878,75880,75882,75884,75886,75888,75890,75892,75894,75896,75898],{"class":131,"line":8072},[129,75873,73754],{"class":139},[129,75875,58248],{"class":1977},[129,75877,140],{"class":139},[129,75879,723],{"class":244},[129,75881,1105],{"class":135},[129,75883,75239],{"class":47978},[129,75885,75855],{"class":135},[129,75887,723],{"class":244},[129,75889,697],{"class":139},[129,75891,75246],{"class":1977},[129,75893,140],{"class":139},[129,75895,75825],{"class":244},[129,75897,75756],{"class":139},[129,75899,75257],{"class":198},[129,75901,75902,75904,75906,75908,75910,75912,75914,75916,75918,75920,75922,75924,75927,75929],{"class":131,"line":9731},[129,75903,73754],{"class":139},[129,75905,58248],{"class":1977},[129,75907,140],{"class":139},[129,75909,723],{"class":244},[129,75911,1105],{"class":135},[129,75913,75239],{"class":47978},[129,75915,75855],{"class":135},[129,75917,723],{"class":244},[129,75919,697],{"class":139},[129,75921,75246],{"class":1977},[129,75923,140],{"class":139},[129,75925,75926],{"class":244},"'哈哈哈哈哈哈哈'",[129,75928,75756],{"class":139},[129,75930,75380],{"class":198},[129,75932,75933],{"class":131,"line":9756},[129,75934,2414],{"emptyLinePlaceholder":56},[129,75936,75937],{"class":131,"line":9779},[129,75938,75939],{"class":198},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[129,75941,75942,75944,75946,75948,75950,75952,75955,75957,75959,75961,75963,75965,75968,75970],{"class":131,"line":9803},[129,75943,73754],{"class":139},[129,75945,58248],{"class":1977},[129,75947,140],{"class":139},[129,75949,723],{"class":244},[129,75951,1105],{"class":135},[129,75953,75954],{"class":188},"[abc]",[129,75956,441],{"class":135},[129,75958,723],{"class":244},[129,75960,697],{"class":139},[129,75962,75246],{"class":1977},[129,75964,140],{"class":139},[129,75966,75967],{"class":244},"'a'",[129,75969,75254],{"class":139},[129,75971,75257],{"class":198},[129,75973,75974,75976,75978,75980,75982,75984,75986,75988,75990,75992,75994,75996,75999,76001],{"class":131,"line":9808},[129,75975,73754],{"class":139},[129,75977,58248],{"class":1977},[129,75979,140],{"class":139},[129,75981,723],{"class":244},[129,75983,1105],{"class":135},[129,75985,75954],{"class":188},[129,75987,441],{"class":135},[129,75989,723],{"class":244},[129,75991,697],{"class":139},[129,75993,75246],{"class":1977},[129,75995,140],{"class":139},[129,75997,75998],{"class":244},"'b'",[129,76000,75254],{"class":139},[129,76002,75257],{"class":198},[129,76004,76005,76007,76009,76011,76013,76015,76017,76019,76021,76023,76025,76027,76030,76032],{"class":131,"line":9813},[129,76006,73754],{"class":139},[129,76008,58248],{"class":1977},[129,76010,140],{"class":139},[129,76012,723],{"class":244},[129,76014,1105],{"class":135},[129,76016,75954],{"class":188},[129,76018,441],{"class":135},[129,76020,723],{"class":244},[129,76022,697],{"class":139},[129,76024,75246],{"class":1977},[129,76026,140],{"class":139},[129,76028,76029],{"class":244},"'c'",[129,76031,75254],{"class":139},[129,76033,75257],{"class":198},[129,76035,76036,76038,76040,76042,76044,76046,76048,76050,76052,76054,76057,76059],{"class":131,"line":9818},[129,76037,73754],{"class":139},[129,76039,58248],{"class":1977},[129,76041,140],{"class":139},[129,76043,723],{"class":244},[129,76045,75954],{"class":188},[129,76047,723],{"class":244},[129,76049,697],{"class":139},[129,76051,75246],{"class":1977},[129,76053,140],{"class":139},[129,76055,76056],{"class":244},"'ab'",[129,76058,75254],{"class":139},[129,76060,75257],{"class":198},[129,76062,76063,76065,76067,76069,76071,76073,76075,76077,76079,76081,76083,76085,76087,76089],{"class":131,"line":9827},[129,76064,73754],{"class":139},[129,76066,58248],{"class":1977},[129,76068,140],{"class":139},[129,76070,723],{"class":244},[129,76072,1105],{"class":135},[129,76074,75954],{"class":188},[129,76076,441],{"class":135},[129,76078,723],{"class":244},[129,76080,697],{"class":139},[129,76082,75246],{"class":1977},[129,76084,140],{"class":139},[129,76086,76056],{"class":244},[129,76088,75254],{"class":139},[129,76090,76091],{"class":198},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[129,76093,76094,76096,76098,76100,76102,76104,76106,76109,76111,76113,76115,76117,76119,76121],{"class":131,"line":9832},[129,76095,73754],{"class":139},[129,76097,58248],{"class":1977},[129,76099,140],{"class":139},[129,76101,723],{"class":244},[129,76103,1105],{"class":135},[129,76105,75954],{"class":188},[129,76107,76108],{"class":135},"{2}$",[129,76110,723],{"class":244},[129,76112,697],{"class":139},[129,76114,75246],{"class":1977},[129,76116,140],{"class":139},[129,76118,76056],{"class":244},[129,76120,75254],{"class":139},[129,76122,76123],{"class":198},"\u002F\u002Ftrue   可以选两个\n",[129,76125,76126,76128,76130,76132,76134,76136,76139,76141,76143,76145,76147,76149,76152,76154],{"class":131,"line":9838},[129,76127,73754],{"class":139},[129,76129,58248],{"class":1977},[129,76131,140],{"class":139},[129,76133,723],{"class":244},[129,76135,1105],{"class":135},[129,76137,76138],{"class":188},"[a-z]",[129,76140,441],{"class":135},[129,76142,723],{"class":244},[129,76144,697],{"class":139},[129,76146,75246],{"class":1977},[129,76148,140],{"class":139},[129,76150,76151],{"class":244},"'p'",[129,76153,75310],{"class":139},[129,76155,76156],{"class":198},"\u002F\u002Ftrue   依然只能选一个\n",[129,76158,76159,76161,76163,76165,76167,76169,76172,76174,76176,76178,76180,76182,76184,76186],{"class":131,"line":9859},[129,76160,73754],{"class":139},[129,76162,58248],{"class":1977},[129,76164,140],{"class":139},[129,76166,723],{"class":244},[129,76168,1105],{"class":135},[129,76170,76171],{"class":188},"[A-Z]",[129,76173,441],{"class":135},[129,76175,723],{"class":244},[129,76177,697],{"class":139},[129,76179,75246],{"class":1977},[129,76181,140],{"class":139},[129,76183,76151],{"class":244},[129,76185,75310],{"class":139},[129,76187,75380],{"class":198},[129,76189,76190,76192,76194,76196,76198,76200,76202,76204,76206,76208,76210,76212,76215,76217],{"class":131,"line":9865},[129,76191,73754],{"class":139},[129,76193,58248],{"class":1977},[129,76195,140],{"class":139},[129,76197,723],{"class":244},[129,76199,1105],{"class":135},[129,76201,76171],{"class":188},[129,76203,441],{"class":135},[129,76205,723],{"class":244},[129,76207,697],{"class":139},[129,76209,75246],{"class":1977},[129,76211,140],{"class":139},[129,76213,76214],{"class":244},"'P'",[129,76216,75310],{"class":139},[129,76218,75257],{"class":198},[129,76220,76221,76223,76225,76227,76229,76231,76234,76236,76238,76240,76242,76244,76247,76249],{"class":131,"line":9879},[129,76222,73754],{"class":139},[129,76224,58248],{"class":1977},[129,76226,140],{"class":139},[129,76228,723],{"class":244},[129,76230,1105],{"class":135},[129,76232,76233],{"class":188},"[0-9]",[129,76235,441],{"class":135},[129,76237,723],{"class":244},[129,76239,697],{"class":139},[129,76241,75246],{"class":1977},[129,76243,140],{"class":139},[129,76245,76246],{"class":244},"'0'",[129,76248,75310],{"class":139},[129,76250,75257],{"class":198},[129,76252,76253,76255,76257,76259,76261,76263,76266,76268,76270,76272,76274,76276,76278,76280],{"class":131,"line":9885},[129,76254,73754],{"class":139},[129,76256,58248],{"class":1977},[129,76258,140],{"class":139},[129,76260,723],{"class":244},[129,76262,1105],{"class":135},[129,76264,76265],{"class":188},"[a-zA-Z0-9]",[129,76267,441],{"class":135},[129,76269,723],{"class":244},[129,76271,697],{"class":139},[129,76273,75246],{"class":1977},[129,76275,140],{"class":139},[129,76277,76151],{"class":244},[129,76279,75254],{"class":139},[129,76281,75257],{"class":198},[129,76283,76284,76286,76288],{"class":131,"line":9912},[129,76285,52418],{"class":139},[129,76287,51814],{"class":51301},[129,76289,51308],{"class":139},[129,76291,76292,76294,76296],{"class":131,"line":9921},[129,76293,51786],{"class":139},[129,76295,51801],{"class":51301},[129,76297,51308],{"class":139},[129,76299,76300],{"class":131,"line":9927},[129,76301,2414],{"emptyLinePlaceholder":56},[129,76303,76304,76306,76308],{"class":131,"line":9935},[129,76305,51786],{"class":139},[129,76307,50636],{"class":51301},[129,76309,51308],{"class":139},[22013,76311,76313],{"id":76312},"_3624-修饰符","3.6.2.4 修饰符",[14,76315,76316],{},[40,76317],{"alt":42,"src":76318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76320,76321],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76323,76324],{},[40,76325],{"alt":42,"src":76326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[120,76328,76330],{"className":50634,"code":76329,"language":50636,"meta":42,"style":42},"\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",[126,76331,76332,76342,76356,76364,76378,76398,76410,76418,76426,76434,76466,76497,76502,76534,76545,76578,76587,76595,76603],{"__ignoreMap":42},[129,76333,76334,76336,76338,76340],{"class":131,"line":132},[129,76335,51298],{"class":139},[129,76337,51302],{"class":51301},[129,76339,51305],{"class":1977},[129,76341,51308],{"class":139},[129,76343,76344,76346,76348,76350,76352,76354],{"class":131,"line":51},[129,76345,1049],{"class":139},[129,76347,50636],{"class":51301},[129,76349,51317],{"class":1977},[129,76351,185],{"class":139},[129,76353,51322],{"class":244},[129,76355,51308],{"class":139},[129,76357,76358,76360,76362],{"class":131,"line":1194},[129,76359,1049],{"class":139},[129,76361,51335],{"class":51301},[129,76363,51308],{"class":139},[129,76365,76366,76368,76370,76372,76374,76376],{"class":131,"line":1209},[129,76367,52145],{"class":139},[129,76369,51345],{"class":51301},[129,76371,51348],{"class":1977},[129,76373,185],{"class":139},[129,76375,51353],{"class":244},[129,76377,51308],{"class":139},[129,76379,76380,76382,76384,76386,76388,76390,76392,76394,76396],{"class":131,"line":1215},[129,76381,52145],{"class":139},[129,76383,51345],{"class":51301},[129,76385,14935],{"class":1977},[129,76387,185],{"class":139},[129,76389,51392],{"class":244},[129,76391,51372],{"class":1977},[129,76393,185],{"class":139},[129,76395,51399],{"class":244},[129,76397,51308],{"class":139},[129,76399,76400,76402,76404,76406,76408],{"class":131,"line":1229},[129,76401,52145],{"class":139},[129,76403,51408],{"class":51301},[129,76405,51411],{"class":139},[129,76407,51408],{"class":51301},[129,76409,51308],{"class":139},[129,76411,76412,76414,76416],{"class":131,"line":1235},[129,76413,51786],{"class":139},[129,76415,51335],{"class":51301},[129,76417,51308],{"class":139},[129,76419,76420,76422,76424],{"class":131,"line":1326},[129,76421,1049],{"class":139},[129,76423,51801],{"class":51301},[129,76425,51308],{"class":139},[129,76427,76428,76430,76432],{"class":131,"line":1332},[129,76429,52145],{"class":139},[129,76431,51814],{"class":51301},[129,76433,51308],{"class":139},[129,76435,76436,76438,76440,76442,76444,76446,76449,76451,76453,76455,76457,76459,76462,76464],{"class":131,"line":1344},[129,76437,73754],{"class":139},[129,76439,58248],{"class":1977},[129,76441,140],{"class":139},[129,76443,723],{"class":244},[129,76445,1105],{"class":135},[129,76447,76448],{"class":47978},"java",[129,76450,441],{"class":135},[129,76452,723],{"class":244},[129,76454,697],{"class":139},[129,76456,75246],{"class":1977},[129,76458,140],{"class":139},[129,76460,76461],{"class":244},"'java'",[129,76463,75756],{"class":139},[129,76465,75257],{"class":198},[129,76467,76468,76470,76472,76474,76476,76478,76480,76482,76484,76486,76488,76490,76493,76495],{"class":131,"line":1626},[129,76469,73754],{"class":139},[129,76471,58248],{"class":1977},[129,76473,140],{"class":139},[129,76475,723],{"class":244},[129,76477,1105],{"class":135},[129,76479,76448],{"class":47978},[129,76481,441],{"class":135},[129,76483,723],{"class":244},[129,76485,697],{"class":139},[129,76487,75246],{"class":1977},[129,76489,140],{"class":139},[129,76491,76492],{"class":244},"'Java'",[129,76494,75756],{"class":139},[129,76496,75380],{"class":198},[129,76498,76499],{"class":131,"line":1631},[129,76500,76501],{"class":198},"    \u002F\u002F 不区分大小写、\n",[129,76503,76504,76506,76508,76510,76512,76514,76516,76518,76520,76522,76524,76526,76528,76530,76532],{"class":131,"line":1637},[129,76505,73754],{"class":139},[129,76507,58248],{"class":1977},[129,76509,140],{"class":139},[129,76511,723],{"class":244},[129,76513,1105],{"class":135},[129,76515,76448],{"class":47978},[129,76517,441],{"class":135},[129,76519,723],{"class":244},[129,76521,580],{"class":135},[129,76523,697],{"class":139},[129,76525,75246],{"class":1977},[129,76527,140],{"class":139},[129,76529,76492],{"class":244},[129,76531,75756],{"class":139},[129,76533,75257],{"class":198},[129,76535,76536,76538,76540,76542],{"class":131,"line":1642},[129,76537,11236],{"class":135},[129,76539,73920],{"class":188},[129,76541,13579],{"class":135},[129,76543,76544],{"class":244}," 'java是一门编程语言，学完java工资很高'\n",[129,76546,76547,76549,76552,76554,76557,76560,76562,76564,76566,76568,76571,76573,76576],{"class":131,"line":1656},[129,76548,11236],{"class":135},[129,76550,76551],{"class":188}," result",[129,76553,13579],{"class":135},[129,76555,76556],{"class":139}," str.",[129,76558,76559],{"class":1977},"replace",[129,76561,140],{"class":139},[129,76563,723],{"class":244},[129,76565,76448],{"class":47978},[129,76567,723],{"class":244},[129,76569,76570],{"class":135},"ig",[129,76572,12450],{"class":139},[129,76574,76575],{"class":244},"'前端'",[129,76577,146],{"class":139},[129,76579,76580,76582,76584],{"class":131,"line":1661},[129,76581,73754],{"class":139},[129,76583,58248],{"class":1977},[129,76585,76586],{"class":139},"(result)\n",[129,76588,76589,76591,76593],{"class":131,"line":1667},[129,76590,52418],{"class":139},[129,76592,51814],{"class":51301},[129,76594,51308],{"class":139},[129,76596,76597,76599,76601],{"class":131,"line":1688},[129,76598,51786],{"class":139},[129,76600,51801],{"class":51301},[129,76602,51308],{"class":139},[129,76604,76605,76607,76609],{"class":131,"line":1693},[129,76606,51786],{"class":139},[129,76608,50636],{"class":51301},[129,76610,51308],{"class":139},[5141,76612,76613],{},"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":42,"searchDepth":51,"depth":51,"links":76615},[76616,76626,76638,76655,76662,76670],{"id":53361,"depth":51,"text":53362,"children":76617},[76618,76619,76620,76621,76622,76623,76624,76625],{"id":53365,"depth":1194,"text":53366},{"id":53398,"depth":1194,"text":53399},{"id":53437,"depth":1194,"text":53438},{"id":53595,"depth":1194,"text":53596},{"id":53643,"depth":1194,"text":53644},{"id":53780,"depth":1194,"text":53781},{"id":54102,"depth":1194,"text":54103},{"id":57090,"depth":1194,"text":57091},{"id":57118,"depth":51,"text":57119,"children":76627},[76628,76629,76630,76631,76632,76633,76634,76635,76636,76637],{"id":57122,"depth":1194,"text":57123},{"id":57145,"depth":1194,"text":57146},{"id":58060,"depth":1194,"text":58061},{"id":58750,"depth":1194,"text":58751},{"id":59032,"depth":1194,"text":59033},{"id":63193,"depth":1194,"text":63194},{"id":63363,"depth":1194,"text":63364},{"id":63491,"depth":1194,"text":63492},{"id":63516,"depth":1194,"text":63517},{"id":64905,"depth":1194,"text":64906},{"id":66058,"depth":51,"text":66059,"children":76639},[76640,76641,76642,76643,76644,76645,76646,76647,76648,76649,76650,76651,76652,76653,76654],{"id":66062,"depth":1194,"text":66063},{"id":66716,"depth":1194,"text":66717},{"id":68411,"depth":1194,"text":68412},{"id":68452,"depth":1194,"text":68453},{"id":68494,"depth":1194,"text":68495},{"id":68508,"depth":1194,"text":68509},{"id":68557,"depth":1194,"text":68558},{"id":68569,"depth":1194,"text":68570},{"id":68584,"depth":1194,"text":68585},{"id":68620,"depth":1194,"text":68621},{"id":68701,"depth":1194,"text":68702},{"id":68829,"depth":1194,"text":68830},{"id":68841,"depth":1194,"text":68842},{"id":68860,"depth":1194,"text":68861},{"id":70971,"depth":1194,"text":70972},{"id":70990,"depth":51,"text":70991,"children":76656},[76657,76658,76659,76660,76661],{"id":71011,"depth":1194,"text":71012},{"id":71031,"depth":1194,"text":71032},{"id":71080,"depth":1194,"text":71081},{"id":71205,"depth":1194,"text":71206},{"id":71386,"depth":1194,"text":71387},{"id":71404,"depth":51,"text":71405,"children":76663},[76664,76665,76666,76667,76668,76669],{"id":71419,"depth":1194,"text":71420},{"id":71478,"depth":1194,"text":71479},{"id":71502,"depth":1194,"text":71503},{"id":71822,"depth":1194,"text":71823},{"id":71854,"depth":1194,"text":71855},{"id":71877,"depth":1194,"text":71878},{"id":74945,"depth":51,"text":74946,"children":76671},[76672,76673],{"id":74979,"depth":1194,"text":74980},{"id":75018,"depth":1194,"text":75019},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53333,"description":53},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76680,"title":76681,"body":76682,"description":53,"extension":54,"meta":92819,"navigation":56,"path":92820,"seo":92821,"stem":92822,"__hash__":92823},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76683,"toc":92755},[76684,76687,76690,76694,76698,76703,76708,76719,76723,76728,76731,76735,76738,76743,76747,76751,76754,76759,76762,76766,76769,76777,76780,76784,76789,76794,76797,76801,76806,76811,76814,76818,76823,76826,76831,76834,76839,76842,76847,76852,76855,76858,76862,76867,76872,76875,76879,76883,76886,76889,76892,76896,76900,76905,76910,76913,76917,76922,76927,76930,76933,76936,76939,76942,76945,76948,76951,76954,76959,76963,76968,76973,76976,76979,76982,76985,76988,76991,76994,76997,77001,77005,77008,77011,77014,77019,77021,77024,77027,77030,77033,77036,77039,77042,77045,77048,77051,77054,77057,77060,77065,77070,77075,77078,77082,77085,77090,77094,77096,77107,77112,77213,77216,77219,77222,77225,77228,77231,77234,77237,77239,77242,77245,77248,77251,77254,77256,77259,77262,77265,77268,77271,77274,77276,77279,77281,77283,77286,77290,77294,77297,77300,77303,77306,77309,77312,77315,77318,77321,77326,77446,77449,77452,77457,77460,77463,77466,77469,77474,77477,77480,77483,77486,77491,77494,77594,77659,77733,77737,77740,77743,77747,77750,77764,77793,77796,77799,77802,77805,77808,77811,77814,77816,77819,77822,77825,77828,77832,77837,77841,77846,77921,77924,78107,78110,78113,78116,78119,78122,78124,78127,78130,78133,78136,78139,78142,78144,78148,78151,78156,78159,78162,78165,78168,78170,78175,78178,78181,78184,78187,78189,78194,78197,78200,78202,78204,78207,78211,78214,78217,78222,78225,78228,78231,78281,78286,78290,78295,78298,78367,78370,78379,78383,78388,78391,78394,78402,78405,78422,80224,80228,80232,80237,80240,80244,80250,80256,80408,80413,80418,80421,80424,80427,80430,80433,80436,80439,80442,80445,80448,80451,80454,80459,80463,80466,80477,80481,80486,80489,80492,80495,80498,80501,80503,80506,80509,80512,80515,80517,80534,80537,80541,80544,80549,80554,80557,80560,80564,80567,80570,80579,80582,80586,80589,80594,80599,80666,80670,80673,80676,80681,80686,80772,80777,80781,80784,80787,80802,80805,80810,80814,80819,80928,80931,80942,81092,81096,81101,81210,81214,81219,81224,81229,81232,81239,81259,81295,81459,81464,81467,81472,81479,81482,81485,81488,81547,81603,81659,81663,81668,81983,81986,81990,81993,81998,82107,82112,82116,82121,82125,82196,82200,82202,82205,82208,82246,82522,82526,82543,82609,82643,82647,82650,82655,82684,82691,82700,82705,82720,82725,82734,82737,82874,82878,82940,82944,82949,83194,83198,83203,83206,83209,83212,83215,83219,83224,84805,84809,84813,84819,84822,84827,84831,84834,84839,84842,84853,84857,84862,84866,84871,84876,84879,84884,84888,84892,84895,84900,84905,84908,84911,84914,85036,85041,85143,85146,85149,85153,85158,85330,85335,85339,85342,85347,85413,85418,85421,85552,85555,85560,85563,85566,85657,85662,85665,85668,85671,85674,85679,85684,85687,85692,85697,85702,85706,85709,85712,85717,85722,85727,85732,85786,85789,85792,85797,85800,85803,85808,85813,85818,85822,85827,85841,85846,85849,85854,85858,85863,85868,85873,85878,85883,85888,85893,85898,85901,85905,85910,85913,85916,85919,85924,85929,85932,85935,85939,85942,85945,85950,85955,85960,85965,85968,85973,85978,86039,86044,86047,86052,87293,87298,87302,87306,87311,87314,87319,87324,87327,87332,87334,87339,87343,87346,87349,87360,87364,87369,87374,87429,87434,87439,87444,87655,87660,87664,87669,87672,87674,87677,87680,88127,88132,88139,88145,88148,88151,88415,88420,88424,88689,88694,88698,88703,88708,88713,88718,89049,89052,89057,89062,89065,89069,89073,89078,89083,89088,89093,89098,89103,89107,89110,89115,89120,89123,89197,89202,89207,89212,89214,89217,89587,89592,89597,89602,89605,89608,89710,89715,89720,89823,89827,89832,89836,89840,89845,89850,89853,89858,89861,89864,90257,90262,90265,90268,90271,90274,90794,90798,90803,90808,90813,90816,90821,90824,90827,91209,91214,91216,91218,91221,91224,91736,91740,91801,91804,91807,91810,91814,91817,91822,91827,92752],[10,76685,76681],{"id":76686},"_4js进阶",[14,76688,76689],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[71,76691,76693],{"id":76692},"_41-作用域","4.1 作用域",[100,76695,76697],{"id":76696},"_411-局部作用域","4.1.1 局部作用域",[14,76699,76700],{},[40,76701],{"alt":42,"src":76702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76704,76705],{},[40,76706],{"alt":42,"src":76707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1146,76709,76710,76713,76716],{},[86,76711,76712],{},"函数作用域在函数内部",[86,76714,76715],{},"块级作用域在{}",[86,76717,76718],{},"对象的那个{}不是作用域，不是块作用域",[100,76720,76722],{"id":76721},"_412-全局作用域","4.1.2 全局作用域",[14,76724,76725],{},[40,76726],{"alt":42,"src":76727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76729,76730],{},"window.a=10不要这样写",[100,76732,76734],{"id":76733},"_413-作用域链","4.1.3 作用域链",[14,76736,76737],{},"变量查找机制",[14,76739,76740],{},[40,76741],{"alt":42,"src":76742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[71,76744,76746],{"id":76745},"_42-垃圾回收机制","4.2 垃圾回收机制",[100,76748,76750],{"id":76749},"_421-大体介绍","4.2.1 大体介绍",[14,76752,76753],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76755,76756],{},[40,76757],{"alt":42,"src":76758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76760,76761],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[100,76763,76765],{"id":76764},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76767,76768],{},"堆栈空间分配区别：",[83,76770,76771,76774],{},[86,76772,76773],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[86,76775,76776],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76778,76779],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22013,76781,76783],{"id":76782},"_4221-引用计数","4.2.2.1 引用计数",[14,76785,76786],{},[40,76787],{"alt":42,"src":76788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76790,76791],{},[40,76792],{"alt":42,"src":76793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76795,76796],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22013,76798,76800],{"id":76799},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76802,76803],{},[40,76804],{"alt":42,"src":76805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76807,76808],{},[40,76809],{"alt":42,"src":76810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76812,76813],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[71,76815,76817],{"id":76816},"_43-闭包","4.3 闭包",[14,76819,76820],{},[40,76821],{"alt":42,"src":76822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76824,76825],{},"闭包：内层函数+外层函数的变量",[14,76827,76828],{},[40,76829],{"alt":42,"src":76830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76832,76833],{},"closure就是闭包",[14,76835,76836],{},[40,76837],{"alt":42,"src":76838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76840,76841],{},"内层函数必须包含外层函数的变量才是闭包",[14,76843,76844],{},[40,76845],{"alt":42,"src":76846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76848,76849],{},[40,76850],{"alt":42,"src":76851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76853,76854],{},"闭包可能会引起内存泄漏",[14,76856,76857],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[71,76859,76861],{"id":76860},"_44-变量提升","4.4 变量提升",[14,76863,76864],{},[40,76865],{"alt":42,"src":76866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76868,76869],{},[40,76870],{"alt":42,"src":76871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76873,76874],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[71,76876,76878],{"id":76877},"_45-函数进阶","4.5 函数进阶",[100,76880,76882],{"id":76881},"_451-函数提升","4.5.1 函数提升",[14,76884,76885],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76887,76888],{},"只提升函数声明，不提升函数调用",[51814,76890,76891],{},"\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",[100,76893,76895],{"id":76894},"_452-函数参数","4.5.2 函数参数",[22013,76897,76899],{"id":76898},"_4521-动态参数","4.5.2.1 动态参数",[14,76901,76902],{},[40,76903],{"alt":42,"src":76904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76906,76907],{},[40,76908],{"alt":42,"src":76909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76911,76912],{},"箭头函数里边没有arguments",[22013,76914,76916],{"id":76915},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76918,76919],{},[40,76920],{"alt":42,"src":76921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76923,76924],{},[40,76925],{"alt":42,"src":76926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76928,76929],{},"剩余参数使用的时候不需要写...",[14,76931,76932],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,76934,76935],{},"  function getSum(a,b,...arr) {",[14,76937,76938],{},"  console.log(11)",[14,76940,76941],{},"  }",[14,76943,76944],{},"  getSum(1,2,3,4)",[14,76946,76947],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,76949,76950],{},"  getSum(1,2)",[14,76952,76953],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,76955,76956],{},[40,76957],{"alt":42,"src":76958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22013,76960,76962],{"id":76961},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,76964,76965],{},[40,76966],{"alt":42,"src":76967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,76969,76970],{},[40,76971],{"alt":42,"src":76972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,76974,76975],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,76977,76978],{},"展开运算符可以用于数组之间的合并：",[14,76980,76981],{},"const arr1 = [1, 2, 3]",[14,76983,76984],{},"const arr2 = [3, 4, 5]",[14,76986,76987],{},"const arr = [...arr1, ...arr2]",[14,76989,76990],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,76992,76993],{},"剩余参数：函数参数使用，得到真数组",[14,76995,76996],{},"展开运算符：数组中使用，数组展开",[100,76998,77000],{"id":76999},"_453-箭头函数","4.5.3 箭头函数",[22013,77002,77004],{"id":77003},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77006,77007],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77009,77010],{},"它不是万能的！！！",[14,77012,77013],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77015,77016],{},[40,77017],{"alt":42,"src":77018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77020,169],{},[14,77022,77023],{},"① 只有一个形参的时候，可以省略小括号：",[14,77025,77026],{},"const fn=x=>{console.log(x)}",[14,77028,77029],{},"② 只有一行代码时可以省略大括号：",[14,77031,77032],{},"const fn=x=>console.log(11)",[14,77034,77035],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77037,77038],{},"const fn=x=>x+x",[14,77040,77041],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77043,77044],{},"⑤ 阻止表单默认提交：",[14,77046,77047],{},"const form = document.querySelector('form')",[14,77049,77050],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77052,77053],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77055,77056],{},"const fn=uname=>({uname:uname})",[14,77058,77059],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77061,77062],{},[40,77063],{"alt":42,"src":77064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77066,77067],{},[40,77068],{"alt":42,"src":77069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77071,77072],{},[40,77073],{"alt":42,"src":77074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77076,77077],{},"一定不要忘记用()，有()就理解为自带return",[22013,77079,77081],{"id":77080},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77083,77084],{},"箭头函数是没有动态参数的arguments",[14,77086,77087],{},[40,77088],{"alt":42,"src":77089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22013,77091,77093],{"id":77092},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77095,11347],{},[83,77097,77098,77101,77104],{},[86,77099,77100],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[86,77102,77103],{},"事件回调函数使用箭头函数时，this 为全局的 window",[86,77105,77106],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77108,77109],{},[40,77110],{"alt":42,"src":77111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[120,77113,77115],{"className":53068,"code":77114,"language":53070,"meta":42,"style":42},"  \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",[126,77116,77117,77125,77130,77135,77140,77145,77150,77154,77159,77163,77167,77172,77177,77182,77186,77190,77195,77200,77205],{"__ignoreMap":42},[129,77118,77119,77121,77123],{"class":131,"line":132},[129,77120,52145],{"class":139},[129,77122,51814],{"class":51301},[129,77124,51308],{"class":139},[129,77126,77127],{"class":131,"line":51},[129,77128,77129],{"class":139},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[129,77131,77132],{"class":131,"line":1194},[129,77133,77134],{"class":139},"    console.log(this) \u002F\u002F指向window\n",[129,77136,77137],{"class":131,"line":1209},[129,77138,77139],{"class":139},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[129,77141,77142],{"class":131,"line":1215},[129,77143,77144],{"class":139},"    function fn() {\n",[129,77146,77147],{"class":131,"line":1229},[129,77148,77149],{"class":139},"      console.log(this)  \u002F\u002F指向window\n",[129,77151,77152],{"class":131,"line":1235},[129,77153,2201],{"class":139},[129,77155,77156],{"class":131,"line":1326},[129,77157,77158],{"class":139},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[129,77160,77161],{"class":131,"line":1332},[129,77162,2414],{"emptyLinePlaceholder":56},[129,77164,77165],{"class":131,"line":1344},[129,77166,71524],{"class":139},[129,77168,77169],{"class":131,"line":1626},[129,77170,77171],{"class":139},"      name: 'andy',\n",[129,77173,77174],{"class":131,"line":1631},[129,77175,77176],{"class":139},"      sayHai: function () {\n",[129,77178,77179],{"class":131,"line":1637},[129,77180,77181],{"class":139},"        console.log(this)\n",[129,77183,77184],{"class":131,"line":1642},[129,77185,52399],{"class":139},[129,77187,77188],{"class":131,"line":1656},[129,77189,2201],{"class":139},[129,77191,77192],{"class":131,"line":1661},[129,77193,77194],{"class":139},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[129,77196,77197],{"class":131,"line":1667},[129,77198,77199],{"class":139},"    \u002F\u002F 2.箭头函数的this\n",[129,77201,77202],{"class":131,"line":1688},[129,77203,77204],{"class":139},"    const fn = () => console.log(this)\n",[129,77206,77207,77209,77211],{"class":131,"line":1693},[129,77208,52418],{"class":139},[129,77210,51814],{"class":51301},[129,77212,51308],{"class":139},[14,77214,77215],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77217,77218],{},"const fn = () => console.log(this)",[14,77220,77221],{},"fn() \u002F\u002F指向window",[14,77223,77224],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77226,77227],{},"①",[14,77229,77230],{},"const obj = {",[14,77232,77233],{},"uname: 'pink老师',",[14,77235,77236],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77238,1085],{},[14,77240,77241],{},"调用对象里边的函数",[14,77243,77244],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77246,77247],{},"obj.sayHai()",[14,77249,77250],{},"②",[14,77252,77253],{},"const obj1 = {",[14,77255,77233],{},[14,77257,77258],{},"sayHai: function () {",[14,77260,77261],{},"let i = 10",[14,77263,77264],{},"const count = () => {",[14,77266,77267],{},"console.log(this)",[14,77269,77270],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77272,77273],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77275,1085],{},[14,77277,77278],{},"count()",[14,77280,1085],{},[14,77282,1085],{},[14,77284,77285],{},"obj1.sayHai()",[71,77287,77289],{"id":77288},"_46-解构赋值","4.6 解构赋值",[100,77291,77293],{"id":77292},"_461-数组解构","4.6.1 数组解构",[14,77295,77296],{},"以前要是使用数组中的值的话：",[14,77298,77299],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77301,77302],{},"const arr=[100,60,80]",[14,77304,77305],{},"const max=arr[0]",[14,77307,77308],{},"const min=arr[1]",[14,77310,77311],{},"const avg=arr[2]",[14,77313,77314],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77316,77317],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77319,77320],{},"这个写法就类似于上边的那种用很多const的方法",[14,77322,77323],{},[40,77324],{"alt":42,"src":77325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[120,77327,77329],{"className":50634,"code":77328,"language":50636,"meta":42,"style":42},"①变量之间交换值:\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",[126,77330,77331,77336,77341,77346,77351,77356,77360,77364,77369,77373,77378,77383,77387,77392,77397,77408,77418,77423,77428,77433,77437,77441],{"__ignoreMap":42},[129,77332,77333],{"class":131,"line":132},[129,77334,77335],{"class":139},"①变量之间交换值:\n",[129,77337,77338],{"class":131,"line":51},[129,77339,77340],{"class":139},"let a=1\n",[129,77342,77343],{"class":131,"line":1194},[129,77344,77345],{"class":139},"let b=2;\n",[129,77347,77348],{"class":131,"line":1209},[129,77349,77350],{"class":139},"必须加这行代码，不然就会报错\n",[129,77352,77353],{"class":131,"line":1215},[129,77354,77355],{"class":139},"[b,a]=[a,b]\n",[129,77357,77358],{"class":131,"line":1229},[129,77359,2414],{"emptyLinePlaceholder":56},[129,77361,77362],{"class":131,"line":1235},[129,77363,2414],{"emptyLinePlaceholder":56},[129,77365,77366],{"class":131,"line":1326},[129,77367,77368],{"class":139},"可以写成下面的方式：\n",[129,77370,77371],{"class":131,"line":1332},[129,77372,77340],{"class":139},[129,77374,77375],{"class":131,"line":1344},[129,77376,77377],{"class":139},"let b=2\n",[129,77379,77380],{"class":131,"line":1626},[129,77381,77382],{"class":139},";[b,a]=[a,b]\n",[129,77384,77385],{"class":131,"line":1631},[129,77386,2414],{"emptyLinePlaceholder":56},[129,77388,77389],{"class":131,"line":1637},[129,77390,77391],{"class":139},"②排序\n",[129,77393,77394],{"class":131,"line":1642},[129,77395,77396],{"class":139},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[129,77398,77399,77402,77405],{"class":131,"line":1656},[129,77400,77401],{"class":139},"for (let i = 0; i ",[129,77403,1049],{"class":77404},"s7hpK",[129,77406,77407],{"class":139}," arr1.length; i++) {\n",[129,77409,77410,77413,77415],{"class":131,"line":1661},[129,77411,77412],{"class":139},"   for (let j = 0; j ",[129,77414,1049],{"class":77404},[129,77416,77417],{"class":139}," arr1.length - 1; j++) {\n",[129,77419,77420],{"class":131,"line":1667},[129,77421,77422],{"class":139},"      if (arr1[j] > arr1[j + 1]) {\n",[129,77424,77425],{"class":131,"line":1688},[129,77426,77427],{"class":139},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[129,77429,77430],{"class":131,"line":1693},[129,77431,77432],{"class":139},"       }\n",[129,77434,77435],{"class":131,"line":1707},[129,77436,4323],{"class":139},[129,77438,77439],{"class":131,"line":1712},[129,77440,1579],{"class":139},[129,77442,77443],{"class":131,"line":1741},[129,77444,77445],{"class":139},"console.log(arr1)\n",[14,77447,77448],{},"数组解构的细节：",[14,77450,77451],{},"①变量多，单元值少",[14,77453,77454],{},[40,77455],{"alt":42,"src":77456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77458,77459],{},"防止出现undefined的方法：",[14,77461,77462],{},"const [a=0,b=0] =[1]",[14,77464,77465],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77467,77468],{},"②变量少，单元值多",[14,77470,77471],{},[40,77472],{"alt":42,"src":77473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77475,77476],{},"此时可以使用剩余参数来接收多余的值",[14,77478,77479],{},"const [a,b,...c]=[1,2,3,4]",[14,77481,77482],{},"console.log(c) 输出[3,4]",[14,77484,77485],{},"③可以按需导入，忽略某些返回值",[14,77487,77488],{},[40,77489],{"alt":42,"src":77490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77492,77493],{},"④支持多维数组的结构",[120,77495,77499],{"className":77496,"code":77497,"language":77498,"meta":42,"style":42},"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",[126,77500,77501,77529,77545,77560,77575],{"__ignoreMap":42},[129,77502,77503,77505,77507,77509,77511,77513,77515,77517,77520,77522,77524,77526],{"class":131,"line":132},[129,77504,6807],{"class":135},[129,77506,51834],{"class":139},[129,77508,185],{"class":135},[129,77510,52227],{"class":139},[129,77512,357],{"class":188},[129,77514,12450],{"class":139},[129,77516,217],{"class":188},[129,77518,77519],{"class":139},", [",[129,77521,211],{"class":188},[129,77523,12450],{"class":139},[129,77525,432],{"class":188},[129,77527,77528],{"class":139},"]]\n",[129,77530,77531,77534,77536,77538,77540,77542],{"class":131,"line":51},[129,77532,77533],{"class":139},"console.",[129,77535,58248],{"class":1977},[129,77537,3865],{"class":139},[129,77539,331],{"class":188},[129,77541,4230],{"class":139},[129,77543,77544],{"class":198},"  \u002F\u002F1\n",[129,77546,77547,77549,77551,77553,77555,77557],{"class":131,"line":1194},[129,77548,77533],{"class":139},[129,77550,58248],{"class":1977},[129,77552,3865],{"class":139},[129,77554,357],{"class":188},[129,77556,4230],{"class":139},[129,77558,77559],{"class":198},"  \u002F\u002F2\n",[129,77561,77562,77564,77566,77568,77570,77572],{"class":131,"line":1209},[129,77563,77533],{"class":139},[129,77565,58248],{"class":1977},[129,77567,3865],{"class":139},[129,77569,217],{"class":188},[129,77571,4230],{"class":139},[129,77573,77574],{"class":198},"  \u002F\u002F[3,4]\n",[129,77576,77577,77579,77581,77583,77585,77587,77589,77591],{"class":131,"line":1215},[129,77578,77533],{"class":139},[129,77580,58248],{"class":1977},[129,77582,3865],{"class":139},[129,77584,217],{"class":188},[129,77586,4915],{"class":139},[129,77588,331],{"class":188},[129,77590,4230],{"class":139},[129,77592,77593],{"class":198},"  \u002F\u002F3\n",[120,77595,77597],{"className":77496,"code":77596,"language":77498,"meta":42,"style":42},"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",[126,77598,77599,77626,77637,77648],{"__ignoreMap":42},[129,77600,77601,77603,77606,77608,77610,77612,77614,77616,77618,77620,77622,77624],{"class":131,"line":132},[129,77602,6807],{"class":135},[129,77604,77605],{"class":139}," [a, b, c] ",[129,77607,185],{"class":135},[129,77609,52227],{"class":139},[129,77611,357],{"class":188},[129,77613,12450],{"class":139},[129,77615,217],{"class":188},[129,77617,77519],{"class":139},[129,77619,211],{"class":188},[129,77621,12450],{"class":139},[129,77623,432],{"class":188},[129,77625,77528],{"class":139},[129,77627,77628,77630,77632,77635],{"class":131,"line":51},[129,77629,77533],{"class":139},[129,77631,58248],{"class":1977},[129,77633,77634],{"class":139},"(a)",[129,77636,77544],{"class":198},[129,77638,77639,77641,77643,77646],{"class":131,"line":1194},[129,77640,77533],{"class":139},[129,77642,58248],{"class":1977},[129,77644,77645],{"class":139},"(b)",[129,77647,77559],{"class":198},[129,77649,77650,77652,77654,77657],{"class":131,"line":1209},[129,77651,77533],{"class":139},[129,77653,58248],{"class":1977},[129,77655,77656],{"class":139},"(c)",[129,77658,77574],{"class":198},[120,77660,77662],{"className":77496,"code":77661,"language":77498,"meta":42,"style":42},"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",[126,77663,77664,77691,77701,77711,77721],{"__ignoreMap":42},[129,77665,77666,77668,77671,77673,77675,77677,77679,77681,77683,77685,77687,77689],{"class":131,"line":132},[129,77667,6807],{"class":135},[129,77669,77670],{"class":139}," [a, b, [c, d]] ",[129,77672,185],{"class":135},[129,77674,52227],{"class":139},[129,77676,357],{"class":188},[129,77678,12450],{"class":139},[129,77680,217],{"class":188},[129,77682,77519],{"class":139},[129,77684,211],{"class":188},[129,77686,12450],{"class":139},[129,77688,432],{"class":188},[129,77690,77528],{"class":139},[129,77692,77693,77695,77697,77699],{"class":131,"line":51},[129,77694,77533],{"class":139},[129,77696,58248],{"class":1977},[129,77698,77634],{"class":139},[129,77700,77544],{"class":198},[129,77702,77703,77705,77707,77709],{"class":131,"line":1194},[129,77704,77533],{"class":139},[129,77706,58248],{"class":1977},[129,77708,77645],{"class":139},[129,77710,77559],{"class":198},[129,77712,77713,77715,77717,77719],{"class":131,"line":1209},[129,77714,77533],{"class":139},[129,77716,58248],{"class":1977},[129,77718,77656],{"class":139},[129,77720,77593],{"class":198},[129,77722,77723,77725,77727,77730],{"class":131,"line":1215},[129,77724,77533],{"class":139},[129,77726,58248],{"class":1977},[129,77728,77729],{"class":139},"(d)",[129,77731,77732],{"class":198},"  \u002F\u002F4\n",[100,77734,77736],{"id":77735},"_462-对象解构","4.6.2 对象解构",[14,77738,77739],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77741,77742],{},"用的非常非常多！！！！！！",[22013,77744,77746],{"id":77745},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77748,77749],{},"基本语法：",[83,77751,77752,77755,77758,77761],{},[86,77753,77754],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[86,77756,77757],{},"对象属性的值将被赋值给与属性名相同的变量",[86,77759,77760],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[86,77762,77763],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[120,77765,77767],{"className":50634,"code":77766,"language":50636,"meta":42,"style":42},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[126,77768,77769,77774,77779,77784,77788],{"__ignoreMap":42},[129,77770,77771],{"class":131,"line":132},[129,77772,77773],{"class":139},"const obj = {\n",[129,77775,77776],{"class":131,"line":51},[129,77777,77778],{"class":139},"   uname: 'pink老师',\n",[129,77780,77781],{"class":131,"line":1194},[129,77782,77783],{"class":139},"   age: 18,\n",[129,77785,77786],{"class":131,"line":1209},[129,77787,1579],{"class":139},[129,77789,77790],{"class":131,"line":1215},[129,77791,77792],{"class":139},"const { uname, age } = obj\n",[14,77794,77795],{},"上方代码这样写等价于：",[14,77797,77798],{},"const uname等价于obj.uname",[14,77800,77801],{},"变量名可以重新改名：",[14,77803,77804],{},"const uname='red老师'",[14,77806,77807],{},"const user={",[14,77809,77810],{},"  uname:'pink老师',",[14,77812,77813],{},"  age:18",[14,77815,1085],{},[14,77817,77818],{},"const {uname,age}=user",[14,77820,77821],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77823,77824],{},"const {旧变量名：新变量名}=对象",[14,77826,77827],{},"const {uname:username,age}=user",[22013,77829,77831],{"id":77830},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77833,77834],{},[40,77835],{"alt":42,"src":77836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22013,77838,77840],{"id":77839},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77842,77843],{},[40,77844],{"alt":42,"src":77845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[120,77847,77849],{"className":53068,"code":77848,"language":53070,"meta":42,"style":42},"  \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",[126,77850,77851,77859,77864,77869,77874,77879,77884,77889,77894,77899,77903,77908,77913],{"__ignoreMap":42},[129,77852,77853,77855,77857],{"class":131,"line":132},[129,77854,52145],{"class":139},[129,77856,51814],{"class":51301},[129,77858,51308],{"class":139},[129,77860,77861],{"class":131,"line":51},[129,77862,77863],{"class":139},"    const pig = {\n",[129,77865,77866],{"class":131,"line":1194},[129,77867,77868],{"class":139},"      name: '佩奇',\n",[129,77870,77871],{"class":131,"line":1209},[129,77872,77873],{"class":139},"      family: {\n",[129,77875,77876],{"class":131,"line":1215},[129,77877,77878],{"class":139},"        mother: '猪妈妈',\n",[129,77880,77881],{"class":131,"line":1229},[129,77882,77883],{"class":139},"        father: '猪爸爸',\n",[129,77885,77886],{"class":131,"line":1235},[129,77887,77888],{"class":139},"        sister: '乔治'\n",[129,77890,77891],{"class":131,"line":1326},[129,77892,77893],{"class":139},"      },\n",[129,77895,77896],{"class":131,"line":1332},[129,77897,77898],{"class":139},"      age: 6\n",[129,77900,77901],{"class":131,"line":1344},[129,77902,2201],{"class":139},[129,77904,77905],{"class":131,"line":1626},[129,77906,77907],{"class":139},"    \u002F\u002F 多级对象解构\n",[129,77909,77910],{"class":131,"line":1631},[129,77911,77912],{"class":139},"    const { name, family: { mother, father, sister }, age } = pig\n",[129,77914,77915,77917,77919],{"class":131,"line":1637},[129,77916,52418],{"class":139},[129,77918,51814],{"class":51301},[129,77920,51308],{"class":139},[14,77922,77923],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[120,77925,77928],{"className":77926,"code":77927,"language":76448,"meta":42,"style":42},"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",[126,77929,77930,77935,77946,77958,77970,77979,77983,77994,78006,78016,78021,78025,78035,78046,78055,78059,78063,78074,78085,78094,78098,78103],{"__ignoreMap":42},[129,77931,77932],{"class":131,"line":132},[129,77933,77934],{"class":198},"    \u002F\u002F 这是后台传递过来的数据\n",[129,77936,77937,77939,77942,77944],{"class":131,"line":51},[129,77938,11236],{"class":135},[129,77940,77941],{"class":139}," msg ",[129,77943,185],{"class":135},[129,77945,15587],{"class":139},[129,77947,77948,77951,77953,77956],{"class":131,"line":1194},[129,77949,77950],{"class":244},"      \"code\"",[129,77952,998],{"class":135},[129,77954,77955],{"class":188}," 200",[129,77957,31467],{"class":139},[129,77959,77960,77963,77965,77968],{"class":131,"line":1209},[129,77961,77962],{"class":244},"      \"msg\"",[129,77964,998],{"class":135},[129,77966,77967],{"class":244}," \"获取新闻列表成功\"",[129,77969,31467],{"class":139},[129,77971,77972,77975,77977],{"class":131,"line":1215},[129,77973,77974],{"class":244},"      \"data\"",[129,77976,998],{"class":135},[129,77978,55448],{"class":139},[129,77980,77981],{"class":131,"line":1229},[129,77982,2524],{"class":139},[129,77984,77985,77988,77990,77992],{"class":131,"line":1235},[129,77986,77987],{"class":244},"          \"id\"",[129,77989,998],{"class":135},[129,77991,25119],{"class":188},[129,77993,31467],{"class":139},[129,77995,77996,77999,78001,78004],{"class":131,"line":1326},[129,77997,77998],{"class":244},"          \"title\"",[129,78000,998],{"class":135},[129,78002,78003],{"class":244}," \"5G商用自己，三大运用商收入下降\"",[129,78005,31467],{"class":139},[129,78007,78008,78011,78013],{"class":131,"line":1332},[129,78009,78010],{"class":244},"          \"count\"",[129,78012,998],{"class":135},[129,78014,78015],{"class":188}," 58\n",[129,78017,78018],{"class":131,"line":1344},[129,78019,78020],{"class":139},"        },\n",[129,78022,78023],{"class":131,"line":1626},[129,78024,2524],{"class":139},[129,78026,78027,78029,78031,78033],{"class":131,"line":1631},[129,78028,77987],{"class":244},[129,78030,998],{"class":135},[129,78032,14770],{"class":188},[129,78034,31467],{"class":139},[129,78036,78037,78039,78041,78044],{"class":131,"line":1637},[129,78038,77998],{"class":244},[129,78040,998],{"class":135},[129,78042,78043],{"class":244}," \"国际媒体头条速览\"",[129,78045,31467],{"class":139},[129,78047,78048,78050,78052],{"class":131,"line":1642},[129,78049,78010],{"class":244},[129,78051,998],{"class":135},[129,78053,78054],{"class":188}," 56\n",[129,78056,78057],{"class":131,"line":1656},[129,78058,78020],{"class":139},[129,78060,78061],{"class":131,"line":1661},[129,78062,2524],{"class":139},[129,78064,78065,78067,78069,78072],{"class":131,"line":1667},[129,78066,77987],{"class":244},[129,78068,998],{"class":135},[129,78070,78071],{"class":188}," 3",[129,78073,31467],{"class":139},[129,78075,78076,78078,78080,78083],{"class":131,"line":1688},[129,78077,77998],{"class":244},[129,78079,998],{"class":135},[129,78081,78082],{"class":244}," \"乌克兰和俄罗斯持续冲突\"",[129,78084,31467],{"class":139},[129,78086,78087,78089,78091],{"class":131,"line":1693},[129,78088,78010],{"class":244},[129,78090,998],{"class":135},[129,78092,78093],{"class":188}," 1669\n",[129,78095,78096],{"class":131,"line":1707},[129,78097,78020],{"class":139},[129,78099,78100],{"class":131,"line":1712},[129,78101,78102],{"class":139},"      ]\n",[129,78104,78105],{"class":131,"line":1741},[129,78106,2201],{"class":139},[14,78108,78109],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78111,78112],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78114,78115],{},"\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,78117,78118],{},"function({data}) {",[14,78120,78121],{},"console.log(data)",[14,78123,1085],{},[14,78125,78126],{},"render(msg)",[14,78128,78129],{},"实参传递给形参的时候解构了",[14,78131,78132],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78134,78135],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78137,78138],{},"function render({data:mydata}) {",[14,78140,78141],{},"  console.log(data)",[14,78143,1085],{},[100,78145,78147],{"id":78146},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78149,78150],{},"有两种情况：一个是数组结构，一个是立即执行函数",[83,78152,78153],{},[86,78154,78155],{},"如果对一个数组进行遍历，有两种方式：",[14,78157,78158],{},"①法1",[14,78160,78161],{},"const arr=[1,2,3]",[14,78163,78164],{},"arr.map(function(item,index) {",[14,78166,78167],{},"  console.log(item)",[14,78169,52465],{},[14,78171,78172],{},[40,78173],{"alt":42,"src":78174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78176,78177],{},"②法2",[14,78179,78180],{},"const str='pink'",[14,78182,78183],{},"[1,2,3].map(function(item,index) {",[14,78185,78186],{},"console.log(item)",[14,78188,52465],{},[14,78190,78191],{},[40,78192],{"alt":42,"src":78193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78195,78196],{},"此时会报错",[14,78198,78199],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78201,78186],{},[14,78203,52465],{},[14,78205,78206],{},"内部会当成这样处理，所以我们用分号进行隔开",[71,78208,78210],{"id":78209},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78212,78213],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78215,78216],{},"可以理解为加强版的for循环",[14,78218,78219],{},[40,78220],{"alt":42,"src":78221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78223,78224],{},"里边不写return，不返回数组，只遍历不返回",[14,78226,78227],{},"map是返回数组",[14,78229,78230],{},"forEach主要用于遍历数组对象",[120,78232,78234],{"className":53068,"code":78233,"language":53070,"meta":42,"style":42},"  \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",[126,78235,78236,78244,78249,78254,78259,78264,78268,78273],{"__ignoreMap":42},[129,78237,78238,78240,78242],{"class":131,"line":132},[129,78239,52145],{"class":139},[129,78241,51814],{"class":51301},[129,78243,51308],{"class":139},[129,78245,78246],{"class":131,"line":51},[129,78247,78248],{"class":139},"    const arr = ['red', 'green', 'pink']\n",[129,78250,78251],{"class":131,"line":1194},[129,78252,78253],{"class":139},"    const result = arr.forEach(function (item, index) {\n",[129,78255,78256],{"class":131,"line":1209},[129,78257,78258],{"class":139},"      console.log(item)\n",[129,78260,78261],{"class":131,"line":1215},[129,78262,78263],{"class":139},"      console.log(index)\n",[129,78265,78266],{"class":131,"line":1229},[129,78267,33462],{"class":139},[129,78269,78270],{"class":131,"line":1235},[129,78271,78272],{"class":139},"    console.log(result)\n",[129,78274,78275,78277,78279],{"class":131,"line":1326},[129,78276,52418],{"class":139},[129,78278,51814],{"class":51301},[129,78280,51308],{"class":139},[14,78282,78283],{},[40,78284],{"alt":42,"src":78285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[71,78287,78289],{"id":78288},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78291,78292],{},[40,78293],{"alt":42,"src":78294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78296,78297],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[120,78299,78301],{"className":53068,"code":78300,"language":53070,"meta":42,"style":42},"\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",[126,78302,78303,78311,78319,78324,78329,78333,78337,78342,78346,78351,78359],{"__ignoreMap":42},[129,78304,78305,78307,78309],{"class":131,"line":132},[129,78306,1049],{"class":139},[129,78308,51801],{"class":51301},[129,78310,51308],{"class":139},[129,78312,78313,78315,78317],{"class":131,"line":51},[129,78314,52145],{"class":139},[129,78316,51814],{"class":51301},[129,78318,51308],{"class":139},[129,78320,78321],{"class":131,"line":1194},[129,78322,78323],{"class":139},"    const arr = [10, 20, 30]\n",[129,78325,78326],{"class":131,"line":1209},[129,78327,78328],{"class":139},"    const newArr = arr.filter(function (item, index) {\n",[129,78330,78331],{"class":131,"line":1215},[129,78332,78258],{"class":139},[129,78334,78335],{"class":131,"line":1229},[129,78336,78263],{"class":139},[129,78338,78339],{"class":131,"line":1235},[129,78340,78341],{"class":139},"      return item >= 20\n",[129,78343,78344],{"class":131,"line":1326},[129,78345,33462],{"class":139},[129,78347,78348],{"class":131,"line":1332},[129,78349,78350],{"class":139},"    console.log(newArr)\n",[129,78352,78353,78355,78357],{"class":131,"line":1344},[129,78354,52418],{"class":139},[129,78356,51814],{"class":51301},[129,78358,51308],{"class":139},[129,78360,78361,78363,78365],{"class":131,"line":1626},[129,78362,51786],{"class":139},[129,78364,51801],{"class":51301},[129,78366,51308],{"class":139},[14,78368,78369],{},"这个也可以写成箭头函数：",[120,78371,78373],{"className":50634,"code":78372,"language":50636,"meta":42,"style":42},"const newArr = arr.filter(item => item >= 20)\n",[126,78374,78375],{"__ignoreMap":42},[129,78376,78377],{"class":131,"line":132},[129,78378,78372],{"class":139},[71,78380,78382],{"id":78381},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78384,78385],{},[40,78386],{"alt":42,"src":78387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78389,78390],{},"步骤：",[14,78392,78393],{},"①：渲染页面模块",[1146,78395,78396,78399],{},[86,78397,78398],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[86,78400,78401],{},"用forEach+字符串的形式",[14,78403,78404],{},"②：点击不同需求，显示不同页面内容",[1146,78406,78407,78410,78413,78416,78419],{},[86,78408,78409],{},"点击采取事件委托方式 .filter",[86,78411,78412],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[86,78414,78415],{},"筛选条件是根据点击的 data-index 来判断",[86,78417,78418],{},"可以使用对象解构，把事件对象解构",[86,78420,78421],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[120,78423,78425],{"className":50634,"code":78424,"language":50636,"meta":42,"style":42},"\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",[126,78426,78427,78437,78451,78455,78463,78477,78497,78509,78517,78523,78533,78543,78553,78557,78561,78567,78580,78592,78602,78614,78618,78622,78629,78642,78654,78671,78689,78702,78706,78710,78722,78732,78736,78740,78747,78788,78815,78825,78829,78833,78841,78853,78857,78861,78869,78881,78893,78904,78908,78912,78921,78933,78944,78948,78952,78961,78973,78985,78989,78993,79000,79010,79022,79034,79049,79053,79057,79065,79081,79091,79101,79111,79123,79127,79131,79141,79152,79162,79166,79174,79182,79186,79194,79209,79235,79260,79285,79304,79312,79326,79331,79336,79341,79346,79351,79359,79367,79372,79383,79388,79398,79408,79418,79428,79432,79436,79445,79454,79463,79472,79476,79480,79489,79498,79507,79516,79520,79524,79533,79542,79551,79560,79564,79568,79577,79586,79595,79604,79608,79612,79621,79630,79639,79648,79652,79656,79665,79674,79683,79692,79696,79700,79709,79718,79726,79735,79739,79743,79747,79752,79764,79769,79781,79785,79802,79830,79839,79844,79854,79864,79873,79878,79883,79887,79892,79909,79913,79918,79926,79931,79958,79963,79983,79988,80000,80005,80010,80015,80026,80040,80077,80095,80128,80145,80169,80173,80178,80184,80188,80192,80196,80204,80212,80216],{"__ignoreMap":42},[129,78428,78429,78431,78433,78435],{"class":131,"line":132},[129,78430,51298],{"class":139},[129,78432,51302],{"class":51301},[129,78434,51305],{"class":1977},[129,78436,51308],{"class":139},[129,78438,78439,78441,78443,78445,78447,78449],{"class":131,"line":51},[129,78440,1049],{"class":139},[129,78442,50636],{"class":51301},[129,78444,51317],{"class":1977},[129,78446,185],{"class":139},[129,78448,51322],{"class":244},[129,78450,51308],{"class":139},[129,78452,78453],{"class":131,"line":1194},[129,78454,2414],{"emptyLinePlaceholder":56},[129,78456,78457,78459,78461],{"class":131,"line":1209},[129,78458,1049],{"class":139},[129,78460,51335],{"class":51301},[129,78462,51308],{"class":139},[129,78464,78465,78467,78469,78471,78473,78475],{"class":131,"line":1215},[129,78466,52145],{"class":139},[129,78468,51345],{"class":51301},[129,78470,51348],{"class":1977},[129,78472,185],{"class":139},[129,78474,51353],{"class":244},[129,78476,51308],{"class":139},[129,78478,78479,78481,78483,78485,78487,78489,78491,78493,78495],{"class":131,"line":1229},[129,78480,52145],{"class":139},[129,78482,51345],{"class":51301},[129,78484,14935],{"class":1977},[129,78486,185],{"class":139},[129,78488,51392],{"class":244},[129,78490,51372],{"class":1977},[129,78492,185],{"class":139},[129,78494,51399],{"class":244},[129,78496,51308],{"class":139},[129,78498,78499,78501,78503,78505,78507],{"class":131,"line":1235},[129,78500,52145],{"class":139},[129,78502,51408],{"class":51301},[129,78504,51411],{"class":139},[129,78506,51408],{"class":51301},[129,78508,51308],{"class":139},[129,78510,78511,78513,78515],{"class":131,"line":1326},[129,78512,52145],{"class":139},[129,78514,5141],{"class":51301},[129,78516,51308],{"class":139},[129,78518,78519,78521],{"class":131,"line":1332},[129,78520,6418],{"class":51301},[129,78522,15587],{"class":139},[129,78524,78525,78527,78529,78531],{"class":131,"line":1344},[129,78526,54696],{"class":188},[129,78528,51438],{"class":139},[129,78530,331],{"class":188},[129,78532,1305],{"class":139},[129,78534,78535,78537,78539,78541],{"class":131,"line":1626},[129,78536,54707],{"class":188},[129,78538,51438],{"class":139},[129,78540,331],{"class":188},[129,78542,1305],{"class":139},[129,78544,78545,78547,78549,78551],{"class":131,"line":1631},[129,78546,72597],{"class":188},[129,78548,51438],{"class":139},[129,78550,60506],{"class":188},[129,78552,1305],{"class":139},[129,78554,78555],{"class":131,"line":1637},[129,78556,2201],{"class":139},[129,78558,78559],{"class":131,"line":1642},[129,78560,2414],{"emptyLinePlaceholder":56},[129,78562,78563,78565],{"class":131,"line":1656},[129,78564,62124],{"class":1977},[129,78566,15587],{"class":139},[129,78568,78569,78571,78573,78576,78578],{"class":131,"line":1661},[129,78570,54772],{"class":188},[129,78572,51438],{"class":139},[129,78574,78575],{"class":188},"990",[129,78577,51493],{"class":135},[129,78579,1305],{"class":139},[129,78581,78582,78584,78586,78588,78590],{"class":131,"line":1667},[129,78583,54707],{"class":188},[129,78585,51438],{"class":139},[129,78587,331],{"class":188},[129,78589,51557],{"class":188},[129,78591,1305],{"class":139},[129,78593,78594,78596,78598,78600],{"class":131,"line":1688},[129,78595,55010],{"class":188},[129,78597,51438],{"class":139},[129,78599,51478],{"class":188},[129,78601,1305],{"class":139},[129,78603,78604,78607,78609,78612],{"class":131,"line":1693},[129,78605,78606],{"class":188},"      flex-wrap",[129,78608,51438],{"class":139},[129,78610,78611],{"class":188},"wrap",[129,78613,1305],{"class":139},[129,78615,78616],{"class":131,"line":1707},[129,78617,2201],{"class":139},[129,78619,78620],{"class":131,"line":1712},[129,78621,2414],{"emptyLinePlaceholder":56},[129,78623,78624,78627],{"class":131,"line":1741},[129,78625,78626],{"class":1977},"    .item",[129,78628,15587],{"class":139},[129,78630,78631,78633,78635,78638,78640],{"class":131,"line":1746},[129,78632,54772],{"class":188},[129,78634,51438],{"class":139},[129,78636,78637],{"class":188},"240",[129,78639,51493],{"class":135},[129,78641,1305],{"class":139},[129,78643,78644,78646,78648,78650,78652],{"class":131,"line":1763},[129,78645,62001],{"class":188},[129,78647,51438],{"class":139},[129,78649,585],{"class":188},[129,78651,51493],{"class":135},[129,78653,1305],{"class":139},[129,78655,78656,78658,78660,78662,78664,78667,78669],{"class":131,"line":1768},[129,78657,54696],{"class":188},[129,78659,51438],{"class":139},[129,78661,839],{"class":188},[129,78663,51493],{"class":135},[129,78665,78666],{"class":188}," 30",[129,78668,51493],{"class":135},[129,78670,1305],{"class":139},[129,78672,78673,78675,78677,78679,78682,78685,78687],{"class":131,"line":1773},[129,78674,61861],{"class":188},[129,78676,51438],{"class":139},[129,78678,28122],{"class":188},[129,78680,78681],{"class":188}," ease",[129,78683,78684],{"class":188}," .5",[129,78686,834],{"class":135},[129,78688,1305],{"class":139},[129,78690,78691,78694,78696,78698,78700],{"class":131,"line":1778},[129,78692,78693],{"class":188},"      margin-bottom",[129,78695,51438],{"class":139},[129,78697,839],{"class":188},[129,78699,51493],{"class":135},[129,78701,1305],{"class":139},[129,78703,78704],{"class":131,"line":1792},[129,78705,2201],{"class":139},[129,78707,78708],{"class":131,"line":1797},[129,78709,2414],{"emptyLinePlaceholder":56},[129,78711,78712,78715,78717,78720],{"class":131,"line":2591},[129,78713,78714],{"class":1977},"    .item:nth-child",[129,78716,140],{"class":139},[129,78718,78719],{"class":188},"4n",[129,78721,12457],{"class":139},[129,78723,78724,78726,78728,78730],{"class":131,"line":2605},[129,78725,62001],{"class":188},[129,78727,51438],{"class":139},[129,78729,331],{"class":188},[129,78731,1305],{"class":139},[129,78733,78734],{"class":131,"line":2613},[129,78735,2201],{"class":139},[129,78737,78738],{"class":131,"line":2618},[129,78739,2414],{"emptyLinePlaceholder":56},[129,78741,78742,78745],{"class":131,"line":2624},[129,78743,78744],{"class":1977},"    .item:hover",[129,78746,15587],{"class":139},[129,78748,78749,78752,78754,78756,78758,78760,78762,78764,78766,78769,78771,78773,78775,78777,78779,78781,78783,78786],{"class":131,"line":2630},[129,78750,78751],{"class":188},"      box-shadow",[129,78753,51438],{"class":139},[129,78755,331],{"class":188},[129,78757,51493],{"class":135},[129,78759,4107],{"class":188},[129,78761,51493],{"class":135},[129,78763,2162],{"class":188},[129,78765,51493],{"class":135},[129,78767,78768],{"class":188}," rgba",[129,78770,140],{"class":139},[129,78772,331],{"class":188},[129,78774,12450],{"class":139},[129,78776,331],{"class":188},[129,78778,12450],{"class":139},[129,78780,331],{"class":188},[129,78782,12450],{"class":139},[129,78784,78785],{"class":188},".2",[129,78787,2733],{"class":139},[129,78789,78790,78793,78795,78798,78800,78802,78804,78807,78809,78811,78813],{"class":131,"line":2635},[129,78791,78792],{"class":188},"      transform",[129,78794,51438],{"class":139},[129,78796,78797],{"class":188},"translate3d",[129,78799,140],{"class":139},[129,78801,331],{"class":188},[129,78803,12450],{"class":139},[129,78805,78806],{"class":188},"-4",[129,78808,51493],{"class":135},[129,78810,12450],{"class":139},[129,78812,331],{"class":188},[129,78814,2733],{"class":139},[129,78816,78817,78819,78821,78823],{"class":131,"line":7963},[129,78818,62026],{"class":188},[129,78820,51438],{"class":139},[129,78822,62031],{"class":188},[129,78824,1305],{"class":139},[129,78826,78827],{"class":131,"line":7987},[129,78828,2201],{"class":139},[129,78830,78831],{"class":131,"line":7992},[129,78832,2414],{"emptyLinePlaceholder":56},[129,78834,78835,78837,78839],{"class":131,"line":7998},[129,78836,78626],{"class":1977},[129,78838,55616],{"class":51301},[129,78840,15587],{"class":139},[129,78842,78843,78845,78847,78849,78851],{"class":131,"line":8025},[129,78844,54772],{"class":188},[129,78846,51438],{"class":139},[129,78848,450],{"class":188},[129,78850,467],{"class":135},[129,78852,1305],{"class":139},[129,78854,78855],{"class":131,"line":8030},[129,78856,2201],{"class":139},[129,78858,78859],{"class":131,"line":8036},[129,78860,2414],{"emptyLinePlaceholder":56},[129,78862,78863,78865,78867],{"class":131,"line":8048},[129,78864,78626],{"class":1977},[129,78866,62305],{"class":1977},[129,78868,15587],{"class":139},[129,78870,78871,78873,78875,78877,78879],{"class":131,"line":8060},[129,78872,54923],{"class":188},[129,78874,51438],{"class":139},[129,78876,789],{"class":188},[129,78878,51493],{"class":135},[129,78880,1305],{"class":139},[129,78882,78883,78885,78887,78889,78891],{"class":131,"line":8072},[129,78884,78693],{"class":188},[129,78886,51438],{"class":139},[129,78888,585],{"class":188},[129,78890,51493],{"class":135},[129,78892,1305],{"class":139},[129,78894,78895,78897,78899,78902],{"class":131,"line":9731},[129,78896,57417],{"class":188},[129,78898,51438],{"class":139},[129,78900,78901],{"class":188},"#666",[129,78903,1305],{"class":139},[129,78905,78906],{"class":131,"line":9756},[129,78907,2201],{"class":139},[129,78909,78910],{"class":131,"line":9779},[129,78911,2414],{"emptyLinePlaceholder":56},[129,78913,78914,78916,78919],{"class":131,"line":9803},[129,78915,78626],{"class":1977},[129,78917,78918],{"class":1977}," .price",[129,78920,15587],{"class":139},[129,78922,78923,78925,78927,78929,78931],{"class":131,"line":9808},[129,78924,54923],{"class":188},[129,78926,51438],{"class":139},[129,78928,889],{"class":188},[129,78930,51493],{"class":135},[129,78932,1305],{"class":139},[129,78934,78935,78937,78939,78942],{"class":131,"line":9813},[129,78936,57417],{"class":188},[129,78938,51438],{"class":139},[129,78940,78941],{"class":188},"firebrick",[129,78943,1305],{"class":139},[129,78945,78946],{"class":131,"line":9818},[129,78947,2201],{"class":139},[129,78949,78950],{"class":131,"line":9827},[129,78951,2414],{"emptyLinePlaceholder":56},[129,78953,78954,78956,78959],{"class":131,"line":9832},[129,78955,78626],{"class":1977},[129,78957,78958],{"class":1977}," .price::before",[129,78960,15587],{"class":139},[129,78962,78963,78966,78968,78971],{"class":131,"line":9838},[129,78964,78965],{"class":188},"      content",[129,78967,51438],{"class":139},[129,78969,78970],{"class":244},"'￥'",[129,78972,1305],{"class":139},[129,78974,78975,78977,78979,78981,78983],{"class":131,"line":9859},[129,78976,54923],{"class":188},[129,78978,51438],{"class":139},[129,78980,688],{"class":188},[129,78982,51493],{"class":135},[129,78984,1305],{"class":139},[129,78986,78987],{"class":131,"line":9865},[129,78988,2201],{"class":139},[129,78990,78991],{"class":131,"line":9879},[129,78992,2414],{"emptyLinePlaceholder":56},[129,78994,78995,78998],{"class":131,"line":9885},[129,78996,78997],{"class":1977},"    .filter",[129,78999,15587],{"class":139},[129,79001,79002,79004,79006,79008],{"class":131,"line":9912},[129,79003,55010],{"class":188},[129,79005,51438],{"class":139},[129,79007,51478],{"class":188},[129,79009,1305],{"class":139},[129,79011,79012,79014,79016,79018,79020],{"class":131,"line":9921},[129,79013,54772],{"class":188},[129,79015,51438],{"class":139},[129,79017,78575],{"class":188},[129,79019,51493],{"class":135},[129,79021,1305],{"class":139},[129,79023,79024,79026,79028,79030,79032],{"class":131,"line":9927},[129,79025,54707],{"class":188},[129,79027,51438],{"class":139},[129,79029,331],{"class":188},[129,79031,51557],{"class":188},[129,79033,1305],{"class":139},[129,79035,79036,79038,79040,79042,79044,79046],{"class":131,"line":9935},[129,79037,54696],{"class":188},[129,79039,51438],{"class":139},[129,79041,795],{"class":188},[129,79043,51493],{"class":135},[129,79045,78666],{"class":188},[129,79047,79048],{"class":135},"px\n",[129,79050,79051],{"class":131,"line":9940},[129,79052,2201],{"class":139},[129,79054,79055],{"class":131,"line":16619},[129,79056,2414],{"emptyLinePlaceholder":56},[129,79058,79059,79061,79063],{"class":131,"line":16625},[129,79060,78997],{"class":1977},[129,79062,1413],{"class":51301},[129,79064,15587],{"class":139},[129,79066,79067,79069,79071,79073,79075,79077,79079],{"class":131,"line":16648},[129,79068,54696],{"class":188},[129,79070,51438],{"class":139},[129,79072,585],{"class":188},[129,79074,51493],{"class":135},[129,79076,8965],{"class":188},[129,79078,51493],{"class":135},[129,79080,1305],{"class":139},[129,79082,79083,79085,79087,79089],{"class":131,"line":16654},[129,79084,61722],{"class":188},[129,79086,51438],{"class":139},[129,79088,61819],{"class":188},[129,79090,1305],{"class":139},[129,79092,79093,79095,79097,79099],{"class":131,"line":16677},[129,79094,57417],{"class":188},[129,79096,51438],{"class":139},[129,79098,78901],{"class":188},[129,79100,1305],{"class":139},[129,79102,79103,79105,79107,79109],{"class":131,"line":16691},[129,79104,63971],{"class":188},[129,79106,51438],{"class":139},[129,79108,54738],{"class":188},[129,79110,1305],{"class":139},[129,79112,79113,79115,79117,79119,79121],{"class":131,"line":16711},[129,79114,61751],{"class":188},[129,79116,51438],{"class":139},[129,79118,839],{"class":188},[129,79120,51493],{"class":135},[129,79122,1305],{"class":139},[129,79124,79125],{"class":131,"line":16717},[129,79126,2201],{"class":139},[129,79128,79129],{"class":131,"line":16728},[129,79130,2414],{"emptyLinePlaceholder":56},[129,79132,79133,79135,79137,79139],{"class":131,"line":16751},[129,79134,78997],{"class":1977},[129,79136,1413],{"class":51301},[129,79138,61901],{"class":1977},[129,79140,15587],{"class":139},[129,79142,79143,79145,79147,79150],{"class":131,"line":16773},[129,79144,54885],{"class":188},[129,79146,51438],{"class":139},[129,79148,79149],{"class":188},"#05943c",[129,79151,1305],{"class":139},[129,79153,79154,79156,79158,79160],{"class":131,"line":16778},[129,79155,57417],{"class":188},[129,79157,51438],{"class":139},[129,79159,60843],{"class":188},[129,79161,1305],{"class":139},[129,79163,79164],{"class":131,"line":16784},[129,79165,2201],{"class":139},[129,79167,79168,79170,79172],{"class":131,"line":16798},[129,79169,52418],{"class":139},[129,79171,5141],{"class":51301},[129,79173,51308],{"class":139},[129,79175,79176,79178,79180],{"class":131,"line":16811},[129,79177,51786],{"class":139},[129,79179,51335],{"class":51301},[129,79181,51308],{"class":139},[129,79183,79184],{"class":131,"line":16816},[129,79185,2414],{"emptyLinePlaceholder":56},[129,79187,79188,79190,79192],{"class":131,"line":16830},[129,79189,1049],{"class":139},[129,79191,51801],{"class":51301},[129,79193,51308],{"class":139},[129,79195,79196,79198,79200,79202,79204,79207],{"class":131,"line":16835},[129,79197,52145],{"class":139},[129,79199,51612],{"class":51301},[129,79201,53487],{"class":1977},[129,79203,185],{"class":139},[129,79205,79206],{"class":244},"\"filter\"",[129,79208,51308],{"class":139},[129,79210,79211,79213,79215,79217,79219,79221,79224,79226,79228,79231,79233],{"class":131,"line":16841},[129,79212,51342],{"class":139},[129,79214,20],{"class":51301},[129,79216,61058],{"class":1977},[129,79218,185],{"class":139},[129,79220,61063],{"class":244},[129,79222,79223],{"class":1977}," data-index",[129,79225,185],{"class":139},[129,79227,3692],{"class":244},[129,79229,79230],{"class":139},">0-100元\u003C\u002F",[129,79232,20],{"class":51301},[129,79234,51308],{"class":139},[129,79236,79237,79239,79241,79243,79245,79247,79249,79251,79253,79256,79258],{"class":131,"line":16846},[129,79238,51342],{"class":139},[129,79240,20],{"class":51301},[129,79242,61058],{"class":1977},[129,79244,185],{"class":139},[129,79246,61063],{"class":244},[129,79248,79223],{"class":1977},[129,79250,185],{"class":139},[129,79252,3715],{"class":244},[129,79254,79255],{"class":139},">100-300元\u003C\u002F",[129,79257,20],{"class":51301},[129,79259,51308],{"class":139},[129,79261,79262,79264,79266,79268,79270,79272,79274,79276,79278,79281,79283],{"class":131,"line":16860},[129,79263,51342],{"class":139},[129,79265,20],{"class":51301},[129,79267,61058],{"class":1977},[129,79269,185],{"class":139},[129,79271,61063],{"class":244},[129,79273,79223],{"class":1977},[129,79275,185],{"class":139},[129,79277,3728],{"class":244},[129,79279,79280],{"class":139},">300元以上\u003C\u002F",[129,79282,20],{"class":51301},[129,79284,51308],{"class":139},[129,79286,79287,79289,79291,79293,79295,79297,79300,79302],{"class":131,"line":16865},[129,79288,51342],{"class":139},[129,79290,20],{"class":51301},[129,79292,61058],{"class":1977},[129,79294,185],{"class":139},[129,79296,61063],{"class":244},[129,79298,79299],{"class":139},">全部区间\u003C\u002F",[129,79301,20],{"class":51301},[129,79303,51308],{"class":139},[129,79305,79306,79308,79310],{"class":131,"line":16870},[129,79307,52418],{"class":139},[129,79309,51612],{"class":51301},[129,79311,51308],{"class":139},[129,79313,79314,79316,79318,79320,79322,79324],{"class":131,"line":16884},[129,79315,52145],{"class":139},[129,79317,51612],{"class":51301},[129,79319,53487],{"class":1977},[129,79321,185],{"class":139},[129,79323,62609],{"class":244},[129,79325,51308],{"class":139},[129,79327,79328],{"class":131,"line":16896},[129,79329,79330],{"class":198},"    \u003C!-- \u003Cdiv class=\"item\">\n",[129,79332,79333],{"class":131,"line":16901},[129,79334,79335],{"class":198},"      \u003Cimg src=\"\" alt=\"\">\n",[129,79337,79338],{"class":131,"line":16914},[129,79339,79340],{"class":198},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[129,79342,79343],{"class":131,"line":16919},[129,79344,79345],{"class":198},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[129,79347,79348],{"class":131,"line":16924},[129,79349,79350],{"class":198},"    \u003C\u002Fdiv> -->\n",[129,79352,79353,79355,79357],{"class":131,"line":16929},[129,79354,52418],{"class":139},[129,79356,51612],{"class":51301},[129,79358,51308],{"class":139},[129,79360,79361,79363,79365],{"class":131,"line":16942},[129,79362,52145],{"class":139},[129,79364,51814],{"class":51301},[129,79366,51308],{"class":139},[129,79368,79369],{"class":131,"line":16947},[129,79370,79371],{"class":198},"    \u002F\u002F 2. 初始化数据\n",[129,79373,79374,79376,79379,79381],{"class":131,"line":32634},[129,79375,11236],{"class":135},[129,79377,79378],{"class":188}," goodsList",[129,79380,13579],{"class":135},[129,79382,55448],{"class":139},[129,79384,79385],{"class":131,"line":32640},[129,79386,79387],{"class":139},"      {\n",[129,79389,79390,79393,79396],{"class":131,"line":32646},[129,79391,79392],{"class":139},"        id: ",[129,79394,79395],{"class":244},"'4001172'",[129,79397,31467],{"class":139},[129,79399,79400,79403,79406],{"class":131,"line":32652},[129,79401,79402],{"class":139},"        name: ",[129,79404,79405],{"class":244},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[129,79407,31467],{"class":139},[129,79409,79410,79413,79416],{"class":131,"line":32658},[129,79411,79412],{"class":139},"        price: ",[129,79414,79415],{"class":244},"'289.00'",[129,79417,31467],{"class":139},[129,79419,79420,79423,79426],{"class":131,"line":32669},[129,79421,79422],{"class":139},"        picture: ",[129,79424,79425],{"class":244},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[129,79427,31467],{"class":139},[129,79429,79430],{"class":131,"line":32675},[129,79431,77893],{"class":139},[129,79433,79434],{"class":131,"line":32695},[129,79435,79387],{"class":139},[129,79437,79438,79440,79443],{"class":131,"line":32701},[129,79439,79392],{"class":139},[129,79441,79442],{"class":244},"'4001594'",[129,79444,31467],{"class":139},[129,79446,79447,79449,79452],{"class":131,"line":32712},[129,79448,79402],{"class":139},[129,79450,79451],{"class":244},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[129,79453,31467],{"class":139},[129,79455,79456,79458,79461],{"class":131,"line":32718},[129,79457,79412],{"class":139},[129,79459,79460],{"class":244},"'288.00'",[129,79462,31467],{"class":139},[129,79464,79465,79467,79470],{"class":131,"line":32724},[129,79466,79422],{"class":139},[129,79468,79469],{"class":244},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[129,79471,31467],{"class":139},[129,79473,79474],{"class":131,"line":32730},[129,79475,77893],{"class":139},[129,79477,79478],{"class":131,"line":32736},[129,79479,79387],{"class":139},[129,79481,79482,79484,79487],{"class":131,"line":32742},[129,79483,79392],{"class":139},[129,79485,79486],{"class":244},"'4001009'",[129,79488,31467],{"class":139},[129,79490,79491,79493,79496],{"class":131,"line":32748},[129,79492,79402],{"class":139},[129,79494,79495],{"class":244},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[129,79497,31467],{"class":139},[129,79499,79500,79502,79505],{"class":131,"line":32754},[129,79501,79412],{"class":139},[129,79503,79504],{"class":244},"'109.00'",[129,79506,31467],{"class":139},[129,79508,79509,79511,79514],{"class":131,"line":32774},[129,79510,79422],{"class":139},[129,79512,79513],{"class":244},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[129,79515,31467],{"class":139},[129,79517,79518],{"class":131,"line":32780},[129,79519,77893],{"class":139},[129,79521,79522],{"class":131,"line":32796},[129,79523,79387],{"class":139},[129,79525,79526,79528,79531],{"class":131,"line":32802},[129,79527,79392],{"class":139},[129,79529,79530],{"class":244},"'4001874'",[129,79532,31467],{"class":139},[129,79534,79535,79537,79540],{"class":131,"line":32816},[129,79536,79402],{"class":139},[129,79538,79539],{"class":244},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[129,79541,31467],{"class":139},[129,79543,79544,79546,79549],{"class":131,"line":32822},[129,79545,79412],{"class":139},[129,79547,79548],{"class":244},"'488.00'",[129,79550,31467],{"class":139},[129,79552,79553,79555,79558],{"class":131,"line":32837},[129,79554,79422],{"class":139},[129,79556,79557],{"class":244},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[129,79559,31467],{"class":139},[129,79561,79562],{"class":131,"line":32843},[129,79563,77893],{"class":139},[129,79565,79566],{"class":131,"line":32852},[129,79567,79387],{"class":139},[129,79569,79570,79572,79575],{"class":131,"line":32858},[129,79571,79392],{"class":139},[129,79573,79574],{"class":244},"'4001649'",[129,79576,31467],{"class":139},[129,79578,79579,79581,79584],{"class":131,"line":32867},[129,79580,79402],{"class":139},[129,79582,79583],{"class":244},"'大师监制龙泉青瓷茶叶罐'",[129,79585,31467],{"class":139},[129,79587,79588,79590,79593],{"class":131,"line":32873},[129,79589,79412],{"class":139},[129,79591,79592],{"class":244},"'139.00'",[129,79594,31467],{"class":139},[129,79596,79597,79599,79602],{"class":131,"line":32879},[129,79598,79422],{"class":139},[129,79600,79601],{"class":244},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[129,79603,31467],{"class":139},[129,79605,79606],{"class":131,"line":32888},[129,79607,77893],{"class":139},[129,79609,79610],{"class":131,"line":32894},[129,79611,79387],{"class":139},[129,79613,79614,79616,79619],{"class":131,"line":32905},[129,79615,79392],{"class":139},[129,79617,79618],{"class":244},"'3997185'",[129,79620,31467],{"class":139},[129,79622,79623,79625,79628],{"class":131,"line":32911},[129,79624,79402],{"class":139},[129,79626,79627],{"class":244},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[129,79629,31467],{"class":139},[129,79631,79632,79634,79637],{"class":131,"line":32930},[129,79633,79412],{"class":139},[129,79635,79636],{"class":244},"'108.00'",[129,79638,31467],{"class":139},[129,79640,79641,79643,79646],{"class":131,"line":32936},[129,79642,79422],{"class":139},[129,79644,79645],{"class":244},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[129,79647,31467],{"class":139},[129,79649,79650],{"class":131,"line":32947},[129,79651,77893],{"class":139},[129,79653,79654],{"class":131,"line":32953},[129,79655,79387],{"class":139},[129,79657,79658,79660,79663],{"class":131,"line":32973},[129,79659,79392],{"class":139},[129,79661,79662],{"class":244},"'3997403'",[129,79664,31467],{"class":139},[129,79666,79667,79669,79672],{"class":131,"line":32989},[129,79668,79402],{"class":139},[129,79670,79671],{"class":244},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[129,79673,31467],{"class":139},[129,79675,79676,79678,79681],{"class":131,"line":32995},[129,79677,79412],{"class":139},[129,79679,79680],{"class":244},"'100.00'",[129,79682,31467],{"class":139},[129,79684,79685,79687,79690],{"class":131,"line":33009},[129,79686,79422],{"class":139},[129,79688,79689],{"class":244},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[129,79691,31467],{"class":139},[129,79693,79694],{"class":131,"line":33015},[129,79695,77893],{"class":139},[129,79697,79698],{"class":131,"line":33021},[129,79699,79387],{"class":139},[129,79701,79702,79704,79707],{"class":131,"line":33032},[129,79703,79392],{"class":139},[129,79705,79706],{"class":244},"'3998274'",[129,79708,31467],{"class":139},[129,79710,79711,79713,79716],{"class":131,"line":33038},[129,79712,79402],{"class":139},[129,79714,79715],{"class":244},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[129,79717,31467],{"class":139},[129,79719,79720,79722,79724],{"class":131,"line":33044},[129,79721,79412],{"class":139},[129,79723,79592],{"class":244},[129,79725,31467],{"class":139},[129,79727,79728,79730,79733],{"class":131,"line":33054},[129,79729,79422],{"class":139},[129,79731,79732],{"class":244},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[129,79734,31467],{"class":139},[129,79736,79737],{"class":131,"line":33060},[129,79738,77893],{"class":139},[129,79740,79741],{"class":131,"line":33071},[129,79742,53110],{"class":139},[129,79744,79745],{"class":131,"line":33077},[129,79746,2414],{"emptyLinePlaceholder":56},[129,79748,79749],{"class":131,"line":33087},[129,79750,79751],{"class":198},"    \u002F\u002F 1.渲染函数\n",[129,79753,79754,79756,79758,79760,79762],{"class":131,"line":33092},[129,79755,70085],{"class":135},[129,79757,70088],{"class":1977},[129,79759,140],{"class":139},[129,79761,3894],{"class":5231},[129,79763,12457],{"class":139},[129,79765,79766],{"class":131,"line":33098},[129,79767,79768],{"class":198},"      \u002F\u002F 声明空字符串\n",[129,79770,79771,79774,79777,79779],{"class":131,"line":33147},[129,79772,79773],{"class":135},"      let",[129,79775,79776],{"class":139}," str ",[129,79778,185],{"class":135},[129,79780,70105],{"class":244},[129,79782,79783],{"class":131,"line":33194},[129,79784,70110],{"class":198},[129,79786,79787,79789,79792,79794,79797,79800],{"class":131,"line":33199},[129,79788,58008],{"class":139},[129,79790,79791],{"class":1977},"forEach",[129,79793,140],{"class":139},[129,79795,79796],{"class":5231},"item",[129,79798,79799],{"class":135}," =>",[129,79801,15587],{"class":139},[129,79803,79804,79806,79809,79812,79814,79817,79819,79822,79825,79827],{"class":131,"line":33205},[129,79805,61271],{"class":135},[129,79807,79808],{"class":139}," { ",[129,79810,79811],{"class":188},"name",[129,79813,12450],{"class":139},[129,79815,79816],{"class":188},"price",[129,79818,12450],{"class":139},[129,79820,79821],{"class":188},"picture",[129,79823,79824],{"class":139}," } ",[129,79826,185],{"class":135},[129,79828,79829],{"class":139}," item\n",[129,79831,79832,79835,79837],{"class":131,"line":33224},[129,79833,79834],{"class":139},"        str ",[129,79836,9492],{"class":135},[129,79838,70169],{"class":244},[129,79840,79841],{"class":131,"line":33230},[129,79842,79843],{"class":244},"          \u003Cdiv class=\"item\">\n",[129,79845,79846,79849,79851],{"class":131,"line":33250},[129,79847,79848],{"class":244},"            \u003Cimg src=\"${",[129,79850,79821],{"class":139},[129,79852,79853],{"class":244},"}\" alt=\"\">\n",[129,79855,79856,79859,79861],{"class":131,"line":33256},[129,79857,79858],{"class":244},"            \u003Cp class=\"name\">${",[129,79860,79811],{"class":139},[129,79862,79863],{"class":244},"}\u003C\u002Fp>\n",[129,79865,79866,79869,79871],{"class":131,"line":33262},[129,79867,79868],{"class":244},"            \u003Cp class=\"price\">${",[129,79870,79816],{"class":139},[129,79872,79863],{"class":244},[129,79874,79875],{"class":131,"line":33272},[129,79876,79877],{"class":244},"          \u003C\u002Fdiv>\n",[129,79879,79880],{"class":131,"line":33277},[129,79881,79882],{"class":244},"        `\n",[129,79884,79885],{"class":131,"line":33283},[129,79886,64816],{"class":139},[129,79888,79889],{"class":131,"line":33299},[129,79890,79891],{"class":198},"      \u002F\u002F 追加给List\n",[129,79893,79894,79896,79898,79900,79903,79905,79907],{"class":131,"line":33344},[129,79895,55772],{"class":139},[129,79897,54400],{"class":1977},[129,79899,140],{"class":139},[129,79901,79902],{"class":244},"'.list'",[129,79904,74250],{"class":139},[129,79906,185],{"class":135},[129,79908,73986],{"class":139},[129,79910,79911],{"class":131,"line":33350},[129,79912,2201],{"class":139},[129,79914,79915],{"class":131,"line":33356},[129,79916,79917],{"class":198},"    \u002F\u002F 页面一打开就需要渲染\n",[129,79919,79920,79923],{"class":131,"line":33362},[129,79921,79922],{"class":1977},"    render",[129,79924,79925],{"class":139},"(goodsList)\n",[129,79927,79928],{"class":131,"line":33373},[129,79929,79930],{"class":198},"    \u002F\u002F 2.过滤筛选\n",[129,79932,79933,79935,79937,79939,79942,79944,79946,79948,79950,79952,79954,79956],{"class":131,"line":33379},[129,79934,52408],{"class":139},[129,79936,54400],{"class":1977},[129,79938,140],{"class":139},[129,79940,79941],{"class":244},"'.filter'",[129,79943,30827],{"class":139},[129,79945,57814],{"class":1977},[129,79947,140],{"class":139},[129,79949,57819],{"class":244},[129,79951,12450],{"class":139},[129,79953,214],{"class":5231},[129,79955,79799],{"class":135},[129,79957,15587],{"class":139},[129,79959,79960],{"class":131,"line":33385},[129,79961,79962],{"class":198},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[129,79964,79965,79967,79969,79972,79974,79976,79978,79980],{"class":131,"line":33391},[129,79966,58229],{"class":135},[129,79968,79808],{"class":139},[129,79970,79971],{"class":188},"tagName",[129,79973,12450],{"class":139},[129,79975,31538],{"class":188},[129,79977,79824],{"class":139},[129,79979,185],{"class":135},[129,79981,79982],{"class":139}," e.target\n",[129,79984,79985],{"class":131,"line":33409},[129,79986,79987],{"class":198},"      \u002F\u002F 判断\n",[129,79989,79990,79992,79994,79996,79998],{"class":131,"line":33423},[129,79991,54481],{"class":135},[129,79993,67035],{"class":139},[129,79995,54487],{"class":135},[129,79997,68257],{"class":244},[129,79999,12457],{"class":139},[129,80001,80002],{"class":131,"line":33432},[129,80003,80004],{"class":198},"        \u002F\u002F console.log(11)\n",[129,80006,80007],{"class":131,"line":33441},[129,80008,80009],{"class":198},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[129,80011,80012],{"class":131,"line":33450},[129,80013,80014],{"class":198},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[129,80016,80017,80019,80021,80023],{"class":131,"line":33459},[129,80018,51831],{"class":135},[129,80020,51834],{"class":139},[129,80022,185],{"class":135},[129,80024,80025],{"class":139}," goodsList\n",[129,80027,80028,80030,80033,80035,80038],{"class":131,"line":33465},[129,80029,2511],{"class":135},[129,80031,80032],{"class":139}," (dataset.index ",[129,80034,54487],{"class":135},[129,80036,80037],{"class":244}," '1'",[129,80039,12457],{"class":139},[129,80041,80042,80045,80047,80050,80053,80055,80057,80059,80062,80064,80066,80069,80071,80073,80075],{"class":131,"line":33471},[129,80043,80044],{"class":139},"          arr ",[129,80046,185],{"class":135},[129,80048,80049],{"class":139}," goodsList.",[129,80051,80052],{"class":1977},"filter",[129,80054,140],{"class":139},[129,80056,79796],{"class":5231},[129,80058,79799],{"class":135},[129,80060,80061],{"class":139}," item.price ",[129,80063,1724],{"class":135},[129,80065,4107],{"class":188},[129,80067,80068],{"class":135}," &&",[129,80070,80061],{"class":139},[129,80072,1602],{"class":135},[129,80074,5769],{"class":188},[129,80076,146],{"class":139},[129,80078,80079,80082,80084,80086,80088,80090,80093],{"class":131,"line":33479},[129,80080,80081],{"class":139},"        } ",[129,80083,1715],{"class":135},[129,80085,1718],{"class":135},[129,80087,80032],{"class":139},[129,80089,54487],{"class":135},[129,80091,80092],{"class":244}," '2'",[129,80094,12457],{"class":139},[129,80096,80097,80099,80101,80103,80105,80107,80109,80111,80113,80115,80117,80119,80121,80123,80126],{"class":131,"line":33484},[129,80098,80044],{"class":139},[129,80100,185],{"class":135},[129,80102,80049],{"class":139},[129,80104,80052],{"class":1977},[129,80106,140],{"class":139},[129,80108,79796],{"class":5231},[129,80110,79799],{"class":135},[129,80112,80061],{"class":139},[129,80114,1724],{"class":135},[129,80116,5769],{"class":188},[129,80118,80068],{"class":135},[129,80120,80061],{"class":139},[129,80122,1602],{"class":135},[129,80124,80125],{"class":188}," 300",[129,80127,146],{"class":139},[129,80129,80130,80132,80134,80136,80138,80140,80143],{"class":131,"line":33490},[129,80131,80081],{"class":139},[129,80133,1715],{"class":135},[129,80135,1718],{"class":135},[129,80137,80032],{"class":139},[129,80139,54487],{"class":135},[129,80141,80142],{"class":244}," '3'",[129,80144,12457],{"class":139},[129,80146,80147,80149,80151,80153,80155,80157,80159,80161,80163,80165,80167],{"class":131,"line":33501},[129,80148,80044],{"class":139},[129,80150,185],{"class":135},[129,80152,80049],{"class":139},[129,80154,80052],{"class":1977},[129,80156,140],{"class":139},[129,80158,79796],{"class":5231},[129,80160,79799],{"class":135},[129,80162,80061],{"class":139},[129,80164,1724],{"class":135},[129,80166,80125],{"class":188},[129,80168,146],{"class":139},[129,80170,80171],{"class":131,"line":33507},[129,80172,2543],{"class":139},[129,80174,80175],{"class":131,"line":33527},[129,80176,80177],{"class":198},"        \u002F\u002F 渲染函数\n",[129,80179,80180,80182],{"class":131,"line":33533},[129,80181,70409],{"class":1977},[129,80183,52413],{"class":139},[129,80185,80186],{"class":131,"line":33539},[129,80187,52399],{"class":139},[129,80189,80190],{"class":131,"line":33545},[129,80191,2414],{"emptyLinePlaceholder":56},[129,80193,80194],{"class":131,"line":33562},[129,80195,33462],{"class":139},[129,80197,80198,80200,80202],{"class":131,"line":33568},[129,80199,52418],{"class":139},[129,80201,51814],{"class":51301},[129,80203,51308],{"class":139},[129,80205,80206,80208,80210],{"class":131,"line":33574},[129,80207,51786],{"class":139},[129,80209,51801],{"class":51301},[129,80211,51308],{"class":139},[129,80213,80214],{"class":131,"line":33580},[129,80215,2414],{"emptyLinePlaceholder":56},[129,80217,80218,80220,80222],{"class":131,"line":33586},[129,80219,51786],{"class":139},[129,80221,50636],{"class":51301},[129,80223,51308],{"class":139},[71,80225,80227],{"id":80226},"_410-深入了解对象","4.10 深入了解对象",[100,80229,80231],{"id":80230},"_4101-创建对象","4.10.1 创建对象",[14,80233,80234],{},[40,80235],{"alt":42,"src":80236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80238,80239],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[100,80241,80243],{"id":80242},"_4102-构造函数","4.10.2 构造函数",[14,80245,80246,80249],{},[289,80247,80248],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80251,80252,80255],{},[289,80253,80254],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[120,80257,80259],{"className":50634,"code":80258,"language":50636,"meta":42,"style":42},"\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",[126,80260,80261,80269,80274,80295,80308,80320,80332,80336,80341,80368,80373,80400],{"__ignoreMap":42},[129,80262,80263,80265,80267],{"class":131,"line":132},[129,80264,1049],{"class":139},[129,80266,51814],{"class":51301},[129,80268,51308],{"class":139},[129,80270,80271],{"class":131,"line":51},[129,80272,80273],{"class":198},"\u002F\u002F例：\n",[129,80275,80276,80278,80281,80283,80285,80287,80289,80291,80293],{"class":131,"line":1194},[129,80277,54450],{"class":135},[129,80279,80280],{"class":1977}," Pig",[129,80282,140],{"class":139},[129,80284,79811],{"class":5231},[129,80286,517],{"class":139},[129,80288,70222],{"class":5231},[129,80290,517],{"class":139},[129,80292,70239],{"class":5231},[129,80294,12457],{"class":139},[129,80296,80297,80300,80303,80305],{"class":131,"line":1209},[129,80298,80299],{"class":188},"    this",[129,80301,80302],{"class":139},".name",[129,80304,185],{"class":135},[129,80306,80307],{"class":139},"name\n",[129,80309,80310,80312,80315,80317],{"class":131,"line":1215},[129,80311,80299],{"class":188},[129,80313,80314],{"class":139},".age",[129,80316,185],{"class":135},[129,80318,80319],{"class":139},"age\n",[129,80321,80322,80324,80327,80329],{"class":131,"line":1229},[129,80323,80299],{"class":188},[129,80325,80326],{"class":139},".gender",[129,80328,185],{"class":135},[129,80330,80331],{"class":139},"gender    \n",[129,80333,80334],{"class":131,"line":1235},[129,80335,1579],{"class":139},[129,80337,80338],{"class":131,"line":1326},[129,80339,80340],{"class":198},"\u002F\u002F创建佩奇对象\n",[129,80342,80343,80345,80348,80350,80352,80354,80357,80359,80361,80363,80366],{"class":131,"line":1332},[129,80344,6807],{"class":135},[129,80346,80347],{"class":188}," Peppa",[129,80349,11732],{"class":135},[129,80351,80280],{"class":1977},[129,80353,140],{"class":139},[129,80355,80356],{"class":244},"'佩奇'",[129,80358,517],{"class":139},[129,80360,483],{"class":188},[129,80362,517],{"class":139},[129,80364,80365],{"class":244},"'女'",[129,80367,146],{"class":139},[129,80369,80370],{"class":131,"line":1344},[129,80371,80372],{"class":198},"\u002F\u002F创建乔治对象\n",[129,80374,80375,80377,80380,80382,80384,80386,80389,80391,80393,80395,80398],{"class":131,"line":1626},[129,80376,6807],{"class":135},[129,80378,80379],{"class":188}," George",[129,80381,11732],{"class":135},[129,80383,80280],{"class":1977},[129,80385,140],{"class":139},[129,80387,80388],{"class":244},"'乔治'",[129,80390,517],{"class":139},[129,80392,211],{"class":188},[129,80394,517],{"class":139},[129,80396,80397],{"class":244},"'男'",[129,80399,146],{"class":139},[129,80401,80402,80404,80406],{"class":131,"line":1631},[129,80403,51786],{"class":139},[129,80405,51814],{"class":51301},[129,80407,51308],{"class":139},[14,80409,80410],{},[40,80411],{"alt":42,"src":80412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80414,80415],{},[40,80416],{"alt":42,"src":80417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80419,80420],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80422,80423],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80425,80426],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80428,80429],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80431,80432],{},"这里用等号是因为：对象.属性=值",[14,80434,80435],{},"①利用对象字面量创建对象",[14,80437,80438],{},"const o={",[14,80440,80441],{},"name:'pink'",[14,80443,80444],{},"} ②利用new Object创建对象",[14,80446,80447],{},"const o=new Object({name:'pink'})",[14,80449,80450],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80452,80453],{},"构造函数创建对象的执行过程：",[14,80455,80456],{},[40,80457],{"alt":42,"src":80458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[100,80460,80462],{"id":80461},"_4103-实例成员","4.10.3 实例成员",[14,80464,80465],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[83,80467,80468,80471,80474],{},[86,80469,80470],{},"实例对象的属性和方法即为实例成员",[86,80472,80473],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[86,80475,80476],{},"构造函数创建的实例对象彼此独立互不影响",[100,80478,80480],{"id":80479},"_4104-静态成员","4.10.4 静态成员",[14,80482,80483],{},[40,80484],{"alt":42,"src":80485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80487,80488],{},"静态成员有Date.now() Math.PI Math.random()",[14,80490,80491],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80493,80494],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80496,80497],{},"function Pig(name) n {",[14,80499,80500],{},"this.name=name",[14,80502,1085],{},[14,80504,80505],{},"Pig.eyes=2",[14,80507,80508],{},"Pig.sayHai=function () { console.log(this) }",[14,80510,80511],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80513,80514],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80516,11347],{},[83,80518,80519,80522,80525,80528,80531],{},[86,80520,80521],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[86,80523,80524],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[86,80526,80527],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[86,80529,80530],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[86,80532,80533],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80535,80536],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[100,80538,80540],{"id":80539},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80542,80543],{},"内置构造函数包含：",[14,80545,80546],{},[40,80547],{"alt":42,"src":80548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80550,80551],{},[40,80552],{"alt":42,"src":80553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80555,80556],{},"这些基本数据类型，js对他们进行了包装",[51814,80558,80559],{},"\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",[22013,80561,80563],{"id":80562},"_41051-object","4.10.5.1 Object",[14,80565,80566],{},"Object 是内置的构造函数，用于创建普通对象",[14,80568,80569],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[120,80571,80573],{"className":50634,"code":80572,"language":50636,"meta":42,"style":42},"const user=new Object({name:'小明',age:15})\n",[126,80574,80575],{"__ignoreMap":42},[129,80576,80577],{"class":131,"line":132},[129,80578,80572],{"class":139},[14,80580,80581],{},"三个常用的静态方法：",[22925,80583,80585],{"id":80584},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80587,80588],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80590,80591],{},[40,80592],{"alt":42,"src":80593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80595,80596],{},[40,80597],{"alt":42,"src":80598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[120,80600,80602],{"className":53068,"code":80601,"language":53070,"meta":42,"style":42},"\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",[126,80603,80604,80612,80620,80625,80630,80635,80640,80645,80650,80658],{"__ignoreMap":42},[129,80605,80606,80608,80610],{"class":131,"line":132},[129,80607,1049],{"class":139},[129,80609,51801],{"class":51301},[129,80611,51308],{"class":139},[129,80613,80614,80616,80618],{"class":131,"line":51},[129,80615,52145],{"class":139},[129,80617,51814],{"class":51301},[129,80619,51308],{"class":139},[129,80621,80622],{"class":131,"line":1194},[129,80623,80624],{"class":139},"    const o = { name: 'pink', age: 6 }\n",[129,80626,80627],{"class":131,"line":1209},[129,80628,80629],{"class":139},"    \u002F\u002F 获得所有属性名\n",[129,80631,80632],{"class":131,"line":1215},[129,80633,80634],{"class":139},"    const arr = Object.keys(o)\n",[129,80636,80637],{"class":131,"line":1229},[129,80638,80639],{"class":139},"    console.log(arr)\n",[129,80641,80642],{"class":131,"line":1235},[129,80643,80644],{"class":139},"    \u002F\u002F 获得所有属性值\n",[129,80646,80647],{"class":131,"line":1326},[129,80648,80649],{"class":139},"    console.log(Object.values(o))\n",[129,80651,80652,80654,80656],{"class":131,"line":1332},[129,80653,52418],{"class":139},[129,80655,51814],{"class":51301},[129,80657,51308],{"class":139},[129,80659,80660,80662,80664],{"class":131,"line":1344},[129,80661,51786],{"class":139},[129,80663,51801],{"class":51301},[129,80665,51308],{"class":139},[22925,80667,80669],{"id":80668},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80671,80672],{},"Object.assign(oo,o)",[14,80674,80675],{},"后的东西添加给前 是追加",[14,80677,80678],{},[40,80679],{"alt":42,"src":80680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80682,80683],{},[40,80684],{"alt":42,"src":80685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[120,80687,80689],{"className":53068,"code":80688,"language":53070,"meta":42,"style":42},"\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",[126,80690,80691,80699,80707,80711,80715,80719,80723,80727,80731,80736,80741,80746,80751,80756,80764],{"__ignoreMap":42},[129,80692,80693,80695,80697],{"class":131,"line":132},[129,80694,1049],{"class":139},[129,80696,51801],{"class":51301},[129,80698,51308],{"class":139},[129,80700,80701,80703,80705],{"class":131,"line":51},[129,80702,52145],{"class":139},[129,80704,51814],{"class":51301},[129,80706,51308],{"class":139},[129,80708,80709],{"class":131,"line":1194},[129,80710,80624],{"class":139},[129,80712,80713],{"class":131,"line":1209},[129,80714,80629],{"class":139},[129,80716,80717],{"class":131,"line":1215},[129,80718,80634],{"class":139},[129,80720,80721],{"class":131,"line":1229},[129,80722,80639],{"class":139},[129,80724,80725],{"class":131,"line":1235},[129,80726,80644],{"class":139},[129,80728,80729],{"class":131,"line":1326},[129,80730,80649],{"class":139},[129,80732,80733],{"class":131,"line":1332},[129,80734,80735],{"class":139},"    const oo = {}\n",[129,80737,80738],{"class":131,"line":1344},[129,80739,80740],{"class":139},"    Object.assign(oo, o)\n",[129,80742,80743],{"class":131,"line":1626},[129,80744,80745],{"class":139},"    console.log(oo)\n",[129,80747,80748],{"class":131,"line":1631},[129,80749,80750],{"class":139},"    Object.assign(o, { gender: '女' })\n",[129,80752,80753],{"class":131,"line":1637},[129,80754,80755],{"class":139},"    console.log(o)\n",[129,80757,80758,80760,80762],{"class":131,"line":1642},[129,80759,52418],{"class":139},[129,80761,51814],{"class":51301},[129,80763,51308],{"class":139},[129,80765,80766,80768,80770],{"class":131,"line":1656},[129,80767,51786],{"class":139},[129,80769,51801],{"class":51301},[129,80771,51308],{"class":139},[14,80773,80774],{},[40,80775],{"alt":42,"src":80776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22013,80778,80780],{"id":80779},"_41052-array","4.10.5.2 Array",[14,80782,80783],{},"Array 是内置的构造函数，用于创建数组",[14,80785,80786],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[120,80788,80790],{"className":50634,"code":80789,"language":50636,"meta":42,"style":42},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[126,80791,80792,80797],{"__ignoreMap":42},[129,80793,80794],{"class":131,"line":132},[129,80795,80796],{"class":139},"const arr=new Array(3,5)\n",[129,80798,80799],{"class":131,"line":51},[129,80800,80801],{"class":139},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80803,80804],{},"Array的实例方法，这个方法是实例成员",[14,80806,80807],{},[40,80808],{"alt":42,"src":80809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22925,80811,80813],{"id":80812},"_410521-reduce","4.10.5.2.1 reduce",[14,80815,80816],{},[40,80817],{"alt":42,"src":80818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[120,80820,80822],{"className":53068,"code":80821,"language":53070,"meta":42,"style":42},"\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",[126,80823,80824,80832,80840,80845,80850,80855,80860,80864,80869,80874,80879,80883,80888,80893,80897,80902,80907,80912,80920],{"__ignoreMap":42},[129,80825,80826,80828,80830],{"class":131,"line":132},[129,80827,1049],{"class":139},[129,80829,51801],{"class":51301},[129,80831,51308],{"class":139},[129,80833,80834,80836,80838],{"class":131,"line":51},[129,80835,52145],{"class":139},[129,80837,51814],{"class":51301},[129,80839,51308],{"class":139},[129,80841,80842],{"class":131,"line":1194},[129,80843,80844],{"class":139},"    const arr = [1, 5, 8]\n",[129,80846,80847],{"class":131,"line":1209},[129,80848,80849],{"class":139},"    \u002F\u002F 1.没有初始值\n",[129,80851,80852],{"class":131,"line":1215},[129,80853,80854],{"class":139},"    const total = arr.reduce(function (prev, current) {\n",[129,80856,80857],{"class":131,"line":1229},[129,80858,80859],{"class":139},"      return prev + current\n",[129,80861,80862],{"class":131,"line":1235},[129,80863,33462],{"class":139},[129,80865,80866],{"class":131,"line":1326},[129,80867,80868],{"class":139},"    console.log(total)   \u002F\u002F14\n",[129,80870,80871],{"class":131,"line":1332},[129,80872,80873],{"class":139},"    \u002F\u002F 2.有初始值\n",[129,80875,80876],{"class":131,"line":1344},[129,80877,80878],{"class":139},"    const total1 = arr.reduce(function (prev, current) {\n",[129,80880,80881],{"class":131,"line":1626},[129,80882,80859],{"class":139},[129,80884,80885],{"class":131,"line":1631},[129,80886,80887],{"class":139},"    }, 10)\n",[129,80889,80890],{"class":131,"line":1637},[129,80891,80892],{"class":139},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[129,80894,80895],{"class":131,"line":1642},[129,80896,2414],{"emptyLinePlaceholder":56},[129,80898,80899],{"class":131,"line":1656},[129,80900,80901],{"class":139},"    \u002F\u002F 3.箭头函数写法\n",[129,80903,80904],{"class":131,"line":1661},[129,80905,80906],{"class":139},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[129,80908,80909],{"class":131,"line":1667},[129,80910,80911],{"class":139},"    console.log(total2)   \u002F\u002F24\n",[129,80913,80914,80916,80918],{"class":131,"line":1688},[129,80915,52418],{"class":139},[129,80917,51814],{"class":51301},[129,80919,51308],{"class":139},[129,80921,80922,80924,80926],{"class":131,"line":1693},[129,80923,51786],{"class":139},[129,80925,51801],{"class":51301},[129,80927,51308],{"class":139},[14,80929,80930],{},"执行过程：",[83,80932,80933,80936,80939],{},[86,80934,80935],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[86,80937,80938],{},"每一次循环，把返回值给作为下一次循环的上一次值",[86,80940,80941],{},"如果有起始值，则起始值作为上一次值",[120,80943,80945],{"className":53068,"code":80944,"language":53070,"meta":42,"style":42},"\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",[126,80946,80947,80955,80963,80967,80971,80975,80979,80983,80987,80992,80997,81002,81007,81012,81016,81020,81024,81028,81032,81036,81041,81045,81050,81054,81059,81064,81068,81072,81076,81084],{"__ignoreMap":42},[129,80948,80949,80951,80953],{"class":131,"line":132},[129,80950,1049],{"class":139},[129,80952,51801],{"class":51301},[129,80954,51308],{"class":139},[129,80956,80957,80959,80961],{"class":131,"line":51},[129,80958,52145],{"class":139},[129,80960,51814],{"class":51301},[129,80962,51308],{"class":139},[129,80964,80965],{"class":131,"line":1194},[129,80966,80844],{"class":139},[129,80968,80969],{"class":131,"line":1209},[129,80970,80849],{"class":139},[129,80972,80973],{"class":131,"line":1215},[129,80974,80854],{"class":139},[129,80976,80977],{"class":131,"line":1229},[129,80978,80859],{"class":139},[129,80980,80981],{"class":131,"line":1235},[129,80982,33462],{"class":139},[129,80984,80985],{"class":131,"line":1326},[129,80986,80868],{"class":139},[129,80988,80989],{"class":131,"line":1332},[129,80990,80991],{"class":139},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[129,80993,80994],{"class":131,"line":1344},[129,80995,80996],{"class":139},"    \u002F\u002F     1              5                    6\n",[129,80998,80999],{"class":131,"line":1626},[129,81000,81001],{"class":139},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[129,81003,81004],{"class":131,"line":1631},[129,81005,81006],{"class":139},"    \u002F\u002F     6              8                    14\n",[129,81008,81009],{"class":131,"line":1637},[129,81010,81011],{"class":139},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[129,81013,81014],{"class":131,"line":1642},[129,81015,80873],{"class":139},[129,81017,81018],{"class":131,"line":1656},[129,81019,80878],{"class":139},[129,81021,81022],{"class":131,"line":1661},[129,81023,80859],{"class":139},[129,81025,81026],{"class":131,"line":1667},[129,81027,80887],{"class":139},[129,81029,81030],{"class":131,"line":1688},[129,81031,80892],{"class":139},[129,81033,81034],{"class":131,"line":1693},[129,81035,80991],{"class":139},[129,81037,81038],{"class":131,"line":1707},[129,81039,81040],{"class":139},"    \u002F\u002F     10             1                     11\n",[129,81042,81043],{"class":131,"line":1712},[129,81044,81001],{"class":139},[129,81046,81047],{"class":131,"line":1741},[129,81048,81049],{"class":139},"    \u002F\u002F     11             5                    16\n",[129,81051,81052],{"class":131,"line":1746},[129,81053,81001],{"class":139},[129,81055,81056],{"class":131,"line":1763},[129,81057,81058],{"class":139},"    \u002F\u002F     16             8                    24\n",[129,81060,81061],{"class":131,"line":1768},[129,81062,81063],{"class":139},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[129,81065,81066],{"class":131,"line":1773},[129,81067,80901],{"class":139},[129,81069,81070],{"class":131,"line":1778},[129,81071,80906],{"class":139},[129,81073,81074],{"class":131,"line":1792},[129,81075,80911],{"class":139},[129,81077,81078,81080,81082],{"class":131,"line":1797},[129,81079,52418],{"class":139},[129,81081,51814],{"class":51301},[129,81083,51308],{"class":139},[129,81085,81086,81088,81090],{"class":131,"line":2591},[129,81087,51786],{"class":139},[129,81089,51801],{"class":51301},[129,81091,51308],{"class":139},[22925,81093,81095],{"id":81094},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81097,81098],{},[40,81099],{"alt":42,"src":81100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[120,81102,81104],{"className":53068,"code":81103,"language":53070,"meta":42,"style":42},"\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",[126,81105,81106,81114,81122,81127,81132,81137,81142,81146,81151,81156,81161,81166,81171,81176,81180,81185,81189,81194,81202],{"__ignoreMap":42},[129,81107,81108,81110,81112],{"class":131,"line":132},[129,81109,1049],{"class":139},[129,81111,51801],{"class":51301},[129,81113,51308],{"class":139},[129,81115,81116,81118,81120],{"class":131,"line":51},[129,81117,52145],{"class":139},[129,81119,51814],{"class":51301},[129,81121,51308],{"class":139},[129,81123,81124],{"class":131,"line":1194},[129,81125,81126],{"class":139},"    const arr = [\n",[129,81128,81129],{"class":131,"line":1209},[129,81130,81131],{"class":139},"      { name: '张三', salary: 10000 },\n",[129,81133,81134],{"class":131,"line":1215},[129,81135,81136],{"class":139},"      { name: '李四', salary: 10000 },\n",[129,81138,81139],{"class":131,"line":1229},[129,81140,81141],{"class":139},"      { name: '王五', salary: 10000 }\n",[129,81143,81144],{"class":131,"line":1235},[129,81145,53110],{"class":139},[129,81147,81148],{"class":131,"line":1326},[129,81149,81150],{"class":139},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[129,81152,81153],{"class":131,"line":1332},[129,81154,81155],{"class":139},"    \u002F\u002F prev是累计值\n",[129,81157,81158],{"class":131,"line":1344},[129,81159,81160],{"class":139},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[129,81162,81163],{"class":131,"line":1626},[129,81164,81165],{"class":139},"    console.log(total)\n",[129,81167,81168],{"class":131,"line":1631},[129,81169,81170],{"class":139},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[129,81172,81173],{"class":131,"line":1637},[129,81174,81175],{"class":139},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[129,81177,81178],{"class":131,"line":1642},[129,81179,81170],{"class":139},[129,81181,81182],{"class":131,"line":1656},[129,81183,81184],{"class":139},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[129,81186,81187],{"class":131,"line":1661},[129,81188,81170],{"class":139},[129,81190,81191],{"class":131,"line":1667},[129,81192,81193],{"class":139},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[129,81195,81196,81198,81200],{"class":131,"line":1688},[129,81197,52418],{"class":139},[129,81199,51814],{"class":51301},[129,81201,51308],{"class":139},[129,81203,81204,81206,81208],{"class":131,"line":1693},[129,81205,51786],{"class":139},[129,81207,51801],{"class":51301},[129,81209,51308],{"class":139},[22925,81211,81213],{"id":81212},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81215,81216],{},[40,81217],{"alt":42,"src":81218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81220,81221],{},[40,81222],{"alt":42,"src":81223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[83,81225,81226],{},[86,81227,81228],{},"find()",[14,81230,81231],{},"循环查找，找到第一个就ok",[14,81233,81234],{},[20,81235,81238],{"href":81236,"rel":81237},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[120,81240,81242],{"className":50634,"code":81241,"language":50636,"meta":42,"style":42},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[126,81243,81244,81249,81254],{"__ignoreMap":42},[129,81245,81246],{"class":131,"line":132},[129,81247,81248],{"class":139},"const array1 = [5, 12, 8, 130, 44]\n",[129,81250,81251],{"class":131,"line":51},[129,81252,81253],{"class":139},"const found = array1.find((element) => element > 10)\n",[129,81255,81256],{"class":131,"line":1194},[129,81257,81258],{"class":139},"console.log(found)  \u002F\u002F12\n",[14,81260,81261,81263,81264,81269,81270,81273,81274,81276,81277,81282,81283,81285,81286,81288,81289,81291,81292],{},[126,81262,81228],{}," 方法是一个",[20,81265,81268],{"href":81266,"rel":81267},"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",[24],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[126,81271,81272],{},"callbackFn"," 函数，直到 ",[126,81275,81272],{}," 返回一个",[20,81278,81281],{"href":81279,"rel":81280},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24],"真值","。然后 ",[126,81284,81228],{}," 返回该元素并停止迭代数组。如果 ",[126,81287,81272],{}," 从未返回真值，则 ",[126,81290,81228],{}," 返回 ",[126,81293,81294],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[120,81296,81298],{"className":53068,"code":81297,"language":53070,"meta":42,"style":42},"\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",[126,81299,81300,81308,81316,81321,81326,81331,81335,81340,81345,81349,81354,81359,81363,81367,81372,81377,81381,81385,81390,81395,81400,81405,81410,81414,81419,81424,81429,81434,81438,81443,81451],{"__ignoreMap":42},[129,81301,81302,81304,81306],{"class":131,"line":132},[129,81303,1049],{"class":139},[129,81305,51801],{"class":51301},[129,81307,51308],{"class":139},[129,81309,81310,81312,81314],{"class":131,"line":51},[129,81311,52145],{"class":139},[129,81313,51814],{"class":51301},[129,81315,51308],{"class":139},[129,81317,81318],{"class":131,"line":1194},[129,81319,81320],{"class":139},"    const arr = ['red', 'blue', 'green']\n",[129,81322,81323],{"class":131,"line":1209},[129,81324,81325],{"class":139},"    const found = arr.find(item => item === 'pink')\n",[129,81327,81328],{"class":131,"line":1215},[129,81329,81330],{"class":139},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[129,81332,81333],{"class":131,"line":1229},[129,81334,2414],{"emptyLinePlaceholder":56},[129,81336,81337],{"class":131,"line":1235},[129,81338,81339],{"class":139},"    \u002F\u002F 使用场景，用于查找数据\n",[129,81341,81342],{"class":131,"line":1326},[129,81343,81344],{"class":139},"    const arr1 = [\n",[129,81346,81347],{"class":131,"line":1332},[129,81348,79387],{"class":139},[129,81350,81351],{"class":131,"line":1344},[129,81352,81353],{"class":139},"        name: '小米',\n",[129,81355,81356],{"class":131,"line":1626},[129,81357,81358],{"class":139},"        price: 1999\n",[129,81360,81361],{"class":131,"line":1631},[129,81362,77893],{"class":139},[129,81364,81365],{"class":131,"line":1637},[129,81366,79387],{"class":139},[129,81368,81369],{"class":131,"line":1642},[129,81370,81371],{"class":139},"        name: '华为',\n",[129,81373,81374],{"class":131,"line":1656},[129,81375,81376],{"class":139},"        price: 3999\n",[129,81378,81379],{"class":131,"line":1661},[129,81380,52399],{"class":139},[129,81382,81383],{"class":131,"line":1667},[129,81384,53110],{"class":139},[129,81386,81387],{"class":131,"line":1688},[129,81388,81389],{"class":139},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[129,81391,81392],{"class":131,"line":1693},[129,81393,81394],{"class":139},"    \u002F\u002F const found1 = arr1.find(item => {\n",[129,81396,81397],{"class":131,"line":1707},[129,81398,81399],{"class":139},"    \u002F\u002F   if (item.name === '小米') {\n",[129,81401,81402],{"class":131,"line":1712},[129,81403,81404],{"class":139},"    \u002F\u002F     return item\n",[129,81406,81407],{"class":131,"line":1741},[129,81408,81409],{"class":139},"    \u002F\u002F   }\n",[129,81411,81412],{"class":131,"line":1746},[129,81413,63291],{"class":139},[129,81415,81416],{"class":131,"line":1763},[129,81417,81418],{"class":139},"    \u002F\u002F 另一种写法\n",[129,81420,81421],{"class":131,"line":1768},[129,81422,81423],{"class":139},"    const found1 = arr1.find(item => {\n",[129,81425,81426],{"class":131,"line":1773},[129,81427,81428],{"class":139},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[129,81430,81431],{"class":131,"line":1778},[129,81432,81433],{"class":139},"      return item.name = '小米'\n",[129,81435,81436],{"class":131,"line":1792},[129,81437,33462],{"class":139},[129,81439,81440],{"class":131,"line":1797},[129,81441,81442],{"class":139},"    console.log(found1)\n",[129,81444,81445,81447,81449],{"class":131,"line":2591},[129,81446,52418],{"class":139},[129,81448,51814],{"class":51301},[129,81450,51308],{"class":139},[129,81452,81453,81455,81457],{"class":131,"line":2605},[129,81454,51786],{"class":139},[129,81456,51801],{"class":51301},[129,81458,51308],{"class":139},[14,81460,81461],{},[40,81462],{"alt":42,"src":81463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81465,81466],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[83,81468,81469],{"start":51},[86,81470,81471],{},"every()返回的是布尔值",[14,81473,81474],{},[20,81475,81478],{"href":81476,"rel":81477},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81480,81481],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81483,81484],{},"some是只有有一个就没问题",[14,81486,81487],{},"every是必须全是才行",[120,81489,81493],{"className":81490,"code":81491,"language":81492,"meta":42,"style":42},"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",[126,81494,81495,81511,81525,81529,81538],{"__ignoreMap":42},[129,81496,81497,81499,81502,81504,81506,81509],{"class":131,"line":132},[129,81498,54450],{"class":135},[129,81500,81501],{"class":139}," isBigEnough(element, ",[129,81503,74059],{"class":135},[129,81505,12450],{"class":139},[129,81507,81508],{"class":135},"array",[129,81510,12457],{"class":139},[129,81512,81513,81516,81519,81521,81523],{"class":131,"line":51},[129,81514,81515],{"class":135},"  return",[129,81517,81518],{"class":139}," element ",[129,81520,1724],{"class":135},[129,81522,2052],{"class":188},[129,81524,1305],{"class":139},[129,81526,81527],{"class":131,"line":1194},[129,81528,1579],{"class":139},[129,81530,81531,81534,81536],{"class":131,"line":1209},[129,81532,81533],{"class":139},"[12, 5, 8, 130, 44].every(isBigEnough); ",[129,81535,33330],{"class":135},[129,81537,54517],{"class":139},[129,81539,81540,81543,81545],{"class":131,"line":1215},[129,81541,81542],{"class":139},"[12, 54, 18, 130, 44].every(isBigEnough); ",[129,81544,33330],{"class":135},[129,81546,57941],{"class":139},[120,81548,81550],{"className":53068,"code":81549,"language":53070,"meta":42,"style":42},"\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",[126,81551,81552,81560,81568,81573,81577,81582,81587,81595],{"__ignoreMap":42},[129,81553,81554,81556,81558],{"class":131,"line":132},[129,81555,1049],{"class":139},[129,81557,51801],{"class":51301},[129,81559,51308],{"class":139},[129,81561,81562,81564,81566],{"class":131,"line":51},[129,81563,52145],{"class":139},[129,81565,51814],{"class":51301},[129,81567,51308],{"class":139},[129,81569,81570],{"class":131,"line":1194},[129,81571,81572],{"class":139},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[129,81574,81575],{"class":131,"line":1209},[129,81576,78323],{"class":139},[129,81578,81579],{"class":131,"line":1215},[129,81580,81581],{"class":139},"    const flag = arr.every(item => item >= 10)\n",[129,81583,81584],{"class":131,"line":1229},[129,81585,81586],{"class":139},"    console.log(flag)    \u002F\u002Ftrue\n",[129,81588,81589,81591,81593],{"class":131,"line":1235},[129,81590,52418],{"class":139},[129,81592,51814],{"class":51301},[129,81594,51308],{"class":139},[129,81596,81597,81599,81601],{"class":131,"line":1326},[129,81598,51786],{"class":139},[129,81600,51801],{"class":51301},[129,81602,51308],{"class":139},[120,81604,81606],{"className":53068,"code":81605,"language":53070,"meta":42,"style":42},"\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",[126,81607,81608,81616,81624,81628,81633,81638,81643,81651],{"__ignoreMap":42},[129,81609,81610,81612,81614],{"class":131,"line":132},[129,81611,1049],{"class":139},[129,81613,51801],{"class":51301},[129,81615,51308],{"class":139},[129,81617,81618,81620,81622],{"class":131,"line":51},[129,81619,52145],{"class":139},[129,81621,51814],{"class":51301},[129,81623,51308],{"class":139},[129,81625,81626],{"class":131,"line":1194},[129,81627,81572],{"class":139},[129,81629,81630],{"class":131,"line":1209},[129,81631,81632],{"class":139},"    const arr = [10, 0, 5]\n",[129,81634,81635],{"class":131,"line":1215},[129,81636,81637],{"class":139},"    const flag = arr.some(item => item >= 10)\n",[129,81639,81640],{"class":131,"line":1229},[129,81641,81642],{"class":139},"    console.log(flag)   \u002F\u002Ftrue\n",[129,81644,81645,81647,81649],{"class":131,"line":1235},[129,81646,52418],{"class":139},[129,81648,51814],{"class":51301},[129,81650,51308],{"class":139},[129,81652,81653,81655,81657],{"class":131,"line":1326},[129,81654,51786],{"class":139},[129,81656,51801],{"class":51301},[129,81658,51308],{"class":139},[22925,81660,81662],{"id":81661},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81664,81665],{},[40,81666],{"alt":42,"src":81667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[120,81669,81671],{"className":50634,"code":81670,"language":50636,"meta":42,"style":42},"\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",[126,81672,81673,81683,81697,81701,81709,81723,81743,81755,81763,81770,81782,81794,81806,81818,81828,81838,81842,81850,81858,81862,81870,81882,81890,81912,81917,81922,81955,81963,81971,81975],{"__ignoreMap":42},[129,81674,81675,81677,81679,81681],{"class":131,"line":132},[129,81676,51298],{"class":139},[129,81678,51302],{"class":51301},[129,81680,51305],{"class":1977},[129,81682,51308],{"class":139},[129,81684,81685,81687,81689,81691,81693,81695],{"class":131,"line":51},[129,81686,1049],{"class":139},[129,81688,50636],{"class":51301},[129,81690,51317],{"class":1977},[129,81692,185],{"class":139},[129,81694,51322],{"class":244},[129,81696,51308],{"class":139},[129,81698,81699],{"class":131,"line":1194},[129,81700,2414],{"emptyLinePlaceholder":56},[129,81702,81703,81705,81707],{"class":131,"line":1209},[129,81704,1049],{"class":139},[129,81706,51335],{"class":51301},[129,81708,51308],{"class":139},[129,81710,81711,81713,81715,81717,81719,81721],{"class":131,"line":1215},[129,81712,52145],{"class":139},[129,81714,51345],{"class":51301},[129,81716,51348],{"class":1977},[129,81718,185],{"class":139},[129,81720,51353],{"class":244},[129,81722,51308],{"class":139},[129,81724,81725,81727,81729,81731,81733,81735,81737,81739,81741],{"class":131,"line":1229},[129,81726,52145],{"class":139},[129,81728,51345],{"class":51301},[129,81730,14935],{"class":1977},[129,81732,185],{"class":139},[129,81734,51392],{"class":244},[129,81736,51372],{"class":1977},[129,81738,185],{"class":139},[129,81740,51399],{"class":244},[129,81742,51308],{"class":139},[129,81744,81745,81747,81749,81751,81753],{"class":131,"line":1235},[129,81746,52145],{"class":139},[129,81748,51408],{"class":51301},[129,81750,51411],{"class":139},[129,81752,51408],{"class":51301},[129,81754,51308],{"class":139},[129,81756,81757,81759,81761],{"class":131,"line":1326},[129,81758,52145],{"class":139},[129,81760,5141],{"class":51301},[129,81762,51308],{"class":139},[129,81764,81765,81768],{"class":131,"line":1332},[129,81766,81767],{"class":51301},"    div",[129,81769,15587],{"class":139},[129,81771,81772,81774,81776,81778,81780],{"class":131,"line":1344},[129,81773,54772],{"class":188},[129,81775,51438],{"class":139},[129,81777,1736],{"class":188},[129,81779,51493],{"class":135},[129,81781,1305],{"class":139},[129,81783,81784,81786,81788,81790,81792],{"class":131,"line":1626},[129,81785,54786],{"class":188},[129,81787,51438],{"class":139},[129,81789,540],{"class":188},[129,81791,51493],{"class":135},[129,81793,1305],{"class":139},[129,81795,81796,81798,81800,81802,81804],{"class":131,"line":1631},[129,81797,57360],{"class":188},[129,81799,51438],{"class":139},[129,81801,540],{"class":188},[129,81803,51493],{"class":135},[129,81805,1305],{"class":139},[129,81807,81808,81810,81812,81814,81816],{"class":131,"line":1637},[129,81809,65134],{"class":188},[129,81811,51438],{"class":139},[129,81813,637],{"class":188},[129,81815,51493],{"class":135},[129,81817,1305],{"class":139},[129,81819,81820,81822,81824,81826],{"class":131,"line":1642},[129,81821,57287],{"class":188},[129,81823,51438],{"class":139},[129,81825,51593],{"class":188},[129,81827,1305],{"class":139},[129,81829,81830,81832,81834,81836],{"class":131,"line":1656},[129,81831,54885],{"class":188},[129,81833,51438],{"class":139},[129,81835,51646],{"class":188},[129,81837,1305],{"class":139},[129,81839,81840],{"class":131,"line":1661},[129,81841,2201],{"class":139},[129,81843,81844,81846,81848],{"class":131,"line":1667},[129,81845,52418],{"class":139},[129,81847,5141],{"class":51301},[129,81849,51308],{"class":139},[129,81851,81852,81854,81856],{"class":131,"line":1688},[129,81853,51786],{"class":139},[129,81855,51335],{"class":51301},[129,81857,51308],{"class":139},[129,81859,81860],{"class":131,"line":1693},[129,81861,2414],{"emptyLinePlaceholder":56},[129,81863,81864,81866,81868],{"class":131,"line":1707},[129,81865,1049],{"class":139},[129,81867,51801],{"class":51301},[129,81869,51308],{"class":139},[129,81871,81872,81874,81876,81878,81880],{"class":131,"line":1712},[129,81873,52145],{"class":139},[129,81875,51612],{"class":51301},[129,81877,55315],{"class":139},[129,81879,51612],{"class":51301},[129,81881,51308],{"class":139},[129,81883,81884,81886,81888],{"class":131,"line":1741},[129,81885,52145],{"class":139},[129,81887,51814],{"class":51301},[129,81889,51308],{"class":139},[129,81891,81892,81894,81897,81899,81902,81905,81907,81910],{"class":131,"line":1746},[129,81893,11236],{"class":135},[129,81895,81896],{"class":188}," spec",[129,81898,13579],{"class":135},[129,81900,81901],{"class":139}," { size: ",[129,81903,81904],{"class":244},"'40cm*40cm'",[129,81906,55465],{"class":139},[129,81908,81909],{"class":244},"'黑色'",[129,81911,55605],{"class":139},[129,81913,81914],{"class":131,"line":1763},[129,81915,81916],{"class":198},"    \u002F\u002F const arr = Object.values(spec)\n",[129,81918,81919],{"class":131,"line":1768},[129,81920,81921],{"class":198},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[129,81923,81924,81926,81928,81930,81933,81935,81937,81940,81943,81946,81948,81950,81953],{"class":131,"line":1773},[129,81925,52408],{"class":139},[129,81927,54400],{"class":1977},[129,81929,140],{"class":139},[129,81931,81932],{"class":244},"'div'",[129,81934,74250],{"class":139},[129,81936,185],{"class":135},[129,81938,81939],{"class":139}," Object.",[129,81941,81942],{"class":1977},"values",[129,81944,81945],{"class":139},"(spec).",[129,81947,74224],{"class":1977},[129,81949,140],{"class":139},[129,81951,81952],{"class":244},"'\u002F'",[129,81954,146],{"class":139},[129,81956,81957,81959,81961],{"class":131,"line":1778},[129,81958,52418],{"class":139},[129,81960,51814],{"class":51301},[129,81962,51308],{"class":139},[129,81964,81965,81967,81969],{"class":131,"line":1792},[129,81966,51786],{"class":139},[129,81968,51801],{"class":51301},[129,81970,51308],{"class":139},[129,81972,81973],{"class":131,"line":1797},[129,81974,2414],{"emptyLinePlaceholder":56},[129,81976,81977,81979,81981],{"class":131,"line":2591},[129,81978,51786],{"class":139},[129,81980,50636],{"class":51301},[129,81982,51308],{"class":139},[14,81984,81985],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22925,81987,81989],{"id":81988},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,81991,81992],{},"静态方法，将伪数组转换为真数组",[14,81994,81995],{},[40,81996],{"alt":42,"src":81997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[120,81999,82001],{"className":53068,"code":82000,"language":53070,"meta":42,"style":42},"\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",[126,82002,82003,82011,82019,82031,82043,82055,82063,82071,82076,82081,82086,82091,82099],{"__ignoreMap":42},[129,82004,82005,82007,82009],{"class":131,"line":132},[129,82006,1049],{"class":139},[129,82008,51801],{"class":51301},[129,82010,51308],{"class":139},[129,82012,82013,82015,82017],{"class":131,"line":51},[129,82014,52145],{"class":139},[129,82016,1146],{"class":51301},[129,82018,51308],{"class":139},[129,82020,82021,82023,82025,82027,82029],{"class":131,"line":1194},[129,82022,51342],{"class":139},[129,82024,86],{"class":51301},[129,82026,55315],{"class":139},[129,82028,86],{"class":51301},[129,82030,51308],{"class":139},[129,82032,82033,82035,82037,82039,82041],{"class":131,"line":1209},[129,82034,51342],{"class":139},[129,82036,86],{"class":51301},[129,82038,55315],{"class":139},[129,82040,86],{"class":51301},[129,82042,51308],{"class":139},[129,82044,82045,82047,82049,82051,82053],{"class":131,"line":1215},[129,82046,51342],{"class":139},[129,82048,86],{"class":51301},[129,82050,55315],{"class":139},[129,82052,86],{"class":51301},[129,82054,51308],{"class":139},[129,82056,82057,82059,82061],{"class":131,"line":1229},[129,82058,52418],{"class":139},[129,82060,1146],{"class":51301},[129,82062,51308],{"class":139},[129,82064,82065,82067,82069],{"class":131,"line":1235},[129,82066,52145],{"class":139},[129,82068,51814],{"class":51301},[129,82070,51308],{"class":139},[129,82072,82073],{"class":131,"line":1326},[129,82074,82075],{"class":139},"    const lis = document.querySelectorAll('li')\n",[129,82077,82078],{"class":131,"line":1332},[129,82079,82080],{"class":139},"    const liss = Array.from(lis)\n",[129,82082,82083],{"class":131,"line":1344},[129,82084,82085],{"class":139},"    liss.pop()\n",[129,82087,82088],{"class":131,"line":1626},[129,82089,82090],{"class":139},"    console.log(liss)\n",[129,82092,82093,82095,82097],{"class":131,"line":1631},[129,82094,52418],{"class":139},[129,82096,51814],{"class":51301},[129,82098,51308],{"class":139},[129,82100,82101,82103,82105],{"class":131,"line":1637},[129,82102,51786],{"class":139},[129,82104,51801],{"class":51301},[129,82106,51308],{"class":139},[14,82108,82109],{},[40,82110],{"alt":42,"src":82111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22013,82113,82115],{"id":82114},"_41053-string","4.10.5.3 String",[14,82117,82118],{},[40,82119],{"alt":42,"src":82120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22925,82122,82124],{"id":82123},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[120,82126,82128],{"className":53068,"code":82127,"language":53070,"meta":42,"style":42},"\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",[126,82129,82130,82138,82146,82151,82156,82161,82165,82170,82175,82180,82188],{"__ignoreMap":42},[129,82131,82132,82134,82136],{"class":131,"line":132},[129,82133,1049],{"class":139},[129,82135,51801],{"class":51301},[129,82137,51308],{"class":139},[129,82139,82140,82142,82144],{"class":131,"line":51},[129,82141,52145],{"class":139},[129,82143,51814],{"class":51301},[129,82145,51308],{"class":139},[129,82147,82148],{"class":131,"line":1194},[129,82149,82150],{"class":139},"    \u002F\u002F 把字符串转化为数组\n",[129,82152,82153],{"class":131,"line":1209},[129,82154,82155],{"class":139},"    const str = 'pink,red'\n",[129,82157,82158],{"class":131,"line":1215},[129,82159,82160],{"class":139},"    const arr = str.split(',')\n",[129,82162,82163],{"class":131,"line":1229},[129,82164,80639],{"class":139},[129,82166,82167],{"class":131,"line":1235},[129,82168,82169],{"class":139},"    const str1 = '2025-8-25'\n",[129,82171,82172],{"class":131,"line":1326},[129,82173,82174],{"class":139},"    const arr1 = str1.split('-')\n",[129,82176,82177],{"class":131,"line":1332},[129,82178,82179],{"class":139},"    console.log(arr1)\n",[129,82181,82182,82184,82186],{"class":131,"line":1344},[129,82183,52418],{"class":139},[129,82185,51814],{"class":51301},[129,82187,51308],{"class":139},[129,82189,82190,82192,82194],{"class":131,"line":1626},[129,82191,51786],{"class":139},[129,82193,51801],{"class":51301},[129,82195,51308],{"class":139},[22925,82197,82199],{"id":82198},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82201,5196],{},[14,82203,82204],{},"substring(indexStart)",[14,82206,82207],{},"substring(indexStart, indexEnd)",[1146,82209,82210,82221,82233,82243],{},[86,82211,82212,82213,82216,82217,82220],{},"如果省略了 ",[126,82214,82215],{},"indexEnd","，则 ",[126,82218,82219],{},"substring()"," 提取字符直到字符串的末尾",[86,82222,82223,82224,82227,82228,82216,82230,82232],{},"如果 ",[126,82225,82226],{},"indexStart"," 等于 ",[126,82229,82215],{},[126,82231,82219],{}," 返回一个空字符串",[86,82234,82223,82235,82237,82238,82216,82240,82242],{},[126,82236,82226],{}," 大于 ",[126,82239,82215],{},[126,82241,82219],{}," 的效果就像交换了这两个参数一样",[86,82244,82245],{},"结束的索引号不包含想要截取的部分",[120,82247,82249],{"className":81490,"code":82248,"language":81492,"meta":42,"style":42},"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",[126,82250,82251,82263,82267,82301,82331,82335,82366,82370,82397,82427,82457,82461,82492],{"__ignoreMap":42},[129,82252,82253,82256,82258,82261],{"class":131,"line":132},[129,82254,82255],{"class":139},"const anyString ",[129,82257,185],{"class":135},[129,82259,82260],{"class":244}," \"Mozilla\"",[129,82262,1305],{"class":139},[129,82264,82265],{"class":131,"line":51},[129,82266,2414],{"emptyLinePlaceholder":56},[129,82268,82269,82272,82274,82276,82278,82281,82283,82286,82288,82290,82292,82294,82296,82298],{"class":131,"line":1194},[129,82270,82271],{"class":188},"console",[129,82273,697],{"class":139},[129,82275,58248],{"class":188},[129,82277,140],{"class":139},[129,82279,82280],{"class":188},"anyString",[129,82282,697],{"class":139},[129,82284,82285],{"class":188},"substring",[129,82287,140],{"class":139},[129,82289,331],{"class":188},[129,82291,12450],{"class":139},[129,82293,357],{"class":188},[129,82295,75254],{"class":139},[129,82297,33330],{"class":135},[129,82299,82300],{"class":244}," 'M'\n",[129,82302,82303,82305,82307,82309,82311,82313,82315,82317,82319,82321,82323,82325,82327,82329],{"class":131,"line":1209},[129,82304,82271],{"class":188},[129,82306,697],{"class":139},[129,82308,58248],{"class":188},[129,82310,140],{"class":139},[129,82312,82280],{"class":188},[129,82314,697],{"class":139},[129,82316,82285],{"class":188},[129,82318,140],{"class":139},[129,82320,357],{"class":188},[129,82322,12450],{"class":139},[129,82324,331],{"class":188},[129,82326,75254],{"class":139},[129,82328,33330],{"class":135},[129,82330,82300],{"class":244},[129,82332,82333],{"class":131,"line":1215},[129,82334,2414],{"emptyLinePlaceholder":56},[129,82336,82337,82339,82341,82343,82345,82347,82349,82351,82353,82355,82357,82359,82361,82363],{"class":131,"line":1229},[129,82338,82271],{"class":188},[129,82340,697],{"class":139},[129,82342,58248],{"class":188},[129,82344,140],{"class":139},[129,82346,82280],{"class":188},[129,82348,697],{"class":139},[129,82350,82285],{"class":188},[129,82352,140],{"class":139},[129,82354,331],{"class":188},[129,82356,12450],{"class":139},[129,82358,483],{"class":188},[129,82360,75254],{"class":139},[129,82362,33330],{"class":135},[129,82364,82365],{"class":244}," 'Mozill'\n",[129,82367,82368],{"class":131,"line":1235},[129,82369,2414],{"emptyLinePlaceholder":56},[129,82371,82372,82374,82376,82378,82380,82382,82384,82386,82388,82390,82392,82394],{"class":131,"line":1326},[129,82373,82271],{"class":188},[129,82375,697],{"class":139},[129,82377,58248],{"class":188},[129,82379,140],{"class":139},[129,82381,82280],{"class":188},[129,82383,697],{"class":139},[129,82385,82285],{"class":188},[129,82387,140],{"class":139},[129,82389,432],{"class":188},[129,82391,75254],{"class":139},[129,82393,33330],{"class":135},[129,82395,82396],{"class":244}," 'lla'\n",[129,82398,82399,82401,82403,82405,82407,82409,82411,82413,82415,82417,82419,82421,82423,82425],{"class":131,"line":1332},[129,82400,82271],{"class":188},[129,82402,697],{"class":139},[129,82404,58248],{"class":188},[129,82406,140],{"class":139},[129,82408,82280],{"class":188},[129,82410,697],{"class":139},[129,82412,82285],{"class":188},[129,82414,140],{"class":139},[129,82416,432],{"class":188},[129,82418,12450],{"class":139},[129,82420,508],{"class":188},[129,82422,75310],{"class":139},[129,82424,33330],{"class":135},[129,82426,82396],{"class":244},[129,82428,82429,82431,82433,82435,82437,82439,82441,82443,82445,82447,82449,82451,82453,82455],{"class":131,"line":1344},[129,82430,82271],{"class":188},[129,82432,697],{"class":139},[129,82434,58248],{"class":188},[129,82436,140],{"class":139},[129,82438,82280],{"class":188},[129,82440,697],{"class":139},[129,82442,82285],{"class":188},[129,82444,140],{"class":139},[129,82446,508],{"class":188},[129,82448,12450],{"class":139},[129,82450,432],{"class":188},[129,82452,75254],{"class":139},[129,82454,33330],{"class":135},[129,82456,82396],{"class":244},[129,82458,82459],{"class":131,"line":1626},[129,82460,2414],{"emptyLinePlaceholder":56},[129,82462,82463,82465,82467,82469,82471,82473,82475,82477,82479,82481,82483,82485,82487,82489],{"class":131,"line":1631},[129,82464,82271],{"class":188},[129,82466,697],{"class":139},[129,82468,58248],{"class":188},[129,82470,140],{"class":139},[129,82472,82280],{"class":188},[129,82474,697],{"class":139},[129,82476,82285],{"class":188},[129,82478,140],{"class":139},[129,82480,331],{"class":188},[129,82482,12450],{"class":139},[129,82484,508],{"class":188},[129,82486,75254],{"class":139},[129,82488,33330],{"class":135},[129,82490,82491],{"class":244}," 'Mozilla'\n",[129,82493,82494,82496,82498,82500,82502,82504,82506,82508,82510,82512,82514,82516,82518,82520],{"class":131,"line":1637},[129,82495,82271],{"class":188},[129,82497,697],{"class":139},[129,82499,58248],{"class":188},[129,82501,140],{"class":139},[129,82503,82280],{"class":188},[129,82505,697],{"class":139},[129,82507,82285],{"class":188},[129,82509,140],{"class":139},[129,82511,331],{"class":188},[129,82513,12450],{"class":139},[129,82515,585],{"class":188},[129,82517,75254],{"class":139},[129,82519,33330],{"class":135},[129,82521,82491],{"class":244},[22925,82523,82525],{"id":82524},"_410533-startswith","4.10.5.3.3 startsWith",[14,82527,82528,82531,82532,82537,82538,82540,82541],{},[126,82529,82530],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[289,82533,82534],{},[126,82535,82536],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[126,82539,1377],{}," 或 ",[126,82542,66021],{},[120,82544,82546],{"className":77496,"code":82545,"language":77498,"meta":42,"style":42},"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",[126,82547,82548,82560,82579,82584,82604],{"__ignoreMap":42},[129,82549,82550,82552,82555,82557],{"class":131,"line":132},[129,82551,6807],{"class":135},[129,82553,82554],{"class":139}," str1 ",[129,82556,185],{"class":135},[129,82558,82559],{"class":244}," \"Saturday night plans\"\n",[129,82561,82562,82564,82566,82569,82572,82574,82577],{"class":131,"line":51},[129,82563,77533],{"class":139},[129,82565,58248],{"class":1977},[129,82567,82568],{"class":139},"(str1.",[129,82570,82571],{"class":1977},"startsWith",[129,82573,140],{"class":139},[129,82575,82576],{"class":244},"\"Sat\"",[129,82578,30498],{"class":139},[129,82580,82581],{"class":131,"line":1194},[129,82582,82583],{"class":198},"\u002F\u002F Expected output: true\n",[129,82585,82586,82588,82590,82592,82594,82596,82598,82600,82602],{"class":131,"line":1209},[129,82587,77533],{"class":139},[129,82589,58248],{"class":1977},[129,82591,82568],{"class":139},[129,82593,82571],{"class":1977},[129,82595,140],{"class":139},[129,82597,82576],{"class":244},[129,82599,12450],{"class":139},[129,82601,211],{"class":188},[129,82603,30498],{"class":139},[129,82605,82606],{"class":131,"line":1215},[129,82607,82608],{"class":198},"\u002F\u002F Expected output: false\n",[120,82610,82612],{"className":50634,"code":82611,"language":50636,"meta":42,"style":42},"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",[126,82613,82614,82619,82624,82628,82633,82638],{"__ignoreMap":42},[129,82615,82616],{"class":131,"line":132},[129,82617,82618],{"class":139},"startsWith(searchString)\n",[129,82620,82621],{"class":131,"line":51},[129,82622,82623],{"class":139},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[129,82625,82626],{"class":131,"line":1194},[129,82627,2414],{"emptyLinePlaceholder":56},[129,82629,82630],{"class":131,"line":1209},[129,82631,82632],{"class":139},"const str3 = 'pink老师上课中'\n",[129,82634,82635],{"class":131,"line":1215},[129,82636,82637],{"class":139},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[129,82639,82640],{"class":131,"line":1229},[129,82641,82642],{"class":139},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22925,82644,82646],{"id":82645},"_410534-includes","4.10.5.3.4 includes",[14,82648,82649],{},"includes(searchString) includes(searchString, position)",[83,82651,82652],{},[86,82653,82654],{},"searchString:",[14,82656,82657,82658,82660,82661,82666,82667,82672,82673,21515,82676,82679,82680,82683],{},"一个要在 ",[126,82659,1314],{}," 中查找的字符串。",[20,82662,82665],{"href":82663,"rel":82664},"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",[24],"不能是正则表达式","。所有非正则表达式的值都会被",[20,82668,82671],{"href":82669,"rel":82670},"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",[24],"强制转换为字符串","，因此如果该参数被省略或传入 ",[126,82674,82675],{},"undefined",[126,82677,82678],{},"includes()"," 方法会在字符串中搜索 ",[126,82681,82682],{},"\"undefined\"","，这通常不是你想要的",[83,82685,82686],{"start":51},[86,82687,82688,998],{},[126,82689,82690],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82692,82693,82694,82697,82698],{},"在字符串中开始搜索 ",[126,82695,82696],{},"searchString"," 的位置。默认值为 ",[126,82699,331],{},[83,82701,82702],{"start":1194},[86,82703,82704],{},"返回值：",[14,82706,82707,82708,82710,82711,82715,82716],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[126,82709,82696],{}," 为空字符串的情况），则返回 ",[289,82712,82713],{},[126,82714,1377],{}," ，否则返回 ",[289,82717,82718],{},[126,82719,66021],{},[83,82721,82722],{"start":1209},[86,82723,82724],{},"异常：",[14,82726,82223,82727,13810,82729,82733],{},[126,82728,82696],{},[20,82730,82732],{"href":82663,"rel":82731},[24],"是一个正则表达式","，则会抛出",[14,82735,82736],{},"只要是有就是true，不需要非得以谁开头结尾",[120,82738,82740],{"className":77496,"code":82739,"language":77498,"meta":42,"style":42},"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",[126,82741,82742,82753,82776,82795,82815,82837,82856],{"__ignoreMap":42},[129,82743,82744,82746,82748,82750],{"class":131,"line":132},[129,82745,6807],{"class":135},[129,82747,79776],{"class":139},[129,82749,185],{"class":135},[129,82751,82752],{"class":244}," \"To be, or not to be, that is the question.\"\n",[129,82754,82755,82757,82759,82762,82765,82767,82770,82773],{"class":131,"line":51},[129,82756,77533],{"class":139},[129,82758,58248],{"class":1977},[129,82760,82761],{"class":139},"(str.",[129,82763,82764],{"class":1977},"includes",[129,82766,140],{"class":139},[129,82768,82769],{"class":244},"\"To be\"",[129,82771,82772],{"class":139},"))",[129,82774,82775],{"class":198},"  \u002F\u002F true\n",[129,82777,82778,82780,82782,82784,82786,82788,82791,82793],{"class":131,"line":1194},[129,82779,77533],{"class":139},[129,82781,58248],{"class":1977},[129,82783,82761],{"class":139},[129,82785,82764],{"class":1977},[129,82787,140],{"class":139},[129,82789,82790],{"class":244},"\"question\"",[129,82792,82772],{"class":139},[129,82794,82775],{"class":198},[129,82796,82797,82799,82801,82803,82805,82807,82810,82812],{"class":131,"line":1209},[129,82798,77533],{"class":139},[129,82800,58248],{"class":1977},[129,82802,82761],{"class":139},[129,82804,82764],{"class":1977},[129,82806,140],{"class":139},[129,82808,82809],{"class":244},"\"nonexistent\"",[129,82811,82772],{"class":139},[129,82813,82814],{"class":198},"  \u002F\u002F false\n",[129,82816,82817,82819,82821,82823,82825,82827,82829,82831,82833,82835],{"class":131,"line":1215},[129,82818,77533],{"class":139},[129,82820,58248],{"class":1977},[129,82822,82761],{"class":139},[129,82824,82764],{"class":1977},[129,82826,140],{"class":139},[129,82828,82769],{"class":244},[129,82830,12450],{"class":139},[129,82832,357],{"class":188},[129,82834,82772],{"class":139},[129,82836,82814],{"class":198},[129,82838,82839,82841,82843,82845,82847,82849,82852,82854],{"class":131,"line":1229},[129,82840,77533],{"class":139},[129,82842,58248],{"class":1977},[129,82844,82761],{"class":139},[129,82846,82764],{"class":1977},[129,82848,140],{"class":139},[129,82850,82851],{"class":244},"\"TO BE\"",[129,82853,82772],{"class":139},[129,82855,82814],{"class":198},[129,82857,82858,82860,82862,82864,82866,82868,82870,82872],{"class":131,"line":1235},[129,82859,77533],{"class":139},[129,82861,58248],{"class":1977},[129,82863,82761],{"class":139},[129,82865,82764],{"class":1977},[129,82867,140],{"class":139},[129,82869,7667],{"class":244},[129,82871,82772],{"class":139},[129,82873,82775],{"class":198},[22925,82875,82877],{"id":82876},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[120,82879,82881],{"className":53068,"code":82880,"language":53070,"meta":42,"style":42},"\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",[126,82882,82883,82891,82899,82904,82909,82914,82919,82924,82932],{"__ignoreMap":42},[129,82884,82885,82887,82889],{"class":131,"line":132},[129,82886,1049],{"class":139},[129,82888,51801],{"class":51301},[129,82890,51308],{"class":139},[129,82892,82893,82895,82897],{"class":131,"line":51},[129,82894,52145],{"class":139},[129,82896,51814],{"class":51301},[129,82898,51308],{"class":139},[129,82900,82901],{"class":131,"line":1194},[129,82902,82903],{"class":139},"    const num = 10\n",[129,82905,82906],{"class":131,"line":1209},[129,82907,82908],{"class":139},"    \u002F\u002F 强制转换\n",[129,82910,82911],{"class":131,"line":1215},[129,82912,82913],{"class":139},"    console.log(String(num))\n",[129,82915,82916],{"class":131,"line":1229},[129,82917,82918],{"class":139},"    \u002F\u002F toString()方法转换\n",[129,82920,82921],{"class":131,"line":1235},[129,82922,82923],{"class":139},"    console.log(num.toString())\n",[129,82925,82926,82928,82930],{"class":131,"line":1326},[129,82927,52418],{"class":139},[129,82929,51814],{"class":51301},[129,82931,51308],{"class":139},[129,82933,82934,82936,82938],{"class":131,"line":1332},[129,82935,51786],{"class":139},[129,82937,51801],{"class":51301},[129,82939,51308],{"class":139},[22925,82941,82943],{"id":82942},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,82945,82946],{},[40,82947],{"alt":42,"src":82948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[120,82950,82952],{"className":50634,"code":82951,"language":50636,"meta":42,"style":42},"\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",[126,82953,82954,82964,82978,82982,82990,83004,83024,83036,83044,83048,83056,83068,83076,83088,83093,83098,83103,83150,83166,83174,83182,83186],{"__ignoreMap":42},[129,82955,82956,82958,82960,82962],{"class":131,"line":132},[129,82957,51298],{"class":139},[129,82959,51302],{"class":51301},[129,82961,51305],{"class":1977},[129,82963,51308],{"class":139},[129,82965,82966,82968,82970,82972,82974,82976],{"class":131,"line":51},[129,82967,1049],{"class":139},[129,82969,50636],{"class":51301},[129,82971,51317],{"class":1977},[129,82973,185],{"class":139},[129,82975,51322],{"class":244},[129,82977,51308],{"class":139},[129,82979,82980],{"class":131,"line":1194},[129,82981,2414],{"emptyLinePlaceholder":56},[129,82983,82984,82986,82988],{"class":131,"line":1209},[129,82985,1049],{"class":139},[129,82987,51335],{"class":51301},[129,82989,51308],{"class":139},[129,82991,82992,82994,82996,82998,83000,83002],{"class":131,"line":1215},[129,82993,52145],{"class":139},[129,82995,51345],{"class":51301},[129,82997,51348],{"class":1977},[129,82999,185],{"class":139},[129,83001,51353],{"class":244},[129,83003,51308],{"class":139},[129,83005,83006,83008,83010,83012,83014,83016,83018,83020,83022],{"class":131,"line":1229},[129,83007,52145],{"class":139},[129,83009,51345],{"class":51301},[129,83011,14935],{"class":1977},[129,83013,185],{"class":139},[129,83015,51392],{"class":244},[129,83017,51372],{"class":1977},[129,83019,185],{"class":139},[129,83021,51399],{"class":244},[129,83023,51308],{"class":139},[129,83025,83026,83028,83030,83032,83034],{"class":131,"line":1235},[129,83027,52145],{"class":139},[129,83029,51408],{"class":51301},[129,83031,51411],{"class":139},[129,83033,51408],{"class":51301},[129,83035,51308],{"class":139},[129,83037,83038,83040,83042],{"class":131,"line":1326},[129,83039,51786],{"class":139},[129,83041,51335],{"class":51301},[129,83043,51308],{"class":139},[129,83045,83046],{"class":131,"line":1332},[129,83047,2414],{"emptyLinePlaceholder":56},[129,83049,83050,83052,83054],{"class":131,"line":1344},[129,83051,1049],{"class":139},[129,83053,51801],{"class":51301},[129,83055,51308],{"class":139},[129,83057,83058,83060,83062,83064,83066],{"class":131,"line":1626},[129,83059,52145],{"class":139},[129,83061,51612],{"class":51301},[129,83063,55315],{"class":139},[129,83065,51612],{"class":51301},[129,83067,51308],{"class":139},[129,83069,83070,83072,83074],{"class":131,"line":1631},[129,83071,52145],{"class":139},[129,83073,51814],{"class":51301},[129,83075,51308],{"class":139},[129,83077,83078,83080,83083,83085],{"class":131,"line":1637},[129,83079,11236],{"class":135},[129,83081,83082],{"class":188}," gift",[129,83084,13579],{"class":135},[129,83086,83087],{"class":244}," '50g的茶叶，清洗球'\n",[129,83089,83090],{"class":131,"line":1642},[129,83091,83092],{"class":198},"    \u002F\u002F 1.把字符串拆分为数组\n",[129,83094,83095],{"class":131,"line":1656},[129,83096,83097],{"class":198},"    \u002F\u002F console.log(gift.split(','))\n",[129,83099,83100],{"class":131,"line":1661},[129,83101,83102],{"class":198},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[129,83104,83105,83107,83109,83111,83114,83117,83119,83122,83124,83126,83128,83130,83132,83135,83137,83140,83142,83144,83146,83148],{"class":131,"line":1667},[129,83106,11236],{"class":135},[129,83108,73920],{"class":188},[129,83110,13579],{"class":135},[129,83112,83113],{"class":139}," gift.",[129,83115,83116],{"class":1977},"split",[129,83118,140],{"class":139},[129,83120,83121],{"class":244},"'，'",[129,83123,30827],{"class":139},[129,83125,74045],{"class":1977},[129,83127,140],{"class":139},[129,83129,79796],{"class":5231},[129,83131,79799],{"class":135},[129,83133,83134],{"class":244}," `\u003Cspan>【赠品】${",[129,83136,79796],{"class":139},[129,83138,83139],{"class":244},"}\u003C\u002Fspan>\u003Cbr>`",[129,83141,30827],{"class":139},[129,83143,74224],{"class":1977},[129,83145,140],{"class":139},[129,83147,74229],{"class":244},[129,83149,146],{"class":139},[129,83151,83152,83154,83156,83158,83160,83162,83164],{"class":131,"line":1688},[129,83153,52408],{"class":139},[129,83155,54400],{"class":1977},[129,83157,140],{"class":139},[129,83159,81932],{"class":244},[129,83161,74250],{"class":139},[129,83163,185],{"class":135},[129,83165,73986],{"class":139},[129,83167,83168,83170,83172],{"class":131,"line":1693},[129,83169,52418],{"class":139},[129,83171,51814],{"class":51301},[129,83173,51308],{"class":139},[129,83175,83176,83178,83180],{"class":131,"line":1707},[129,83177,51786],{"class":139},[129,83179,51801],{"class":51301},[129,83181,51308],{"class":139},[129,83183,83184],{"class":131,"line":1712},[129,83185,2414],{"emptyLinePlaceholder":56},[129,83187,83188,83190,83192],{"class":131,"line":1741},[129,83189,51786],{"class":139},[129,83191,50636],{"class":51301},[129,83193,51308],{"class":139},[22013,83195,83197],{"id":83196},"_41054-number","4.10.5.4 Number",[14,83199,83200],{},[40,83201],{"alt":42,"src":83202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83204,83205],{},"整数也可以进行toFixed来保留小数",[14,83207,83208],{},"比如：",[14,83210,83211],{},"const price=10",[14,83213,83214],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22013,83216,83218],{"id":83217},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83220,83221],{},[40,83222],{"alt":42,"src":83223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[120,83225,83227],{"className":50634,"code":83226,"language":50636,"meta":42,"style":42},"\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",[126,83228,83229,83239,83253,83257,83265,83279,83299,83311,83319,83325,83335,83345,83355,83359,83363,83369,83381,83395,83399,83403,83409,83421,83437,83447,83463,83467,83471,83477,83487,83497,83501,83505,83513,83525,83537,83549,83553,83557,83565,83577,83581,83585,83596,83606,83618,83630,83640,83644,83648,83656,83665,83677,83687,83697,83701,83705,83713,83722,83729,83739,83751,83755,83759,83768,83778,83789,83801,83813,83817,83821,83830,83840,83851,83855,83859,83865,83877,83889,83899,83909,83927,83939,83943,83947,83956,83968,83978,83988,84000,84004,84012,84020,84024,84032,84046,84054,84068,84096,84104,84112,84122,84126,84134,84142,84151,84159,84168,84178,84182,84186,84194,84202,84211,84219,84227,84240,84244,84248,84256,84264,84273,84281,84289,84304,84308,84312,84320,84328,84337,84345,84353,84367,84375,84379,84383,84388,84414,84419,84456,84461,84484,84489,84543,84548,84584,84588,84594,84599,84608,84622,84631,84650,84659,84669,84674,84679,84692,84697,84751,84777,84785,84793,84797],{"__ignoreMap":42},[129,83230,83231,83233,83235,83237],{"class":131,"line":132},[129,83232,51298],{"class":139},[129,83234,51302],{"class":51301},[129,83236,51305],{"class":1977},[129,83238,51308],{"class":139},[129,83240,83241,83243,83245,83247,83249,83251],{"class":131,"line":51},[129,83242,1049],{"class":139},[129,83244,50636],{"class":51301},[129,83246,51317],{"class":1977},[129,83248,185],{"class":139},[129,83250,51322],{"class":244},[129,83252,51308],{"class":139},[129,83254,83255],{"class":131,"line":1194},[129,83256,2414],{"emptyLinePlaceholder":56},[129,83258,83259,83261,83263],{"class":131,"line":1209},[129,83260,1049],{"class":139},[129,83262,51335],{"class":51301},[129,83264,51308],{"class":139},[129,83266,83267,83269,83271,83273,83275,83277],{"class":131,"line":1215},[129,83268,52145],{"class":139},[129,83270,51345],{"class":51301},[129,83272,51348],{"class":1977},[129,83274,185],{"class":139},[129,83276,51353],{"class":244},[129,83278,51308],{"class":139},[129,83280,83281,83283,83285,83287,83289,83291,83293,83295,83297],{"class":131,"line":1229},[129,83282,52145],{"class":139},[129,83284,51345],{"class":51301},[129,83286,14935],{"class":1977},[129,83288,185],{"class":139},[129,83290,51392],{"class":244},[129,83292,51372],{"class":1977},[129,83294,185],{"class":139},[129,83296,51399],{"class":244},[129,83298,51308],{"class":139},[129,83300,83301,83303,83305,83307,83309],{"class":131,"line":1235},[129,83302,52145],{"class":139},[129,83304,51408],{"class":51301},[129,83306,51411],{"class":139},[129,83308,51408],{"class":51301},[129,83310,51308],{"class":139},[129,83312,83313,83315,83317],{"class":131,"line":1326},[129,83314,52145],{"class":139},[129,83316,5141],{"class":51301},[129,83318,51308],{"class":139},[129,83320,83321,83323],{"class":131,"line":1332},[129,83322,6418],{"class":51301},[129,83324,15587],{"class":139},[129,83326,83327,83329,83331,83333],{"class":131,"line":1344},[129,83328,54696],{"class":188},[129,83330,51438],{"class":139},[129,83332,331],{"class":188},[129,83334,1305],{"class":139},[129,83336,83337,83339,83341,83343],{"class":131,"line":1626},[129,83338,54707],{"class":188},[129,83340,51438],{"class":139},[129,83342,331],{"class":188},[129,83344,1305],{"class":139},[129,83346,83347,83349,83351,83353],{"class":131,"line":1631},[129,83348,72597],{"class":188},[129,83350,51438],{"class":139},[129,83352,60506],{"class":188},[129,83354,1305],{"class":139},[129,83356,83357],{"class":131,"line":1637},[129,83358,2201],{"class":139},[129,83360,83361],{"class":131,"line":1642},[129,83362,2414],{"emptyLinePlaceholder":56},[129,83364,83365,83367],{"class":131,"line":1656},[129,83366,62124],{"class":1977},[129,83368,15587],{"class":139},[129,83370,83371,83373,83375,83377,83379],{"class":131,"line":1661},[129,83372,54772],{"class":188},[129,83374,51438],{"class":139},[129,83376,78575],{"class":188},[129,83378,51493],{"class":135},[129,83380,1305],{"class":139},[129,83382,83383,83385,83387,83389,83391,83393],{"class":131,"line":1667},[129,83384,54707],{"class":188},[129,83386,51438],{"class":139},[129,83388,450],{"class":188},[129,83390,51493],{"class":135},[129,83392,51557],{"class":188},[129,83394,1305],{"class":139},[129,83396,83397],{"class":131,"line":1688},[129,83398,2201],{"class":139},[129,83400,83401],{"class":131,"line":1693},[129,83402,2414],{"emptyLinePlaceholder":56},[129,83404,83405,83407],{"class":131,"line":1707},[129,83406,78626],{"class":1977},[129,83408,15587],{"class":139},[129,83410,83411,83413,83415,83417,83419],{"class":131,"line":1712},[129,83412,54696],{"class":188},[129,83414,51438],{"class":139},[129,83416,714],{"class":188},[129,83418,51493],{"class":135},[129,83420,1305],{"class":139},[129,83422,83423,83425,83427,83429,83431,83433,83435],{"class":131,"line":1741},[129,83424,61861],{"class":188},[129,83426,51438],{"class":139},[129,83428,28122],{"class":188},[129,83430,78681],{"class":188},[129,83432,78684],{"class":188},[129,83434,834],{"class":135},[129,83436,1305],{"class":139},[129,83438,83439,83441,83443,83445],{"class":131,"line":1746},[129,83440,55010],{"class":188},[129,83442,51438],{"class":139},[129,83444,51478],{"class":188},[129,83446,1305],{"class":139},[129,83448,83449,83451,83453,83455,83457,83459,83461],{"class":131,"line":1763},[129,83450,61978],{"class":188},[129,83452,51438],{"class":139},[129,83454,357],{"class":188},[129,83456,51493],{"class":135},[129,83458,51522],{"class":188},[129,83460,62245],{"class":188},[129,83462,1305],{"class":139},[129,83464,83465],{"class":131,"line":1768},[129,83466,2201],{"class":139},[129,83468,83469],{"class":131,"line":1773},[129,83470,2414],{"emptyLinePlaceholder":56},[129,83472,83473,83475],{"class":131,"line":1778},[129,83474,78744],{"class":1977},[129,83476,15587],{"class":139},[129,83478,83479,83481,83483,83485],{"class":131,"line":1792},[129,83480,62026],{"class":188},[129,83482,51438],{"class":139},[129,83484,62031],{"class":188},[129,83486,1305],{"class":139},[129,83488,83489,83491,83493,83495],{"class":131,"line":1797},[129,83490,54885],{"class":188},[129,83492,51438],{"class":139},[129,83494,61819],{"class":188},[129,83496,1305],{"class":139},[129,83498,83499],{"class":131,"line":2591},[129,83500,2201],{"class":139},[129,83502,83503],{"class":131,"line":2605},[129,83504,2414],{"emptyLinePlaceholder":56},[129,83506,83507,83509,83511],{"class":131,"line":2613},[129,83508,78626],{"class":1977},[129,83510,55616],{"class":51301},[129,83512,15587],{"class":139},[129,83514,83515,83517,83519,83521,83523],{"class":131,"line":2618},[129,83516,54772],{"class":188},[129,83518,51438],{"class":139},[129,83520,751],{"class":188},[129,83522,51493],{"class":135},[129,83524,1305],{"class":139},[129,83526,83527,83529,83531,83533,83535],{"class":131,"line":2624},[129,83528,54786],{"class":188},[129,83530,51438],{"class":139},[129,83532,751],{"class":188},[129,83534,51493],{"class":135},[129,83536,1305],{"class":139},[129,83538,83539,83541,83543,83545,83547],{"class":131,"line":2630},[129,83540,61751],{"class":188},[129,83542,51438],{"class":139},[129,83544,458],{"class":188},[129,83546,51493],{"class":135},[129,83548,1305],{"class":139},[129,83550,83551],{"class":131,"line":2635},[129,83552,2201],{"class":139},[129,83554,83555],{"class":131,"line":7963},[129,83556,2414],{"emptyLinePlaceholder":56},[129,83558,83559,83561,83563],{"class":131,"line":7987},[129,83560,78626],{"class":1977},[129,83562,62305],{"class":1977},[129,83564,15587],{"class":139},[129,83566,83567,83569,83571,83573,83575],{"class":131,"line":7992},[129,83568,54772],{"class":188},[129,83570,51438],{"class":139},[129,83572,1736],{"class":188},[129,83574,51493],{"class":135},[129,83576,1305],{"class":139},[129,83578,83579],{"class":131,"line":7998},[129,83580,2201],{"class":139},[129,83582,83583],{"class":131,"line":8025},[129,83584,2414],{"emptyLinePlaceholder":56},[129,83586,83587,83589,83591,83594],{"class":131,"line":8030},[129,83588,78626],{"class":1977},[129,83590,62305],{"class":1977},[129,83592,83593],{"class":1977}," .tag",[129,83595,15587],{"class":139},[129,83597,83598,83600,83602,83604],{"class":131,"line":8036},[129,83599,55010],{"class":188},[129,83601,51438],{"class":139},[129,83603,60870],{"class":188},[129,83605,1305],{"class":139},[129,83607,83608,83610,83612,83614,83616],{"class":131,"line":8048},[129,83609,54696],{"class":188},[129,83611,51438],{"class":139},[129,83613,217],{"class":188},[129,83615,51493],{"class":135},[129,83617,1305],{"class":139},[129,83619,83620,83622,83624,83626,83628],{"class":131,"line":8060},[129,83621,54923],{"class":188},[129,83623,51438],{"class":139},[129,83625,637],{"class":188},[129,83627,51493],{"class":135},[129,83629,1305],{"class":139},[129,83631,83632,83634,83636,83638],{"class":131,"line":8072},[129,83633,57417],{"class":188},[129,83635,51438],{"class":139},[129,83637,62071],{"class":188},[129,83639,1305],{"class":139},[129,83641,83642],{"class":131,"line":9731},[129,83643,2201],{"class":139},[129,83645,83646],{"class":131,"line":9756},[129,83647,2414],{"emptyLinePlaceholder":56},[129,83649,83650,83652,83654],{"class":131,"line":9779},[129,83651,78626],{"class":1977},[129,83653,78918],{"class":1977},[129,83655,31467],{"class":139},[129,83657,83658,83660,83663],{"class":131,"line":9803},[129,83659,78626],{"class":1977},[129,83661,83662],{"class":1977}," .sub-total",[129,83664,15587],{"class":139},[129,83666,83667,83669,83671,83673,83675],{"class":131,"line":9808},[129,83668,54923],{"class":188},[129,83670,51438],{"class":139},[129,83672,789],{"class":188},[129,83674,51493],{"class":135},[129,83676,1305],{"class":139},[129,83678,83679,83681,83683,83685],{"class":131,"line":9813},[129,83680,57417],{"class":188},[129,83682,51438],{"class":139},[129,83684,78941],{"class":188},[129,83686,1305],{"class":139},[129,83688,83689,83691,83693,83695],{"class":131,"line":9818},[129,83690,61838],{"class":188},[129,83692,51438],{"class":139},[129,83694,357],{"class":188},[129,83696,1305],{"class":139},[129,83698,83699],{"class":131,"line":9827},[129,83700,2201],{"class":139},[129,83702,83703],{"class":131,"line":9832},[129,83704,2414],{"emptyLinePlaceholder":56},[129,83706,83707,83709,83711],{"class":131,"line":9838},[129,83708,78626],{"class":1977},[129,83710,78958],{"class":1977},[129,83712,31467],{"class":139},[129,83714,83715,83717,83720],{"class":131,"line":9859},[129,83716,78626],{"class":1977},[129,83718,83719],{"class":1977}," .sub-total::before",[129,83721,31467],{"class":139},[129,83723,83724,83727],{"class":131,"line":9865},[129,83725,83726],{"class":1977},"    .amount::before",[129,83728,15587],{"class":139},[129,83730,83731,83733,83735,83737],{"class":131,"line":9879},[129,83732,78965],{"class":188},[129,83734,51438],{"class":139},[129,83736,78970],{"class":244},[129,83738,1305],{"class":139},[129,83740,83741,83743,83745,83747,83749],{"class":131,"line":9885},[129,83742,54923],{"class":188},[129,83744,51438],{"class":139},[129,83746,637],{"class":188},[129,83748,51493],{"class":135},[129,83750,1305],{"class":139},[129,83752,83753],{"class":131,"line":9912},[129,83754,2201],{"class":139},[129,83756,83757],{"class":131,"line":9921},[129,83758,2414],{"emptyLinePlaceholder":56},[129,83760,83761,83763,83766],{"class":131,"line":9927},[129,83762,78626],{"class":1977},[129,83764,83765],{"class":1977}," .spec",[129,83767,15587],{"class":139},[129,83769,83770,83772,83774,83776],{"class":131,"line":9935},[129,83771,61838],{"class":188},[129,83773,51438],{"class":139},[129,83775,217],{"class":188},[129,83777,1305],{"class":139},[129,83779,83780,83782,83784,83787],{"class":131,"line":9940},[129,83781,57417],{"class":188},[129,83783,51438],{"class":139},[129,83785,83786],{"class":188},"#888",[129,83788,1305],{"class":139},[129,83790,83791,83793,83795,83797,83799],{"class":131,"line":16619},[129,83792,54923],{"class":188},[129,83794,51438],{"class":139},[129,83796,688],{"class":188},[129,83798,51493],{"class":135},[129,83800,1305],{"class":139},[129,83802,83803,83805,83807,83809,83811],{"class":131,"line":16625},[129,83804,62001],{"class":188},[129,83806,51438],{"class":139},[129,83808,839],{"class":188},[129,83810,51493],{"class":135},[129,83812,1305],{"class":139},[129,83814,83815],{"class":131,"line":16648},[129,83816,2201],{"class":139},[129,83818,83819],{"class":131,"line":16654},[129,83820,2414],{"emptyLinePlaceholder":56},[129,83822,83823,83825,83828],{"class":131,"line":16677},[129,83824,78626],{"class":1977},[129,83826,83827],{"class":1977}," .count",[129,83829,15587],{"class":139},[129,83831,83832,83834,83836,83838],{"class":131,"line":16691},[129,83833,61838],{"class":188},[129,83835,51438],{"class":139},[129,83837,357],{"class":188},[129,83839,1305],{"class":139},[129,83841,83842,83844,83846,83849],{"class":131,"line":16711},[129,83843,57417],{"class":188},[129,83845,51438],{"class":139},[129,83847,83848],{"class":188},"#aaa",[129,83850,1305],{"class":139},[129,83852,83853],{"class":131,"line":16717},[129,83854,2201],{"class":139},[129,83856,83857],{"class":131,"line":16728},[129,83858,2414],{"emptyLinePlaceholder":56},[129,83860,83861,83863],{"class":131,"line":16751},[129,83862,72476],{"class":1977},[129,83864,15587],{"class":139},[129,83866,83867,83869,83871,83873,83875],{"class":131,"line":16773},[129,83868,54772],{"class":188},[129,83870,51438],{"class":139},[129,83872,78575],{"class":188},[129,83874,51493],{"class":135},[129,83876,1305],{"class":139},[129,83878,83879,83881,83883,83885,83887],{"class":131,"line":16778},[129,83880,54707],{"class":188},[129,83882,51438],{"class":139},[129,83884,331],{"class":188},[129,83886,51557],{"class":188},[129,83888,1305],{"class":139},[129,83890,83891,83893,83895,83897],{"class":131,"line":16784},[129,83892,55010],{"class":188},[129,83894,51438],{"class":139},[129,83896,51478],{"class":188},[129,83898,1305],{"class":139},[129,83900,83901,83903,83905,83907],{"class":131,"line":16798},[129,83902,55021],{"class":188},[129,83904,51438],{"class":139},[129,83906,51581],{"class":188},[129,83908,1305],{"class":139},[129,83910,83911,83914,83916,83918,83920,83922,83925],{"class":131,"line":16811},[129,83912,83913],{"class":188},"      border-top",[129,83915,51438],{"class":139},[129,83917,357],{"class":188},[129,83919,51493],{"class":135},[129,83921,51522],{"class":188},[129,83923,83924],{"class":188}," #4e4e4e",[129,83926,1305],{"class":139},[129,83928,83929,83931,83933,83935,83937],{"class":131,"line":16816},[129,83930,54696],{"class":188},[129,83932,51438],{"class":139},[129,83934,839],{"class":188},[129,83936,51493],{"class":135},[129,83938,1305],{"class":139},[129,83940,83941],{"class":131,"line":16830},[129,83942,2201],{"class":139},[129,83944,83945],{"class":131,"line":16835},[129,83946,2414],{"emptyLinePlaceholder":56},[129,83948,83949,83951,83954],{"class":131,"line":16841},[129,83950,72476],{"class":1977},[129,83952,83953],{"class":1977}," .amount",[129,83955,15587],{"class":139},[129,83957,83958,83960,83962,83964,83966],{"class":131,"line":16846},[129,83959,54923],{"class":188},[129,83961,51438],{"class":139},[129,83963,789],{"class":188},[129,83965,51493],{"class":135},[129,83967,1305],{"class":139},[129,83969,83970,83972,83974,83976],{"class":131,"line":16860},[129,83971,57417],{"class":188},[129,83973,51438],{"class":139},[129,83975,78941],{"class":188},[129,83977,1305],{"class":139},[129,83979,83980,83982,83984,83986],{"class":131,"line":16865},[129,83981,62335],{"class":188},[129,83983,51438],{"class":139},[129,83985,51490],{"class":188},[129,83987,1305],{"class":139},[129,83989,83990,83992,83994,83996,83998],{"class":131,"line":16870},[129,83991,61751],{"class":188},[129,83993,51438],{"class":139},[129,83995,795],{"class":188},[129,83997,51493],{"class":135},[129,83999,1305],{"class":139},[129,84001,84002],{"class":131,"line":16884},[129,84003,2201],{"class":139},[129,84005,84006,84008,84010],{"class":131,"line":16896},[129,84007,52418],{"class":139},[129,84009,5141],{"class":51301},[129,84011,51308],{"class":139},[129,84013,84014,84016,84018],{"class":131,"line":16901},[129,84015,51786],{"class":139},[129,84017,51335],{"class":51301},[129,84019,51308],{"class":139},[129,84021,84022],{"class":131,"line":16914},[129,84023,2414],{"emptyLinePlaceholder":56},[129,84025,84026,84028,84030],{"class":131,"line":16919},[129,84027,1049],{"class":139},[129,84029,51801],{"class":51301},[129,84031,51308],{"class":139},[129,84033,84034,84036,84038,84040,84042,84044],{"class":131,"line":16924},[129,84035,52145],{"class":139},[129,84037,51612],{"class":51301},[129,84039,53487],{"class":1977},[129,84041,185],{"class":139},[129,84043,62609],{"class":244},[129,84045,51308],{"class":139},[129,84047,84048,84050,84052],{"class":131,"line":16929},[129,84049,52418],{"class":139},[129,84051,51612],{"class":51301},[129,84053,51308],{"class":139},[129,84055,84056,84058,84060,84062,84064,84066],{"class":131,"line":16942},[129,84057,52145],{"class":139},[129,84059,51612],{"class":51301},[129,84061,53487],{"class":1977},[129,84063,185],{"class":139},[129,84065,62581],{"class":244},[129,84067,51308],{"class":139},[129,84069,84070,84072,84074,84077,84079,84081,84083,84086,84088,84090,84092,84094],{"class":131,"line":16947},[129,84071,51342],{"class":139},[129,84073,51612],{"class":51301},[129,84075,84076],{"class":139},">合计：\u003C",[129,84078,129],{"class":51301},[129,84080,53487],{"class":1977},[129,84082,185],{"class":139},[129,84084,84085],{"class":244},"\"amount\"",[129,84087,55315],{"class":139},[129,84089,129],{"class":51301},[129,84091,55315],{"class":139},[129,84093,51612],{"class":51301},[129,84095,51308],{"class":139},[129,84097,84098,84100,84102],{"class":131,"line":32634},[129,84099,52418],{"class":139},[129,84101,51612],{"class":51301},[129,84103,51308],{"class":139},[129,84105,84106,84108,84110],{"class":131,"line":32640},[129,84107,52145],{"class":139},[129,84109,51814],{"class":51301},[129,84111,51308],{"class":139},[129,84113,84114,84116,84118,84120],{"class":131,"line":32646},[129,84115,11236],{"class":135},[129,84117,79378],{"class":188},[129,84119,13579],{"class":135},[129,84121,55448],{"class":139},[129,84123,84124],{"class":131,"line":32652},[129,84125,79387],{"class":139},[129,84127,84128,84130,84132],{"class":131,"line":32658},[129,84129,79392],{"class":139},[129,84131,79395],{"class":244},[129,84133,31467],{"class":139},[129,84135,84136,84138,84140],{"class":131,"line":32669},[129,84137,79402],{"class":139},[129,84139,79405],{"class":244},[129,84141,31467],{"class":139},[129,84143,84144,84146,84149],{"class":131,"line":32675},[129,84145,79412],{"class":139},[129,84147,84148],{"class":188},"289.9",[129,84150,31467],{"class":139},[129,84152,84153,84155,84157],{"class":131,"line":32695},[129,84154,79422],{"class":139},[129,84156,79425],{"class":244},[129,84158,31467],{"class":139},[129,84160,84161,84164,84166],{"class":131,"line":32701},[129,84162,84163],{"class":139},"        count: ",[129,84165,217],{"class":188},[129,84167,31467],{"class":139},[129,84169,84170,84173,84176],{"class":131,"line":32712},[129,84171,84172],{"class":139},"        spec: { color: ",[129,84174,84175],{"class":244},"'白色'",[129,84177,55605],{"class":139},[129,84179,84180],{"class":131,"line":32718},[129,84181,77893],{"class":139},[129,84183,84184],{"class":131,"line":32724},[129,84185,79387],{"class":139},[129,84187,84188,84190,84192],{"class":131,"line":32730},[129,84189,79392],{"class":139},[129,84191,79486],{"class":244},[129,84193,31467],{"class":139},[129,84195,84196,84198,84200],{"class":131,"line":32736},[129,84197,79402],{"class":139},[129,84199,79495],{"class":244},[129,84201,31467],{"class":139},[129,84203,84204,84206,84209],{"class":131,"line":32742},[129,84205,79412],{"class":139},[129,84207,84208],{"class":188},"109.8",[129,84210,31467],{"class":139},[129,84212,84213,84215,84217],{"class":131,"line":32748},[129,84214,79422],{"class":139},[129,84216,79513],{"class":244},[129,84218,31467],{"class":139},[129,84220,84221,84223,84225],{"class":131,"line":32754},[129,84222,84163],{"class":139},[129,84224,211],{"class":188},[129,84226,31467],{"class":139},[129,84228,84229,84232,84234,84236,84238],{"class":131,"line":32774},[129,84230,84231],{"class":139},"        spec: { size: ",[129,84233,81904],{"class":244},[129,84235,55465],{"class":139},[129,84237,81909],{"class":244},[129,84239,55605],{"class":139},[129,84241,84242],{"class":131,"line":32780},[129,84243,77893],{"class":139},[129,84245,84246],{"class":131,"line":32796},[129,84247,79387],{"class":139},[129,84249,84250,84252,84254],{"class":131,"line":32802},[129,84251,79392],{"class":139},[129,84253,79530],{"class":244},[129,84255,31467],{"class":139},[129,84257,84258,84260,84262],{"class":131,"line":32816},[129,84259,79402],{"class":139},[129,84261,79539],{"class":244},[129,84263,31467],{"class":139},[129,84265,84266,84268,84271],{"class":131,"line":32822},[129,84267,79412],{"class":139},[129,84269,84270],{"class":188},"488",[129,84272,31467],{"class":139},[129,84274,84275,84277,84279],{"class":131,"line":32837},[129,84276,79422],{"class":139},[129,84278,79557],{"class":244},[129,84280,31467],{"class":139},[129,84282,84283,84285,84287],{"class":131,"line":32843},[129,84284,84163],{"class":139},[129,84286,357],{"class":188},[129,84288,31467],{"class":139},[129,84290,84291,84293,84296,84299,84302],{"class":131,"line":32852},[129,84292,84172],{"class":139},[129,84294,84295],{"class":244},"'青色'",[129,84297,84298],{"class":139},", sum: ",[129,84300,84301],{"class":244},"'一大四小'",[129,84303,55605],{"class":139},[129,84305,84306],{"class":131,"line":32858},[129,84307,77893],{"class":139},[129,84309,84310],{"class":131,"line":32867},[129,84311,79387],{"class":139},[129,84313,84314,84316,84318],{"class":131,"line":32873},[129,84315,79392],{"class":139},[129,84317,79574],{"class":244},[129,84319,31467],{"class":139},[129,84321,84322,84324,84326],{"class":131,"line":32879},[129,84323,79402],{"class":139},[129,84325,79583],{"class":244},[129,84327,31467],{"class":139},[129,84329,84330,84332,84335],{"class":131,"line":32888},[129,84331,79412],{"class":139},[129,84333,84334],{"class":188},"139",[129,84336,31467],{"class":139},[129,84338,84339,84341,84343],{"class":131,"line":32894},[129,84340,79422],{"class":139},[129,84342,79601],{"class":244},[129,84344,31467],{"class":139},[129,84346,84347,84349,84351],{"class":131,"line":32905},[129,84348,84163],{"class":139},[129,84350,357],{"class":188},[129,84352,31467],{"class":139},[129,84354,84355,84357,84360,84362,84365],{"class":131,"line":32911},[129,84356,84231],{"class":139},[129,84358,84359],{"class":244},"'小号'",[129,84361,55465],{"class":139},[129,84363,84364],{"class":244},"'紫色'",[129,84366,55471],{"class":139},[129,84368,84369,84372],{"class":131,"line":32930},[129,84370,84371],{"class":139},"        gift: ",[129,84373,84374],{"class":244},"'50g茶叶,清洗球'\n",[129,84376,84377],{"class":131,"line":32936},[129,84378,52399],{"class":139},[129,84380,84381],{"class":131,"line":32947},[129,84382,53110],{"class":139},[129,84384,84385],{"class":131,"line":32953},[129,84386,84387],{"class":198},"    \u002F\u002F  1.根据数据渲染页面\n",[129,84389,84390,84392,84394,84396,84398,84400,84402,84404,84406,84408,84410,84412],{"class":131,"line":32973},[129,84391,52408],{"class":139},[129,84393,54400],{"class":1977},[129,84395,140],{"class":139},[129,84397,79902],{"class":244},[129,84399,74250],{"class":139},[129,84401,185],{"class":135},[129,84403,80049],{"class":139},[129,84405,74045],{"class":1977},[129,84407,140],{"class":139},[129,84409,79796],{"class":5231},[129,84411,79799],{"class":135},[129,84413,15587],{"class":139},[129,84415,84416],{"class":131,"line":32989},[129,84417,84418],{"class":198},"      \u002F\u002F 对象解构\n",[129,84420,84421,84423,84425,84427,84429,84431,84433,84436,84438,84440,84442,84445,84447,84450,84452,84454],{"class":131,"line":32995},[129,84422,58229],{"class":135},[129,84424,79808],{"class":139},[129,84426,79821],{"class":188},[129,84428,12450],{"class":139},[129,84430,79811],{"class":188},[129,84432,12450],{"class":139},[129,84434,84435],{"class":188},"count",[129,84437,12450],{"class":139},[129,84439,79816],{"class":188},[129,84441,12450],{"class":139},[129,84443,84444],{"class":188},"spec",[129,84446,12450],{"class":139},[129,84448,84449],{"class":188},"gift",[129,84451,79824],{"class":139},[129,84453,185],{"class":135},[129,84455,79829],{"class":139},[129,84457,84458],{"class":131,"line":33009},[129,84459,84460],{"class":198},"      \u002F\u002F 规格文字模块处理\n",[129,84462,84463,84465,84468,84470,84472,84474,84476,84478,84480,84482],{"class":131,"line":33015},[129,84464,58229],{"class":135},[129,84466,84467],{"class":188}," text",[129,84469,13579],{"class":135},[129,84471,81939],{"class":139},[129,84473,81942],{"class":1977},[129,84475,81945],{"class":139},[129,84477,74224],{"class":1977},[129,84479,140],{"class":139},[129,84481,81952],{"class":244},[129,84483,146],{"class":139},[129,84485,84486],{"class":131,"line":33021},[129,84487,84488],{"class":198},"      \u002F\u002F 处理赠品模块\n",[129,84490,84491,84493,84495,84497,84500,84502,84504,84506,84508,84511,84513,84515,84517,84519,84521,84524,84526,84529,84531,84533,84535,84537,84539,84541],{"class":131,"line":33032},[129,84492,58229],{"class":135},[129,84494,73920],{"class":188},[129,84496,13579],{"class":135},[129,84498,84499],{"class":139}," gift ",[129,84501,1125],{"class":135},[129,84503,83113],{"class":139},[129,84505,83116],{"class":1977},[129,84507,140],{"class":139},[129,84509,84510],{"class":244},"','",[129,84512,30827],{"class":139},[129,84514,74045],{"class":1977},[129,84516,140],{"class":139},[129,84518,79796],{"class":5231},[129,84520,79799],{"class":135},[129,84522,84523],{"class":244}," `\u003Cspan class=\"tag\">【赠品】${",[129,84525,79796],{"class":139},[129,84527,84528],{"class":244},"}\u003C\u002Fspan>`",[129,84530,30827],{"class":139},[129,84532,74224],{"class":1977},[129,84534,140],{"class":139},[129,84536,74229],{"class":244},[129,84538,13729],{"class":139},[129,84540,998],{"class":135},[129,84542,70105],{"class":244},[129,84544,84545],{"class":131,"line":33038},[129,84546,84547],{"class":198},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[129,84549,84550,84552,84555,84557,84560,84562,84564,84566,84569,84571,84573,84575,84578,84580,84582],{"class":131,"line":33044},[129,84551,58229],{"class":135},[129,84553,84554],{"class":188}," subtotal",[129,84556,13579],{"class":135},[129,84558,84559],{"class":139}," ((price ",[129,84561,594],{"class":135},[129,84563,5769],{"class":188},[129,84565,6533],{"class":135},[129,84567,84568],{"class":139}," count) ",[129,84570,723],{"class":135},[129,84572,5769],{"class":188},[129,84574,30827],{"class":139},[129,84576,84577],{"class":1977},"toFixed",[129,84579,140],{"class":139},[129,84581,217],{"class":188},[129,84583,146],{"class":139},[129,84585,84586],{"class":131,"line":33054},[129,84587,2414],{"emptyLinePlaceholder":56},[129,84589,84590,84592],{"class":131,"line":33060},[129,84591,73983],{"class":135},[129,84593,70169],{"class":244},[129,84595,84596],{"class":131,"line":33071},[129,84597,84598],{"class":244},"        \u003Cdiv class=\"item\">\n",[129,84600,84601,84604,84606],{"class":131,"line":33077},[129,84602,84603],{"class":244},"          \u003Cimg src=\"${",[129,84605,79821],{"class":139},[129,84607,79853],{"class":244},[129,84609,84610,84613,84615,84618,84620],{"class":131,"line":33087},[129,84611,84612],{"class":244},"          \u003Cp class=\"name\">${",[129,84614,79811],{"class":139},[129,84616,84617],{"class":244},"}${",[129,84619,1314],{"class":139},[129,84621,79863],{"class":244},[129,84623,84624,84627,84629],{"class":131,"line":33092},[129,84625,84626],{"class":244},"          \u003Cp class=\"spec\">${",[129,84628,5202],{"class":139},[129,84630,79863],{"class":244},[129,84632,84633,84636,84638,84640,84642,84644,84646,84648],{"class":131,"line":33098},[129,84634,84635],{"class":244},"          \u003Cp class=\"price\">${",[129,84637,79816],{"class":139},[129,84639,697],{"class":244},[129,84641,84577],{"class":1977},[129,84643,140],{"class":244},[129,84645,217],{"class":188},[129,84647,568],{"class":244},[129,84649,79863],{"class":244},[129,84651,84652,84655,84657],{"class":131,"line":33147},[129,84653,84654],{"class":244},"          \u003Cp class=\"count\">x${",[129,84656,84435],{"class":139},[129,84658,79863],{"class":244},[129,84660,84661,84664,84667],{"class":131,"line":33194},[129,84662,84663],{"class":244},"          \u003Cp class=\"sub-total\">${",[129,84665,84666],{"class":139},"subtotal",[129,84668,79863],{"class":244},[129,84670,84671],{"class":131,"line":33199},[129,84672,84673],{"class":244},"        \u003C\u002Fdiv> \n",[129,84675,84676],{"class":131,"line":33205},[129,84677,84678],{"class":244},"             `\n",[129,84680,84681,84684,84686,84688,84690],{"class":131,"line":33224},[129,84682,84683],{"class":139},"    }).",[129,84685,74224],{"class":1977},[129,84687,140],{"class":139},[129,84689,74229],{"class":244},[129,84691,146],{"class":139},[129,84693,84694],{"class":131,"line":33230},[129,84695,84696],{"class":198},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[129,84698,84699,84701,84703,84705,84707,84710,84712,84715,84717,84719,84721,84724,84727,84729,84732,84734,84736,84738,84741,84743,84745,84747,84749],{"class":131,"line":33250},[129,84700,11236],{"class":135},[129,84702,62786],{"class":188},[129,84704,13579],{"class":135},[129,84706,80049],{"class":139},[129,84708,84709],{"class":1977},"reduce",[129,84711,2390],{"class":139},[129,84713,84714],{"class":5231},"prev",[129,84716,12450],{"class":139},[129,84718,79796],{"class":5231},[129,84720,13729],{"class":139},[129,84722,84723],{"class":135},"=>",[129,84725,84726],{"class":139}," prev ",[129,84728,620],{"class":135},[129,84730,84731],{"class":139}," (item.price ",[129,84733,594],{"class":135},[129,84735,5769],{"class":188},[129,84737,6533],{"class":135},[129,84739,84740],{"class":139}," item.count) ",[129,84742,723],{"class":135},[129,84744,5769],{"class":188},[129,84746,12450],{"class":139},[129,84748,331],{"class":188},[129,84750,146],{"class":139},[129,84752,84753,84755,84757,84759,84762,84764,84766,84769,84771,84773,84775],{"class":131,"line":33256},[129,84754,52408],{"class":139},[129,84756,54400],{"class":1977},[129,84758,140],{"class":139},[129,84760,84761],{"class":244},"'.amount'",[129,84763,74250],{"class":139},[129,84765,185],{"class":135},[129,84767,84768],{"class":139}," total.",[129,84770,84577],{"class":1977},[129,84772,140],{"class":139},[129,84774,217],{"class":188},[129,84776,146],{"class":139},[129,84778,84779,84781,84783],{"class":131,"line":33262},[129,84780,52418],{"class":139},[129,84782,51814],{"class":51301},[129,84784,51308],{"class":139},[129,84786,84787,84789,84791],{"class":131,"line":33272},[129,84788,51786],{"class":139},[129,84790,51801],{"class":51301},[129,84792,51308],{"class":139},[129,84794,84795],{"class":131,"line":33277},[129,84796,2414],{"emptyLinePlaceholder":56},[129,84798,84799,84801,84803],{"class":131,"line":33283},[129,84800,51786],{"class":139},[129,84802,50636],{"class":51301},[129,84804,51308],{"class":139},[71,84806,84808],{"id":84807},"_411-编程思想","4.11 编程思想",[100,84810,84812],{"id":84811},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84814,84815,84818],{},[289,84816,84817],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84820,84821],{},"调用就可以了",[14,84823,84824],{},[40,84825],{"alt":42,"src":84826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[100,84828,84830],{"id":84829},"_4112-面向对象","4.11.2 面向对象",[14,84832,84833],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84835,84836],{},[40,84837],{"alt":42,"src":84838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84840,84841],{},"面向对象的特性：",[1146,84843,84844,84847,84850],{},[86,84845,84846],{},"封装性",[86,84848,84849],{},"继承性",[86,84851,84852],{},"多态性",[100,84854,84856],{"id":84855},"_4113-两者比较","4.11.3 两者比较",[14,84858,84859],{},[40,84860],{"alt":42,"src":84861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[71,84863,84865],{"id":84864},"_412-构造函数回顾","4.12 构造函数回顾",[14,84867,84868],{},[40,84869],{"alt":42,"src":84870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84872,84873],{},[40,84874],{"alt":42,"src":84875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84877,84878],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84880,84881],{},[40,84882],{"alt":42,"src":84883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[71,84885,84887],{"id":84886},"_413-原型","4.13 原型",[100,84889,84891],{"id":84890},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84893,84894],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84896,84897],{},[40,84898],{"alt":42,"src":84899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84901,84902],{},[40,84903],{"alt":42,"src":84904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84906,84907],{},"原型是构造函数的属性，它也是一个对象",[14,84909,84910],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84912,84913],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[120,84915,84917],{"className":53068,"code":84916,"language":53070,"meta":42,"style":42},"\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",[126,84918,84919,84927,84932,84940,84945,84950,84955,84960,84965,84969,84973,84977,84982,84987,84991,84996,85001,85006,85011,85016,85020,85028],{"__ignoreMap":42},[129,84920,84921,84923,84925],{"class":131,"line":132},[129,84922,1049],{"class":139},[129,84924,51801],{"class":51301},[129,84926,51308],{"class":139},[129,84928,84929],{"class":131,"line":51},[129,84930,84931],{"class":198},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[129,84933,84934,84936,84938],{"class":131,"line":1194},[129,84935,52145],{"class":139},[129,84937,51814],{"class":51301},[129,84939,51308],{"class":139},[129,84941,84942],{"class":131,"line":1209},[129,84943,84944],{"class":139},"    function Star(uname, age) {\n",[129,84946,84947],{"class":131,"line":1215},[129,84948,84949],{"class":139},"      this.uname = uname,\n",[129,84951,84952],{"class":131,"line":1229},[129,84953,84954],{"class":139},"        this.age = age\n",[129,84956,84957],{"class":131,"line":1235},[129,84958,84959],{"class":139},"      \u002F\u002F this.sing = function () {\n",[129,84961,84962],{"class":131,"line":1326},[129,84963,84964],{"class":139},"      \u002F\u002F   console.log('唱歌')\n",[129,84966,84967],{"class":131,"line":1332},[129,84968,2414],{"emptyLinePlaceholder":56},[129,84970,84971],{"class":131,"line":1344},[129,84972,60038],{"class":139},[129,84974,84975],{"class":131,"line":1626},[129,84976,2201],{"class":139},[129,84978,84979],{"class":131,"line":1631},[129,84980,84981],{"class":139},"    Star.prototype.sing = function () {\n",[129,84983,84984],{"class":131,"line":1637},[129,84985,84986],{"class":139},"      console.log('唱歌')\n",[129,84988,84989],{"class":131,"line":1642},[129,84990,2201],{"class":139},[129,84992,84993],{"class":131,"line":1656},[129,84994,84995],{"class":139},"    \u002F\u002F console.dir(Star.prototype)\n",[129,84997,84998],{"class":131,"line":1661},[129,84999,85000],{"class":139},"    const pink = new Star('pink', 18)\n",[129,85002,85003],{"class":131,"line":1667},[129,85004,85005],{"class":139},"    const red = new Star('red', 20)\n",[129,85007,85008],{"class":131,"line":1688},[129,85009,85010],{"class":139},"    pink.sing()\n",[129,85012,85013],{"class":131,"line":1693},[129,85014,85015],{"class":139},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[129,85017,85018],{"class":131,"line":1707},[129,85019,2414],{"emptyLinePlaceholder":56},[129,85021,85022,85024,85026],{"class":131,"line":1712},[129,85023,52418],{"class":139},[129,85025,51814],{"class":51301},[129,85027,51308],{"class":139},[129,85029,85030,85032,85034],{"class":131,"line":1741},[129,85031,51786],{"class":139},[129,85033,51801],{"class":51301},[129,85035,51308],{"class":139},[14,85037,85038],{},[40,85039],{"alt":42,"src":85040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[120,85042,85044],{"className":53068,"code":85043,"language":53070,"meta":42,"style":42},"\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",[126,85045,85046,85054,85062,85067,85072,85077,85082,85086,85091,85096,85101,85105,85110,85114,85118,85123,85127,85135],{"__ignoreMap":42},[129,85047,85048,85050,85052],{"class":131,"line":132},[129,85049,1049],{"class":139},[129,85051,51801],{"class":51301},[129,85053,51308],{"class":139},[129,85055,85056,85058,85060],{"class":131,"line":51},[129,85057,52145],{"class":139},[129,85059,51814],{"class":51301},[129,85061,51308],{"class":139},[129,85063,85064],{"class":131,"line":1194},[129,85065,85066],{"class":139},"    let that\n",[129,85068,85069],{"class":131,"line":1209},[129,85070,85071],{"class":139},"    function Star(uname) {\n",[129,85073,85074],{"class":131,"line":1215},[129,85075,85076],{"class":139},"      this.uname = uname\n",[129,85078,85079],{"class":131,"line":1229},[129,85080,85081],{"class":139},"      that = this\n",[129,85083,85084],{"class":131,"line":1235},[129,85085,2201],{"class":139},[129,85087,85088],{"class":131,"line":1326},[129,85089,85090],{"class":139},"    \u002F\u002F 实例对象是 ldh\n",[129,85092,85093],{"class":131,"line":1332},[129,85094,85095],{"class":139},"    const ldh = new Star('刘德华')\n",[129,85097,85098],{"class":131,"line":1344},[129,85099,85100],{"class":139},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[129,85102,85103],{"class":131,"line":1626},[129,85104,2414],{"emptyLinePlaceholder":56},[129,85106,85107],{"class":131,"line":1631},[129,85108,85109],{"class":139},"    Star.sing = function () {\n",[129,85111,85112],{"class":131,"line":1637},[129,85113,84986],{"class":139},[129,85115,85116],{"class":131,"line":1642},[129,85117,2201],{"class":139},[129,85119,85120],{"class":131,"line":1656},[129,85121,85122],{"class":139},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[129,85124,85125],{"class":131,"line":1661},[129,85126,2414],{"emptyLinePlaceholder":56},[129,85128,85129,85131,85133],{"class":131,"line":1667},[129,85130,52418],{"class":139},[129,85132,51814],{"class":51301},[129,85134,51308],{"class":139},[129,85136,85137,85139,85141],{"class":131,"line":1688},[129,85138,51786],{"class":139},[129,85140,51801],{"class":51301},[129,85142,51308],{"class":139},[14,85144,85145],{},"构造函数的this指向的是实例对象；",[14,85147,85148],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[100,85150,85152],{"id":85151},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85154,85155],{},[40,85156],{"alt":42,"src":85157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[120,85159,85161],{"className":53068,"code":85160,"language":53070,"meta":42,"style":42},"\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",[126,85162,85163,85171,85179,85184,85189,85194,85199,85204,85209,85214,85219,85224,85229,85233,85238,85243,85248,85253,85257,85262,85267,85272,85277,85281,85286,85291,85296,85301,85305,85310,85314,85322],{"__ignoreMap":42},[129,85164,85165,85167,85169],{"class":131,"line":132},[129,85166,1049],{"class":139},[129,85168,51801],{"class":51301},[129,85170,51308],{"class":139},[129,85172,85173,85175,85177],{"class":131,"line":51},[129,85174,52145],{"class":139},[129,85176,51814],{"class":51301},[129,85178,51308],{"class":139},[129,85180,85181],{"class":131,"line":1194},[129,85182,85183],{"class":139},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[129,85185,85186],{"class":131,"line":1209},[129,85187,85188],{"class":139},"    const arr = [1, 2, 3]\n",[129,85190,85191],{"class":131,"line":1215},[129,85192,85193],{"class":139},"    \u002F\u002F 自己定义数组的扩展方法\n",[129,85195,85196],{"class":131,"line":1229},[129,85197,85198],{"class":139},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[129,85200,85201],{"class":131,"line":1235},[129,85202,85203],{"class":139},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[129,85205,85206],{"class":131,"line":1326},[129,85207,85208],{"class":139},"    \u002F\u002F ①.最大值\n",[129,85210,85211],{"class":131,"line":1332},[129,85212,85213],{"class":139},"    Array.prototype.max = function () {\n",[129,85215,85216],{"class":131,"line":1344},[129,85217,85218],{"class":139},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[129,85220,85221],{"class":131,"line":1626},[129,85222,85223],{"class":139},"      return Math.max(...this)\n",[129,85225,85226],{"class":131,"line":1631},[129,85227,85228],{"class":139},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[129,85230,85231],{"class":131,"line":1637},[129,85232,2201],{"class":139},[129,85234,85235],{"class":131,"line":1642},[129,85236,85237],{"class":139},"    console.log(arr.max())\n",[129,85239,85240],{"class":131,"line":1656},[129,85241,85242],{"class":139},"    \u002F\u002F ②最小值\n",[129,85244,85245],{"class":131,"line":1661},[129,85246,85247],{"class":139},"    Array.prototype.min = function () {\n",[129,85249,85250],{"class":131,"line":1667},[129,85251,85252],{"class":139},"      return Math.min(...this)\n",[129,85254,85255],{"class":131,"line":1688},[129,85256,2201],{"class":139},[129,85258,85259],{"class":131,"line":1693},[129,85260,85261],{"class":139},"    console.log(arr.min())\n",[129,85263,85264],{"class":131,"line":1707},[129,85265,85266],{"class":139},"    \u002F\u002F③求和\n",[129,85268,85269],{"class":131,"line":1712},[129,85270,85271],{"class":139},"    Array.prototype.sum = function () {\n",[129,85273,85274],{"class":131,"line":1741},[129,85275,85276],{"class":139},"      return this.reduce((prev, current) => prev + current, 0)\n",[129,85278,85279],{"class":131,"line":1746},[129,85280,2201],{"class":139},[129,85282,85283],{"class":131,"line":1763},[129,85284,85285],{"class":139},"    console.log(arr.sum())\n",[129,85287,85288],{"class":131,"line":1768},[129,85289,85290],{"class":139},"    \u002F\u002F ③排序\n",[129,85292,85293],{"class":131,"line":1773},[129,85294,85295],{"class":139},"    Array.prototype.rever = function () {\n",[129,85297,85298],{"class":131,"line":1778},[129,85299,85300],{"class":139},"      return this.reverse()\n",[129,85302,85303],{"class":131,"line":1792},[129,85304,2201],{"class":139},[129,85306,85307],{"class":131,"line":1797},[129,85308,85309],{"class":139},"    console.log(arr.rever())\n",[129,85311,85312],{"class":131,"line":2591},[129,85313,2414],{"emptyLinePlaceholder":56},[129,85315,85316,85318,85320],{"class":131,"line":2605},[129,85317,52418],{"class":139},[129,85319,51814],{"class":51301},[129,85321,51308],{"class":139},[129,85323,85324,85326,85328],{"class":131,"line":2613},[129,85325,51786],{"class":139},[129,85327,51801],{"class":51301},[129,85329,51308],{"class":139},[14,85331,85332],{},[40,85333],{"alt":42,"src":85334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[100,85336,85338],{"id":85337},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85340,85341],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85343,85344],{},[40,85345],{"alt":42,"src":85346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[120,85348,85350],{"className":53068,"code":85349,"language":53070,"meta":42,"style":42},"\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",[126,85351,85352,85360,85368,85373,85378,85382,85387,85392,85397,85405],{"__ignoreMap":42},[129,85353,85354,85356,85358],{"class":131,"line":132},[129,85355,1049],{"class":139},[129,85357,51801],{"class":51301},[129,85359,51308],{"class":139},[129,85361,85362,85364,85366],{"class":131,"line":51},[129,85363,52145],{"class":139},[129,85365,51814],{"class":51301},[129,85367,51308],{"class":139},[129,85369,85370],{"class":131,"line":1194},[129,85371,85372],{"class":139},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[129,85374,85375],{"class":131,"line":1209},[129,85376,85377],{"class":139},"    function Star() {\n",[129,85379,85380],{"class":131,"line":1215},[129,85381,2201],{"class":139},[129,85383,85384],{"class":131,"line":1229},[129,85385,85386],{"class":139},"    const ldh = new Star()\n",[129,85388,85389],{"class":131,"line":1235},[129,85390,85391],{"class":139},"    console.log(Star.prototype)\n",[129,85393,85394],{"class":131,"line":1326},[129,85395,85396],{"class":139},"    console.log(Star.prototype.constructor === Star)\n",[129,85398,85399,85401,85403],{"class":131,"line":1332},[129,85400,52418],{"class":139},[129,85402,51814],{"class":51301},[129,85404,51308],{"class":139},[129,85406,85407,85409,85411],{"class":131,"line":1344},[129,85408,51786],{"class":139},[129,85410,51801],{"class":51301},[129,85412,51308],{"class":139},[14,85414,85415],{},[40,85416],{"alt":42,"src":85417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85419,85420],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[120,85422,85424],{"className":53068,"code":85423,"language":53070,"meta":42,"style":42},"  \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",[126,85425,85426,85434,85438,85442,85446,85451,85456,85461,85465,85470,85475,85480,85485,85490,85495,85499,85503,85508,85513,85518,85522,85527,85532,85536,85540,85544],{"__ignoreMap":42},[129,85427,85428,85430,85432],{"class":131,"line":132},[129,85429,52145],{"class":139},[129,85431,51814],{"class":51301},[129,85433,51308],{"class":139},[129,85435,85436],{"class":131,"line":51},[129,85437,85372],{"class":139},[129,85439,85440],{"class":131,"line":1194},[129,85441,85377],{"class":139},[129,85443,85444],{"class":131,"line":1209},[129,85445,2201],{"class":139},[129,85447,85448],{"class":131,"line":1215},[129,85449,85450],{"class":139},"    \u002F\u002F const ldh = new Star()\n",[129,85452,85453],{"class":131,"line":1229},[129,85454,85455],{"class":139},"    \u002F\u002F console.log(Star.prototype)\n",[129,85457,85458],{"class":131,"line":1235},[129,85459,85460],{"class":139},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[129,85462,85463],{"class":131,"line":1326},[129,85464,2414],{"emptyLinePlaceholder":56},[129,85466,85467],{"class":131,"line":1332},[129,85468,85469],{"class":139},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[129,85471,85472],{"class":131,"line":1344},[129,85473,85474],{"class":139},"    \u002F\u002F Star.prototype.sing = function () {\n",[129,85476,85477],{"class":131,"line":1626},[129,85478,85479],{"class":139},"    \u002F\u002F   console.log('唱歌')\n",[129,85481,85482],{"class":131,"line":1631},[129,85483,85484],{"class":139},"    \u002F\u002F }\n",[129,85486,85487],{"class":131,"line":1637},[129,85488,85489],{"class":139},"    \u002F\u002F Star.prototype.dance = function () {\n",[129,85491,85492],{"class":131,"line":1642},[129,85493,85494],{"class":139},"    \u002F\u002F   console.log('跳舞')\n",[129,85496,85497],{"class":131,"line":1656},[129,85498,85484],{"class":139},[129,85500,85501],{"class":131,"line":1661},[129,85502,85391],{"class":139},[129,85504,85505],{"class":131,"line":1667},[129,85506,85507],{"class":139},"    Star.prototype = {\n",[129,85509,85510],{"class":131,"line":1688},[129,85511,85512],{"class":139},"      sing: function () {\n",[129,85514,85515],{"class":131,"line":1693},[129,85516,85517],{"class":139},"        console.log('唱歌')\n",[129,85519,85520],{"class":131,"line":1707},[129,85521,77893],{"class":139},[129,85523,85524],{"class":131,"line":1712},[129,85525,85526],{"class":139},"      dance: function () {\n",[129,85528,85529],{"class":131,"line":1741},[129,85530,85531],{"class":139},"        console.log('跳舞')\n",[129,85533,85534],{"class":131,"line":1746},[129,85535,52399],{"class":139},[129,85537,85538],{"class":131,"line":1763},[129,85539,2201],{"class":139},[129,85541,85542],{"class":131,"line":1768},[129,85543,85391],{"class":139},[129,85545,85546,85548,85550],{"class":131,"line":1773},[129,85547,52418],{"class":139},[129,85549,51814],{"class":51301},[129,85551,51308],{"class":139},[14,85553,85554],{},"进行输出结果后会发现：",[14,85556,85557],{},[40,85558],{"alt":42,"src":85559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85561,85562],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85564,85565],{},"所以，要重新指回创造这个原型对象的构造函数",[120,85567,85569],{"className":71214,"code":85568,"language":71216,"meta":42,"style":42},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[126,85570,85571,85585,85590,85595,85606,85619,85624,85635,85649,85653],{"__ignoreMap":42},[129,85572,85573,85576,85578,85581,85583],{"class":131,"line":132},[129,85574,85575],{"class":188},"Star",[129,85577,697],{"class":139},[129,85579,85580],{"class":188},"prototype",[129,85582,13579],{"class":135},[129,85584,15587],{"class":139},[129,85586,85587],{"class":131,"line":51},[129,85588,85589],{"class":198},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[129,85591,85592],{"class":131,"line":1194},[129,85593,85594],{"class":139},"  constructor: Star,\n",[129,85596,85597,85600,85602,85604],{"class":131,"line":1209},[129,85598,85599],{"class":1977},"  sing",[129,85601,51438],{"class":139},[129,85603,54450],{"class":135},[129,85605,54453],{"class":139},[129,85607,85608,85610,85612,85614,85617],{"class":131,"line":1215},[129,85609,73754],{"class":139},[129,85611,58248],{"class":1977},[129,85613,140],{"class":139},[129,85615,85616],{"class":244},"'唱歌'",[129,85618,146],{"class":139},[129,85620,85621],{"class":131,"line":1229},[129,85622,85623],{"class":139},"   },\n",[129,85625,85626,85629,85631,85633],{"class":131,"line":1235},[129,85627,85628],{"class":1977},"   dance",[129,85630,51438],{"class":139},[129,85632,54450],{"class":135},[129,85634,54453],{"class":139},[129,85636,85637,85640,85642,85644,85647],{"class":131,"line":1326},[129,85638,85639],{"class":139},"     console.",[129,85641,58248],{"class":1977},[129,85643,140],{"class":139},[129,85645,85646],{"class":244},"'跳舞'",[129,85648,146],{"class":139},[129,85650,85651],{"class":131,"line":1332},[129,85652,4323],{"class":139},[129,85654,85655],{"class":131,"line":1344},[129,85656,1579],{"class":139},[14,85658,85659],{},[40,85660],{"alt":42,"src":85661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85663,85664],{},"总结1：",[14,85666,85667],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85669,85670],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85672,85673],{},"constructor指的是他的来源",[14,85675,85676],{},[40,85677],{"alt":42,"src":85678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85680,85681],{},[40,85682],{"alt":42,"src":85683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85685,85686],{},"总结2：",[14,85688,85689],{},[40,85690],{"alt":42,"src":85691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85693,85694],{},[40,85695],{"alt":42,"src":85696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85698,85699],{},[40,85700],{"alt":42,"src":85701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[100,85703,85705],{"id":85704},"_4134-对象原型","4.13.4 对象原型",[14,85707,85708],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85710,85711],{},"对象原型就是__proto__这个属性",[14,85713,85714],{},[40,85715],{"alt":42,"src":85716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85718,85719],{},[40,85720],{"alt":42,"src":85721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85723,85724],{},[40,85725],{"alt":42,"src":85726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85728,85729],{},[40,85730],{"alt":42,"src":85731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[120,85733,85735],{"className":53068,"code":85734,"language":53070,"meta":42,"style":42},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[126,85736,85737,85745,85753,85757,85761,85765,85770,85778],{"__ignoreMap":42},[129,85738,85739,85741,85743],{"class":131,"line":132},[129,85740,1049],{"class":139},[129,85742,51801],{"class":51301},[129,85744,51308],{"class":139},[129,85746,85747,85749,85751],{"class":131,"line":51},[129,85748,52145],{"class":139},[129,85750,51814],{"class":51301},[129,85752,51308],{"class":139},[129,85754,85755],{"class":131,"line":1194},[129,85756,85377],{"class":139},[129,85758,85759],{"class":131,"line":1209},[129,85760,2201],{"class":139},[129,85762,85763],{"class":131,"line":1215},[129,85764,85386],{"class":139},[129,85766,85767],{"class":131,"line":1229},[129,85768,85769],{"class":139},"    console.log(ldh)\n",[129,85771,85772,85774,85776],{"class":131,"line":1235},[129,85773,52418],{"class":139},[129,85775,51814],{"class":51301},[129,85777,51308],{"class":139},[129,85779,85780,85782,85784],{"class":131,"line":1326},[129,85781,51786],{"class":139},[129,85783,51801],{"class":51301},[129,85785,51308],{"class":139},[14,85787,85788],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85790,85791],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85793,85794],{},[40,85795],{"alt":42,"src":85796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85798,85799],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85801,85802],{},"对象原型指向原型对象",[14,85804,85805],{},[40,85806],{"alt":42,"src":85807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85809,85810],{},[40,85811],{"alt":42,"src":85812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85814,85815],{},[40,85816],{"alt":42,"src":85817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[100,85819,85821],{"id":85820},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85823,85824],{},[40,85825],{"alt":42,"src":85826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[83,85828,85829,85832,85835,85838],{},[86,85830,85831],{},"构造函数通过new的形式实例化得到实例对象",[86,85833,85834],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[86,85836,85837],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[86,85839,85840],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85842,85843],{},[40,85844],{"alt":42,"src":85845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85847,85848],{},"题目梳理：",[14,85850,85851],{},[40,85852],{"alt":42,"src":85853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[100,85855,85857],{"id":85856},"_4136-原型继承","4.13.6 原型继承",[14,85859,85860],{},[40,85861],{"alt":42,"src":85862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85864,85865],{},[40,85866],{"alt":42,"src":85867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85869,85870],{},[40,85871],{"alt":42,"src":85872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85874,85875],{},[40,85876],{"alt":42,"src":85877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85879,85880],{},[40,85881],{"alt":42,"src":85882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85884,85885],{},[40,85886],{"alt":42,"src":85887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85889,85890],{},[40,85891],{"alt":42,"src":85892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85894,85895],{},[40,85896],{"alt":42,"src":85897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85899,85900],{},"回顾：构造函数每次new得到对象都是不同的",[100,85902,85904],{"id":85903},"_4137-原型链","4.13.7 原型链",[14,85906,85907],{},[40,85908],{"alt":42,"src":85909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85911,85912],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85914,85915],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85917,85918],{},"大哥是Object",[14,85920,85921],{},[40,85922],{"alt":42,"src":85923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85925,85926],{},[40,85927],{"alt":42,"src":85928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85930,85931],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,85933,85934],{},"万物皆对象",[100,85936,85938],{"id":85937},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,85940,85941],{},"模态框",[14,85943,85944],{},"以后遇见这个效果直接使用这个就行",[14,85946,85947],{},[40,85948],{"alt":42,"src":85949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,85951,85952],{},[40,85953],{"alt":42,"src":85954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,85956,85957],{},[40,85958],{"alt":42,"src":85959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,85961,85962],{},[40,85963],{"alt":42,"src":85964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,85966,85967],{},"补充知识点：",[83,85969,85970],{},[86,85971,85972],{},"append()",[14,85974,85975],{},[40,85976],{"alt":42,"src":85977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[120,85979,85981],{"className":50634,"code":85980,"language":50636,"meta":42,"style":42},"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",[126,85982,85983,85988,85993,85998,86002,86006,86010,86015,86020,86025,86029],{"__ignoreMap":42},[129,85984,85985],{"class":131,"line":132},[129,85986,85987],{"class":139},"append(param1)\n",[129,85989,85990],{"class":131,"line":51},[129,85991,85992],{"class":139},"append(param1, param2)\n",[129,85994,85995],{"class":131,"line":1194},[129,85996,85997],{"class":139},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[129,85999,86000],{"class":131,"line":1209},[129,86001,2414],{"emptyLinePlaceholder":56},[129,86003,86004],{"class":131,"line":1215},[129,86005,2414],{"emptyLinePlaceholder":56},[129,86007,86008],{"class":131,"line":1229},[129,86009,2414],{"emptyLinePlaceholder":56},[129,86011,86012],{"class":131,"line":1235},[129,86013,86014],{"class":139},"let div = document.createElement(\"div\");\n",[129,86016,86017],{"class":131,"line":1326},[129,86018,86019],{"class":139},"let p = document.createElement(\"p\");\n",[129,86021,86022],{"class":131,"line":1332},[129,86023,86024],{"class":139},"div.append(p);\n",[129,86026,86027],{"class":131,"line":1344},[129,86028,2414],{"emptyLinePlaceholder":56},[129,86030,86031,86034,86036],{"class":131,"line":1626},[129,86032,86033],{"class":139},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[129,86035,14],{"class":51301},[129,86037,86038],{"class":139},"> ]\n",[83,86040,86041],{"start":51},[86,86042,86043],{},"remove()",[14,86045,86046],{},"自己删自己",[14,86048,86049],{},[40,86050],{"alt":42,"src":86051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[120,86053,86055],{"className":50634,"code":86054,"language":50636,"meta":42,"style":42},"\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",[126,86056,86057,86067,86081,86085,86093,86107,86127,86139,86147,86154,86166,86179,86214,86226,86237,86249,86261,86273,86300,86310,86314,86318,86327,86339,86353,86363,86375,86379,86383,86393,86404,86414,86424,86437,86450,86460,86464,86468,86477,86487,86499,86503,86507,86516,86526,86536,86548,86552,86556,86566,86582,86593,86603,86613,86625,86637,86649,86653,86657,86670,86681,86685,86693,86701,86705,86713,86733,86753,86761,86766,86792,86797,86802,86821,86826,86838,86843,86854,86864,86874,86879,86884,86888,86893,86898,86903,86923,86928,86948,86953,86967,86972,86977,86982,86998,87002,87007,87036,87041,87046,87051,87062,87066,87070,87074,87079,87104,87109,87134,87139,87148,87152,87157,87182,87186,87211,87215,87224,87228,87233,87251,87261,87265,87273,87281,87285],{"__ignoreMap":42},[129,86058,86059,86061,86063,86065],{"class":131,"line":132},[129,86060,51298],{"class":139},[129,86062,51302],{"class":51301},[129,86064,51305],{"class":1977},[129,86066,51308],{"class":139},[129,86068,86069,86071,86073,86075,86077,86079],{"class":131,"line":51},[129,86070,1049],{"class":139},[129,86072,50636],{"class":51301},[129,86074,51317],{"class":1977},[129,86076,185],{"class":139},[129,86078,51322],{"class":244},[129,86080,51308],{"class":139},[129,86082,86083],{"class":131,"line":1194},[129,86084,2414],{"emptyLinePlaceholder":56},[129,86086,86087,86089,86091],{"class":131,"line":1209},[129,86088,1049],{"class":139},[129,86090,51335],{"class":51301},[129,86092,51308],{"class":139},[129,86094,86095,86097,86099,86101,86103,86105],{"class":131,"line":1215},[129,86096,52145],{"class":139},[129,86098,51345],{"class":51301},[129,86100,51348],{"class":1977},[129,86102,185],{"class":139},[129,86104,51353],{"class":244},[129,86106,51308],{"class":139},[129,86108,86109,86111,86113,86115,86117,86119,86121,86123,86125],{"class":131,"line":1229},[129,86110,52145],{"class":139},[129,86112,51345],{"class":51301},[129,86114,14935],{"class":1977},[129,86116,185],{"class":139},[129,86118,51392],{"class":244},[129,86120,51372],{"class":1977},[129,86122,185],{"class":139},[129,86124,51399],{"class":244},[129,86126,51308],{"class":139},[129,86128,86129,86131,86133,86135,86137],{"class":131,"line":1235},[129,86130,52145],{"class":139},[129,86132,51408],{"class":51301},[129,86134,51411],{"class":139},[129,86136,51408],{"class":51301},[129,86138,51308],{"class":139},[129,86140,86141,86143,86145],{"class":131,"line":1326},[129,86142,52145],{"class":139},[129,86144,5141],{"class":51301},[129,86146,51308],{"class":139},[129,86148,86149,86152],{"class":131,"line":1332},[129,86150,86151],{"class":1977},"    .modal",[129,86153,15587],{"class":139},[129,86155,86156,86158,86160,86162,86164],{"class":131,"line":1344},[129,86157,54772],{"class":188},[129,86159,51438],{"class":139},[129,86161,3987],{"class":188},[129,86163,51493],{"class":135},[129,86165,1305],{"class":139},[129,86167,86168,86171,86173,86175,86177],{"class":131,"line":1626},[129,86169,86170],{"class":188},"      min-height",[129,86172,51438],{"class":139},[129,86174,450],{"class":188},[129,86176,51493],{"class":135},[129,86178,1305],{"class":139},[129,86180,86181,86183,86185,86187,86189,86191,86193,86195,86197,86199,86201,86203,86205,86207,86209,86212],{"class":131,"line":1631},[129,86182,78751],{"class":188},[129,86184,51438],{"class":139},[129,86186,331],{"class":188},[129,86188,4107],{"class":188},[129,86190,2052],{"class":188},[129,86192,51493],{"class":135},[129,86194,78768],{"class":188},[129,86196,140],{"class":139},[129,86198,331],{"class":188},[129,86200,12450],{"class":139},[129,86202,331],{"class":188},[129,86204,12450],{"class":139},[129,86206,331],{"class":188},[129,86208,12450],{"class":139},[129,86210,86211],{"class":188},"0.1",[129,86213,2733],{"class":139},[129,86215,86216,86218,86220,86222,86224],{"class":131,"line":1637},[129,86217,55135],{"class":188},[129,86219,51438],{"class":139},[129,86221,432],{"class":188},[129,86223,51493],{"class":135},[129,86225,1305],{"class":139},[129,86227,86228,86230,86232,86235],{"class":131,"line":1642},[129,86229,54760],{"class":188},[129,86231,51438],{"class":139},[129,86233,86234],{"class":188},"fixed",[129,86236,1305],{"class":139},[129,86238,86239,86242,86244,86247],{"class":131,"line":1656},[129,86240,86241],{"class":188},"      z-index",[129,86243,51438],{"class":139},[129,86245,86246],{"class":188},"999",[129,86248,1305],{"class":139},[129,86250,86251,86253,86255,86257,86259],{"class":131,"line":1661},[129,86252,54839],{"class":188},[129,86254,51438],{"class":139},[129,86256,795],{"class":188},[129,86258,467],{"class":135},[129,86260,1305],{"class":139},[129,86262,86263,86265,86267,86269,86271],{"class":131,"line":1667},[129,86264,54948],{"class":188},[129,86266,51438],{"class":139},[129,86268,795],{"class":188},[129,86270,467],{"class":135},[129,86272,1305],{"class":139},[129,86274,86275,86277,86279,86281,86283,86286,86288,86290,86292,86294,86296,86298],{"class":131,"line":1688},[129,86276,78792],{"class":188},[129,86278,51438],{"class":139},[129,86280,78797],{"class":188},[129,86282,140],{"class":139},[129,86284,86285],{"class":188},"-50",[129,86287,467],{"class":135},[129,86289,12450],{"class":139},[129,86291,86285],{"class":188},[129,86293,467],{"class":135},[129,86295,12450],{"class":139},[129,86297,331],{"class":188},[129,86299,2733],{"class":139},[129,86301,86302,86304,86306,86308],{"class":131,"line":1693},[129,86303,54885],{"class":188},[129,86305,51438],{"class":139},[129,86307,60843],{"class":188},[129,86309,1305],{"class":139},[129,86311,86312],{"class":131,"line":1707},[129,86313,2201],{"class":139},[129,86315,86316],{"class":131,"line":1712},[129,86317,2414],{"emptyLinePlaceholder":56},[129,86319,86320,86322,86325],{"class":131,"line":1741},[129,86321,86151],{"class":1977},[129,86323,86324],{"class":1977}," .header",[129,86326,15587],{"class":139},[129,86328,86329,86331,86333,86335,86337],{"class":131,"line":1746},[129,86330,57360],{"class":188},[129,86332,51438],{"class":139},[129,86334,540],{"class":188},[129,86336,51493],{"class":135},[129,86338,1305],{"class":139},[129,86340,86341,86343,86345,86347,86349,86351],{"class":131,"line":1763},[129,86342,54696],{"class":188},[129,86344,51438],{"class":139},[129,86346,331],{"class":188},[129,86348,2052],{"class":188},[129,86350,51493],{"class":135},[129,86352,1305],{"class":139},[129,86354,86355,86357,86359,86361],{"class":131,"line":1768},[129,86356,54760],{"class":188},[129,86358,51438],{"class":139},[129,86360,54765],{"class":188},[129,86362,1305],{"class":139},[129,86364,86365,86367,86369,86371,86373],{"class":131,"line":1773},[129,86366,54923],{"class":188},[129,86368,51438],{"class":139},[129,86370,839],{"class":188},[129,86372,51493],{"class":135},[129,86374,1305],{"class":139},[129,86376,86377],{"class":131,"line":1778},[129,86378,2201],{"class":139},[129,86380,86381],{"class":131,"line":1792},[129,86382,2414],{"emptyLinePlaceholder":56},[129,86384,86385,86387,86389,86391],{"class":131,"line":1797},[129,86386,86151],{"class":1977},[129,86388,86324],{"class":1977},[129,86390,3046],{"class":51301},[129,86392,15587],{"class":139},[129,86394,86395,86398,86400,86402],{"class":131,"line":2591},[129,86396,86397],{"class":188},"      font-style",[129,86399,51438],{"class":139},[129,86401,63842],{"class":188},[129,86403,1305],{"class":139},[129,86405,86406,86408,86410,86412],{"class":131,"line":2605},[129,86407,57417],{"class":188},[129,86409,51438],{"class":139},[129,86411,62071],{"class":188},[129,86413,1305],{"class":139},[129,86415,86416,86418,86420,86422],{"class":131,"line":2613},[129,86417,54760],{"class":188},[129,86419,51438],{"class":139},[129,86421,54832],{"class":188},[129,86423,1305],{"class":139},[129,86425,86426,86429,86431,86433,86435],{"class":131,"line":2618},[129,86427,86428],{"class":188},"      right",[129,86430,51438],{"class":139},[129,86432,714],{"class":188},[129,86434,51493],{"class":135},[129,86436,1305],{"class":139},[129,86438,86439,86441,86443,86446,86448],{"class":131,"line":2624},[129,86440,54948],{"class":188},[129,86442,51438],{"class":139},[129,86444,86445],{"class":188},"-2",[129,86447,51493],{"class":135},[129,86449,1305],{"class":139},[129,86451,86452,86454,86456,86458],{"class":131,"line":2630},[129,86453,62026],{"class":188},[129,86455,51438],{"class":139},[129,86457,62031],{"class":188},[129,86459,1305],{"class":139},[129,86461,86462],{"class":131,"line":2635},[129,86463,2201],{"class":139},[129,86465,86466],{"class":131,"line":7963},[129,86467,2414],{"emptyLinePlaceholder":56},[129,86469,86470,86472,86475],{"class":131,"line":7987},[129,86471,86151],{"class":1977},[129,86473,86474],{"class":1977}," .body",[129,86476,15587],{"class":139},[129,86478,86479,86481,86483,86485],{"class":131,"line":7992},[129,86480,57287],{"class":188},[129,86482,51438],{"class":139},[129,86484,51593],{"class":188},[129,86486,1305],{"class":139},[129,86488,86489,86491,86493,86495,86497],{"class":131,"line":7998},[129,86490,54696],{"class":188},[129,86492,51438],{"class":139},[129,86494,585],{"class":188},[129,86496,51493],{"class":135},[129,86498,1305],{"class":139},[129,86500,86501],{"class":131,"line":8025},[129,86502,2201],{"class":139},[129,86504,86505],{"class":131,"line":8030},[129,86506,2414],{"emptyLinePlaceholder":56},[129,86508,86509,86511,86514],{"class":131,"line":8036},[129,86510,86151],{"class":1977},[129,86512,86513],{"class":1977}," .footer",[129,86515,15587],{"class":139},[129,86517,86518,86520,86522,86524],{"class":131,"line":8048},[129,86519,55010],{"class":188},[129,86521,51438],{"class":139},[129,86523,51478],{"class":188},[129,86525,1305],{"class":139},[129,86527,86528,86530,86532,86534],{"class":131,"line":8060},[129,86529,55021],{"class":188},[129,86531,51438],{"class":139},[129,86533,51581],{"class":188},[129,86535,1305],{"class":139},[129,86537,86538,86540,86542,86544,86546],{"class":131,"line":8072},[129,86539,54696],{"class":188},[129,86541,51438],{"class":139},[129,86543,585],{"class":188},[129,86545,51493],{"class":135},[129,86547,1305],{"class":139},[129,86549,86550],{"class":131,"line":9731},[129,86551,2201],{"class":139},[129,86553,86554],{"class":131,"line":9756},[129,86555,2414],{"emptyLinePlaceholder":56},[129,86557,86558,86560,86562,86564],{"class":131,"line":9779},[129,86559,86151],{"class":1977},[129,86561,86513],{"class":1977},[129,86563,1413],{"class":51301},[129,86565,15587],{"class":139},[129,86567,86568,86570,86572,86574,86576,86578,86580],{"class":131,"line":9803},[129,86569,54696],{"class":188},[129,86571,51438],{"class":139},[129,86573,211],{"class":188},[129,86575,51493],{"class":135},[129,86577,2097],{"class":188},[129,86579,51493],{"class":135},[129,86581,1305],{"class":139},[129,86583,86584,86586,86588,86591],{"class":131,"line":9808},[129,86585,61722],{"class":188},[129,86587,51438],{"class":139},[129,86589,86590],{"class":188},"#ccc",[129,86592,1305],{"class":139},[129,86594,86595,86597,86599,86601],{"class":131,"line":9813},[129,86596,63971],{"class":188},[129,86598,51438],{"class":139},[129,86600,54738],{"class":188},[129,86602,1305],{"class":139},[129,86604,86605,86607,86609,86611],{"class":131,"line":9818},[129,86606,57417],{"class":188},[129,86608,51438],{"class":139},[129,86610,60843],{"class":188},[129,86612,1305],{"class":139},[129,86614,86615,86617,86619,86621,86623],{"class":131,"line":9827},[129,86616,55135],{"class":188},[129,86618,51438],{"class":139},[129,86620,217],{"class":188},[129,86622,51493],{"class":135},[129,86624,1305],{"class":139},[129,86626,86627,86629,86631,86633,86635],{"class":131,"line":9832},[129,86628,61751],{"class":188},[129,86630,51438],{"class":139},[129,86632,585],{"class":188},[129,86634,51493],{"class":135},[129,86636,1305],{"class":139},[129,86638,86639,86641,86643,86645,86647],{"class":131,"line":9838},[129,86640,54923],{"class":188},[129,86642,51438],{"class":139},[129,86644,688],{"class":188},[129,86646,51493],{"class":135},[129,86648,1305],{"class":139},[129,86650,86651],{"class":131,"line":9859},[129,86652,2201],{"class":139},[129,86654,86655],{"class":131,"line":9865},[129,86656,2414],{"emptyLinePlaceholder":56},[129,86658,86659,86661,86663,86665,86668],{"class":131,"line":9879},[129,86660,86151],{"class":1977},[129,86662,86513],{"class":1977},[129,86664,1413],{"class":51301},[129,86666,86667],{"class":1977},".submit",[129,86669,15587],{"class":139},[129,86671,86672,86674,86676,86679],{"class":131,"line":9885},[129,86673,54885],{"class":188},[129,86675,51438],{"class":139},[129,86677,86678],{"class":188},"#369",[129,86680,1305],{"class":139},[129,86682,86683],{"class":131,"line":9912},[129,86684,2201],{"class":139},[129,86686,86687,86689,86691],{"class":131,"line":9921},[129,86688,52418],{"class":139},[129,86690,5141],{"class":51301},[129,86692,51308],{"class":139},[129,86694,86695,86697,86699],{"class":131,"line":9927},[129,86696,51786],{"class":139},[129,86698,51335],{"class":51301},[129,86700,51308],{"class":139},[129,86702,86703],{"class":131,"line":9935},[129,86704,2414],{"emptyLinePlaceholder":56},[129,86706,86707,86709,86711],{"class":131,"line":9940},[129,86708,1049],{"class":139},[129,86710,51801],{"class":51301},[129,86712,51308],{"class":139},[129,86714,86715,86717,86719,86721,86723,86726,86729,86731],{"class":131,"line":16619},[129,86716,52145],{"class":139},[129,86718,53888],{"class":51301},[129,86720,14974],{"class":1977},[129,86722,185],{"class":139},[129,86724,86725],{"class":244},"\"delete\"",[129,86727,86728],{"class":139},">删除\u003C\u002F",[129,86730,53888],{"class":51301},[129,86732,51308],{"class":139},[129,86734,86735,86737,86739,86741,86743,86746,86749,86751],{"class":131,"line":16625},[129,86736,52145],{"class":139},[129,86738,53888],{"class":51301},[129,86740,14974],{"class":1977},[129,86742,185],{"class":139},[129,86744,86745],{"class":244},"\"login\"",[129,86747,86748],{"class":139},">登录\u003C\u002F",[129,86750,53888],{"class":51301},[129,86752,51308],{"class":139},[129,86754,86755,86757,86759],{"class":131,"line":16648},[129,86756,52145],{"class":139},[129,86758,51814],{"class":51301},[129,86760,51308],{"class":139},[129,86762,86763],{"class":131,"line":16654},[129,86764,86765],{"class":198},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[129,86767,86768,86770,86773,86775,86777,86779,86781,86783,86786,86788,86790],{"class":131,"line":16677},[129,86769,70085],{"class":135},[129,86771,86772],{"class":1977}," Modal",[129,86774,140],{"class":139},[129,86776,51408],{"class":5231},[129,86778,13579],{"class":135},[129,86780,69931],{"class":244},[129,86782,12450],{"class":139},[129,86784,86785],{"class":5231},"message",[129,86787,13579],{"class":135},[129,86789,69931],{"class":244},[129,86791,12457],{"class":139},[129,86793,86794],{"class":131,"line":16691},[129,86795,86796],{"class":198},"      \u002F\u002F 创建Model 模态框盒子\n",[129,86798,86799],{"class":131,"line":16711},[129,86800,86801],{"class":198},"      \u002F\u002F 1.1 创建div标签\n",[129,86803,86804,86806,86809,86811,86813,86815,86817,86819],{"class":131,"line":16717},[129,86805,70052],{"class":188},[129,86807,86808],{"class":139},".modalBox ",[129,86810,185],{"class":135},[129,86812,54397],{"class":139},[129,86814,70152],{"class":1977},[129,86816,140],{"class":139},[129,86818,81932],{"class":244},[129,86820,146],{"class":139},[129,86822,86823],{"class":131,"line":16728},[129,86824,86825],{"class":198},"      \u002F\u002F 1.2 给div 添加类名为model\n",[129,86827,86828,86830,86833,86835],{"class":131,"line":16751},[129,86829,70052],{"class":188},[129,86831,86832],{"class":139},".modalBox.className ",[129,86834,185],{"class":135},[129,86836,86837],{"class":244}," 'modal'\n",[129,86839,86840],{"class":131,"line":16773},[129,86841,86842],{"class":198},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[129,86844,86845,86847,86850,86852],{"class":131,"line":16778},[129,86846,70052],{"class":188},[129,86848,86849],{"class":139},".modalBox.innerHTML ",[129,86851,185],{"class":135},[129,86853,70169],{"class":244},[129,86855,86856,86859,86861],{"class":131,"line":16784},[129,86857,86858],{"class":244},"        \u003Cdiv class=\"header\">${",[129,86860,51408],{"class":139},[129,86862,86863],{"class":244},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[129,86865,86866,86869,86871],{"class":131,"line":16798},[129,86867,86868],{"class":244},"        \u003Cdiv class=\"body\">${",[129,86870,86785],{"class":139},[129,86872,86873],{"class":244},"}\u003C\u002Fdiv>\n",[129,86875,86876],{"class":131,"line":16811},[129,86877,86878],{"class":244},"      `\n",[129,86880,86881],{"class":131,"line":16816},[129,86882,86883],{"class":198},"      \u002F\u002F console.log(this.modalBox)\n",[129,86885,86886],{"class":131,"line":16830},[129,86887,2201],{"class":139},[129,86889,86890],{"class":131,"line":16835},[129,86891,86892],{"class":198},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[129,86894,86895],{"class":131,"line":16841},[129,86896,86897],{"class":198},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[129,86899,86900],{"class":131,"line":16846},[129,86901,86902],{"class":198},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[129,86904,86905,86908,86910,86912,86914,86917,86919,86921],{"class":131,"line":16860},[129,86906,86907],{"class":188},"    Modal",[129,86909,697],{"class":139},[129,86911,85580],{"class":188},[129,86913,697],{"class":139},[129,86915,86916],{"class":1977},"open",[129,86918,13579],{"class":135},[129,86920,58919],{"class":135},[129,86922,54453],{"class":139},[129,86924,86925],{"class":131,"line":16865},[129,86926,86927],{"class":198},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[129,86929,86930,86932,86935,86937,86939,86941,86943,86946],{"class":131,"line":16870},[129,86931,58229],{"class":135},[129,86933,86934],{"class":188}," box",[129,86936,13579],{"class":135},[129,86938,54397],{"class":139},[129,86940,54400],{"class":1977},[129,86942,140],{"class":139},[129,86944,86945],{"class":244},"'.modal'",[129,86947,146],{"class":139},[129,86949,86950],{"class":131,"line":16884},[129,86951,86952],{"class":198},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[129,86954,86955,86958,86960,86963,86965],{"class":131,"line":16896},[129,86956,86957],{"class":139},"      box ",[129,86959,1729],{"class":135},[129,86961,86962],{"class":139}," box.",[129,86964,57007],{"class":1977},[129,86966,1990],{"class":139},[129,86968,86969],{"class":131,"line":16901},[129,86970,86971],{"class":198},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[129,86973,86974],{"class":131,"line":16914},[129,86975,86976],{"class":198},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[129,86978,86979],{"class":131,"line":16919},[129,86980,86981],{"class":198},"      \u002F\u002F append可以增加对象\n",[129,86983,86984,86987,86990,86992,86995],{"class":131,"line":16924},[129,86985,86986],{"class":139},"      document.body.",[129,86988,86989],{"class":1977},"append",[129,86991,140],{"class":139},[129,86993,86994],{"class":188},"this",[129,86996,86997],{"class":139},".modalBox)\n",[129,86999,87000],{"class":131,"line":16929},[129,87001,2414],{"emptyLinePlaceholder":56},[129,87003,87004],{"class":131,"line":16942},[129,87005,87006],{"class":198},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[129,87008,87009,87011,87014,87016,87018,87021,87023,87025,87027,87029,87032,87034],{"class":131,"line":16947},[129,87010,70052],{"class":188},[129,87012,87013],{"class":139},".modalBox.",[129,87015,54400],{"class":1977},[129,87017,140],{"class":139},[129,87019,87020],{"class":244},"'i'",[129,87022,30827],{"class":139},[129,87024,57814],{"class":1977},[129,87026,140],{"class":139},[129,87028,57819],{"class":244},[129,87030,87031],{"class":139},", () ",[129,87033,84723],{"class":135},[129,87035,15587],{"class":139},[129,87037,87038],{"class":131,"line":32634},[129,87039,87040],{"class":198},"        \u002F\u002F 这个地方需要用到箭头函数\n",[129,87042,87043],{"class":131,"line":32640},[129,87044,87045],{"class":198},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[129,87047,87048],{"class":131,"line":32646},[129,87049,87050],{"class":198},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[129,87052,87053,87055,87057,87060],{"class":131,"line":32652},[129,87054,64727],{"class":188},[129,87056,697],{"class":139},[129,87058,87059],{"class":1977},"close",[129,87061,1990],{"class":139},[129,87063,87064],{"class":131,"line":32658},[129,87065,64816],{"class":139},[129,87067,87068],{"class":131,"line":32669},[129,87069,2201],{"class":139},[129,87071,87072],{"class":131,"line":32675},[129,87073,2414],{"emptyLinePlaceholder":56},[129,87075,87076],{"class":131,"line":32695},[129,87077,87078],{"class":198},"    \u002F\u002F 测试一下 点击 删除按钮\n",[129,87080,87081,87083,87085,87087,87090,87092,87094,87096,87098,87100,87102],{"class":131,"line":32701},[129,87082,52408],{"class":139},[129,87084,54400],{"class":1977},[129,87086,140],{"class":139},[129,87088,87089],{"class":244},"'#delete'",[129,87091,30827],{"class":139},[129,87093,57814],{"class":1977},[129,87095,140],{"class":139},[129,87097,57819],{"class":244},[129,87099,87031],{"class":139},[129,87101,84723],{"class":135},[129,87103,15587],{"class":139},[129,87105,87106],{"class":131,"line":32712},[129,87107,87108],{"class":198},"      \u002F\u002F 先调用Model构造函数\n",[129,87110,87111,87113,87116,87118,87120,87122,87124,87127,87129,87132],{"class":131,"line":32718},[129,87112,58229],{"class":135},[129,87114,87115],{"class":188}," del",[129,87117,13579],{"class":135},[129,87119,11593],{"class":135},[129,87121,86772],{"class":1977},[129,87123,140],{"class":139},[129,87125,87126],{"class":244},"'温馨的提示'",[129,87128,12450],{"class":139},[129,87130,87131],{"class":244},"'您没有删除权限操作'",[129,87133,146],{"class":139},[129,87135,87136],{"class":131,"line":32724},[129,87137,87138],{"class":198},"      \u002F\u002F 实例对象调用open方法\n",[129,87140,87141,87144,87146],{"class":131,"line":32730},[129,87142,87143],{"class":139},"      del.",[129,87145,86916],{"class":1977},[129,87147,1990],{"class":139},[129,87149,87150],{"class":131,"line":32736},[129,87151,33462],{"class":139},[129,87153,87154],{"class":131,"line":32742},[129,87155,87156],{"class":198},"    \u002F\u002F 测试一下 点击 登录按钮\n",[129,87158,87159,87161,87163,87165,87168,87170,87172,87174,87176,87178,87180],{"class":131,"line":32748},[129,87160,52408],{"class":139},[129,87162,54400],{"class":1977},[129,87164,140],{"class":139},[129,87166,87167],{"class":244},"'#login'",[129,87169,30827],{"class":139},[129,87171,57814],{"class":1977},[129,87173,140],{"class":139},[129,87175,57819],{"class":244},[129,87177,87031],{"class":139},[129,87179,84723],{"class":135},[129,87181,15587],{"class":139},[129,87183,87184],{"class":131,"line":32754},[129,87185,87108],{"class":198},[129,87187,87188,87190,87193,87195,87197,87199,87201,87204,87206,87209],{"class":131,"line":32774},[129,87189,58229],{"class":135},[129,87191,87192],{"class":188}," log",[129,87194,13579],{"class":135},[129,87196,11593],{"class":135},[129,87198,86772],{"class":1977},[129,87200,140],{"class":139},[129,87202,87203],{"class":244},"'友情提示'",[129,87205,12450],{"class":139},[129,87207,87208],{"class":244},"'您还没有登录呢'",[129,87210,146],{"class":139},[129,87212,87213],{"class":131,"line":32780},[129,87214,87138],{"class":198},[129,87216,87217,87220,87222],{"class":131,"line":32796},[129,87218,87219],{"class":139},"      log.",[129,87221,86916],{"class":1977},[129,87223,1990],{"class":139},[129,87225,87226],{"class":131,"line":32802},[129,87227,33462],{"class":139},[129,87229,87230],{"class":131,"line":32816},[129,87231,87232],{"class":198},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[129,87234,87235,87237,87239,87241,87243,87245,87247,87249],{"class":131,"line":32822},[129,87236,86907],{"class":188},[129,87238,697],{"class":139},[129,87240,85580],{"class":188},[129,87242,697],{"class":139},[129,87244,87059],{"class":1977},[129,87246,13579],{"class":135},[129,87248,58919],{"class":135},[129,87250,54453],{"class":139},[129,87252,87253,87255,87257,87259],{"class":131,"line":32837},[129,87254,70052],{"class":188},[129,87256,87013],{"class":139},[129,87258,57007],{"class":1977},[129,87260,1990],{"class":139},[129,87262,87263],{"class":131,"line":32843},[129,87264,2201],{"class":139},[129,87266,87267,87269,87271],{"class":131,"line":32852},[129,87268,52418],{"class":139},[129,87270,51814],{"class":51301},[129,87272,51308],{"class":139},[129,87274,87275,87277,87279],{"class":131,"line":32858},[129,87276,51786],{"class":139},[129,87278,51801],{"class":51301},[129,87280,51308],{"class":139},[129,87282,87283],{"class":131,"line":32867},[129,87284,2414],{"emptyLinePlaceholder":56},[129,87286,87287,87289,87291],{"class":131,"line":32873},[129,87288,51786],{"class":139},[129,87290,50636],{"class":51301},[129,87292,51308],{"class":139},[14,87294,87295],{},[40,87296],{"alt":42,"src":87297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[71,87299,87301],{"id":87300},"_414-深浅拷贝","4.14 深浅拷贝",[100,87303,87305],{"id":87304},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87307,87308],{},[40,87309],{"alt":42,"src":87310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87312,87313],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87315,87316],{},[40,87317],{"alt":42,"src":87318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87320,87321],{},[40,87322],{"alt":42,"src":87323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87325,87326],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87328,87329],{},[40,87330],{"alt":42,"src":87331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87333,11347],{},[14,87335,87336],{},[40,87337],{"alt":42,"src":87338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[100,87340,87342],{"id":87341},"_4142-深拷贝","4.14.2 深拷贝",[14,87344,87345],{},"深拷贝：拷贝的是对象，不是地址",[14,87347,87348],{},"常用的三种方法：",[83,87350,87351,87354,87357],{},[86,87352,87353],{},"通过递归实现深拷贝",[86,87355,87356],{},"lodash\u002FcloneDeep",[86,87358,87359],{},"通过JSON.stringify()实现",[22013,87361,87363],{"id":87362},"_41421-递归函数","4.14.2.1 递归函数",[14,87365,87366],{},[40,87367],{"alt":42,"src":87368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[83,87370,87371],{},[86,87372,87373],{},"死递归占溢出：",[120,87375,87377],{"className":53068,"code":87376,"language":53070,"meta":42,"style":42},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[126,87378,87379,87387,87395,87399,87404,87408,87413,87421],{"__ignoreMap":42},[129,87380,87381,87383,87385],{"class":131,"line":132},[129,87382,1049],{"class":139},[129,87384,51801],{"class":51301},[129,87386,51308],{"class":139},[129,87388,87389,87391,87393],{"class":131,"line":51},[129,87390,52145],{"class":139},[129,87392,51814],{"class":51301},[129,87394,51308],{"class":139},[129,87396,87397],{"class":131,"line":1194},[129,87398,77144],{"class":139},[129,87400,87401],{"class":131,"line":1209},[129,87402,87403],{"class":139},"      fn()\n",[129,87405,87406],{"class":131,"line":1215},[129,87407,2201],{"class":139},[129,87409,87410],{"class":131,"line":1229},[129,87411,87412],{"class":139},"    fn()\n",[129,87414,87415,87417,87419],{"class":131,"line":1235},[129,87416,52418],{"class":139},[129,87418,51814],{"class":51301},[129,87420,51308],{"class":139},[129,87422,87423,87425,87427],{"class":131,"line":1326},[129,87424,51786],{"class":139},[129,87426,51801],{"class":51301},[129,87428,51308],{"class":139},[83,87430,87431],{"start":51},[86,87432,87433],{},"递归函数要加判断条件：",[14,87435,87436],{},[40,87437],{"alt":42,"src":87438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[83,87440,87441],{"start":1194},[86,87442,87443],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[120,87445,87447],{"className":50634,"code":87446,"language":50636,"meta":42,"style":42},"\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",[126,87448,87449,87459,87473,87477,87485,87499,87519,87531,87539,87543,87551,87563,87571,87579,87604,87616,87620,87627,87635,87643,87647],{"__ignoreMap":42},[129,87450,87451,87453,87455,87457],{"class":131,"line":132},[129,87452,51298],{"class":139},[129,87454,51302],{"class":51301},[129,87456,51305],{"class":1977},[129,87458,51308],{"class":139},[129,87460,87461,87463,87465,87467,87469,87471],{"class":131,"line":51},[129,87462,1049],{"class":139},[129,87464,50636],{"class":51301},[129,87466,51317],{"class":1977},[129,87468,185],{"class":139},[129,87470,51322],{"class":244},[129,87472,51308],{"class":139},[129,87474,87475],{"class":131,"line":1194},[129,87476,2414],{"emptyLinePlaceholder":56},[129,87478,87479,87481,87483],{"class":131,"line":1209},[129,87480,1049],{"class":139},[129,87482,51335],{"class":51301},[129,87484,51308],{"class":139},[129,87486,87487,87489,87491,87493,87495,87497],{"class":131,"line":1215},[129,87488,52145],{"class":139},[129,87490,51345],{"class":51301},[129,87492,51348],{"class":1977},[129,87494,185],{"class":139},[129,87496,51353],{"class":244},[129,87498,51308],{"class":139},[129,87500,87501,87503,87505,87507,87509,87511,87513,87515,87517],{"class":131,"line":1229},[129,87502,52145],{"class":139},[129,87504,51345],{"class":51301},[129,87506,14935],{"class":1977},[129,87508,185],{"class":139},[129,87510,51392],{"class":244},[129,87512,51372],{"class":1977},[129,87514,185],{"class":139},[129,87516,51399],{"class":244},[129,87518,51308],{"class":139},[129,87520,87521,87523,87525,87527,87529],{"class":131,"line":1235},[129,87522,52145],{"class":139},[129,87524,51408],{"class":51301},[129,87526,51411],{"class":139},[129,87528,51408],{"class":51301},[129,87530,51308],{"class":139},[129,87532,87533,87535,87537],{"class":131,"line":1326},[129,87534,51786],{"class":139},[129,87536,51335],{"class":51301},[129,87538,51308],{"class":139},[129,87540,87541],{"class":131,"line":1332},[129,87542,2414],{"emptyLinePlaceholder":56},[129,87544,87545,87547,87549],{"class":131,"line":1344},[129,87546,1049],{"class":139},[129,87548,51801],{"class":51301},[129,87550,51308],{"class":139},[129,87552,87553,87555,87557,87559,87561],{"class":131,"line":1626},[129,87554,52145],{"class":139},[129,87556,51612],{"class":51301},[129,87558,55315],{"class":139},[129,87560,51612],{"class":51301},[129,87562,51308],{"class":139},[129,87564,87565,87567,87569],{"class":131,"line":1631},[129,87566,52145],{"class":139},[129,87568,51814],{"class":51301},[129,87570,51308],{"class":139},[129,87572,87573,87575,87577],{"class":131,"line":1637},[129,87574,70085],{"class":135},[129,87576,73774],{"class":1977},[129,87578,10868],{"class":139},[129,87580,87581,87583,87585,87587,87589,87591,87593,87595,87597,87599,87602],{"class":131,"line":1642},[129,87582,55772],{"class":139},[129,87584,54400],{"class":1977},[129,87586,140],{"class":139},[129,87588,81932],{"class":244},[129,87590,74250],{"class":139},[129,87592,185],{"class":135},[129,87594,11593],{"class":135},[129,87596,73790],{"class":1977},[129,87598,17276],{"class":139},[129,87600,87601],{"class":1977},"toLocaleString",[129,87603,1990],{"class":139},[129,87605,87606,87609,87612,87614],{"class":131,"line":1656},[129,87607,87608],{"class":1977},"      setTimeout",[129,87610,87611],{"class":139},"(getTime, ",[129,87613,6425],{"class":188},[129,87615,146],{"class":139},[129,87617,87618],{"class":131,"line":1661},[129,87619,2201],{"class":139},[129,87621,87622,87625],{"class":131,"line":1667},[129,87623,87624],{"class":1977},"    getTime",[129,87626,1990],{"class":139},[129,87628,87629,87631,87633],{"class":131,"line":1688},[129,87630,52418],{"class":139},[129,87632,51814],{"class":51301},[129,87634,51308],{"class":139},[129,87636,87637,87639,87641],{"class":131,"line":1693},[129,87638,51786],{"class":139},[129,87640,51801],{"class":51301},[129,87642,51308],{"class":139},[129,87644,87645],{"class":131,"line":1707},[129,87646,2414],{"emptyLinePlaceholder":56},[129,87648,87649,87651,87653],{"class":131,"line":1712},[129,87650,51786],{"class":139},[129,87652,50636],{"class":51301},[129,87654,51308],{"class":139},[14,87656,87657],{},[40,87658],{"alt":42,"src":87659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[83,87661,87662],{"start":1209},[86,87663,87353],{},[14,87665,87666],{},[40,87667],{"alt":42,"src":87668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87670,87671],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87673,39190],{},[14,87675,87676],{},"这个是简易版的递归函数深拷贝",[14,87678,87679],{},"一定要注意先数组再对象，因为万物皆可对象",[120,87681,87683],{"className":50634,"code":87682,"language":50636,"meta":42,"style":42},"\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",[126,87684,87685,87695,87709,87713,87721,87735,87755,87767,87775,87779,87787,87795,87805,87814,87822,87838,87842,87850,87854,87858,87870,87875,87894,87910,87915,87920,87925,87940,87945,87950,87959,87967,87984,87992,87998,88006,88011,88016,88025,88029,88033,88037,88048,88057,88067,88081,88091,88099,88107,88115,88119],{"__ignoreMap":42},[129,87686,87687,87689,87691,87693],{"class":131,"line":132},[129,87688,51298],{"class":139},[129,87690,51302],{"class":51301},[129,87692,51305],{"class":1977},[129,87694,51308],{"class":139},[129,87696,87697,87699,87701,87703,87705,87707],{"class":131,"line":51},[129,87698,1049],{"class":139},[129,87700,50636],{"class":51301},[129,87702,51317],{"class":1977},[129,87704,185],{"class":139},[129,87706,51322],{"class":244},[129,87708,51308],{"class":139},[129,87710,87711],{"class":131,"line":1194},[129,87712,2414],{"emptyLinePlaceholder":56},[129,87714,87715,87717,87719],{"class":131,"line":1209},[129,87716,1049],{"class":139},[129,87718,51335],{"class":51301},[129,87720,51308],{"class":139},[129,87722,87723,87725,87727,87729,87731,87733],{"class":131,"line":1215},[129,87724,52145],{"class":139},[129,87726,51345],{"class":51301},[129,87728,51348],{"class":1977},[129,87730,185],{"class":139},[129,87732,51353],{"class":244},[129,87734,51308],{"class":139},[129,87736,87737,87739,87741,87743,87745,87747,87749,87751,87753],{"class":131,"line":1229},[129,87738,52145],{"class":139},[129,87740,51345],{"class":51301},[129,87742,14935],{"class":1977},[129,87744,185],{"class":139},[129,87746,51392],{"class":244},[129,87748,51372],{"class":1977},[129,87750,185],{"class":139},[129,87752,51399],{"class":244},[129,87754,51308],{"class":139},[129,87756,87757,87759,87761,87763,87765],{"class":131,"line":1235},[129,87758,52145],{"class":139},[129,87760,51408],{"class":51301},[129,87762,51411],{"class":139},[129,87764,51408],{"class":51301},[129,87766,51308],{"class":139},[129,87768,87769,87771,87773],{"class":131,"line":1326},[129,87770,51786],{"class":139},[129,87772,51335],{"class":51301},[129,87774,51308],{"class":139},[129,87776,87777],{"class":131,"line":1332},[129,87778,2414],{"emptyLinePlaceholder":56},[129,87780,87781,87783,87785],{"class":131,"line":1344},[129,87782,1049],{"class":139},[129,87784,51801],{"class":51301},[129,87786,51308],{"class":139},[129,87788,87789,87791,87793],{"class":131,"line":1626},[129,87790,52145],{"class":139},[129,87792,51814],{"class":51301},[129,87794,51308],{"class":139},[129,87796,87797,87799,87801,87803],{"class":131,"line":1631},[129,87798,11236],{"class":135},[129,87800,69972],{"class":188},[129,87802,13579],{"class":135},[129,87804,15587],{"class":139},[129,87806,87807,87809,87812],{"class":131,"line":1637},[129,87808,71617],{"class":139},[129,87810,87811],{"class":244},"'pink'",[129,87813,31467],{"class":139},[129,87815,87816,87818,87820],{"class":131,"line":1642},[129,87817,71627],{"class":139},[129,87819,789],{"class":188},[129,87821,31467],{"class":139},[129,87823,87824,87827,87830,87832,87835],{"class":131,"line":1656},[129,87825,87826],{"class":139},"      hobby: [",[129,87828,87829],{"class":244},"'乒乓球'",[129,87831,12450],{"class":139},[129,87833,87834],{"class":244},"'足球'",[129,87836,87837],{"class":139},"],\n",[129,87839,87840],{"class":131,"line":1661},[129,87841,77873],{"class":139},[129,87843,87844,87847],{"class":131,"line":1667},[129,87845,87846],{"class":139},"        baby: ",[129,87848,87849],{"class":244},"'小pink'\n",[129,87851,87852],{"class":131,"line":1688},[129,87853,52399],{"class":139},[129,87855,87856],{"class":131,"line":1693},[129,87857,2201],{"class":139},[129,87859,87860,87862,87865,87867],{"class":131,"line":1707},[129,87861,11236],{"class":135},[129,87863,87864],{"class":188}," o",[129,87866,13579],{"class":135},[129,87868,87869],{"class":139}," {}\n",[129,87871,87872],{"class":131,"line":1712},[129,87873,87874],{"class":198},"    \u002F\u002F 拷贝函数\n",[129,87876,87877,87879,87882,87884,87887,87889,87892],{"class":131,"line":1741},[129,87878,70085],{"class":135},[129,87880,87881],{"class":1977}," deepCopy",[129,87883,140],{"class":139},[129,87885,87886],{"class":5231},"newObj",[129,87888,12450],{"class":139},[129,87890,87891],{"class":5231},"oldObj",[129,87893,12457],{"class":139},[129,87895,87896,87898,87900,87902,87905,87907],{"class":131,"line":1746},[129,87897,52285],{"class":135},[129,87899,1672],{"class":139},[129,87901,51848],{"class":135},[129,87903,87904],{"class":139}," k ",[129,87906,26044],{"class":135},[129,87908,87909],{"class":139}," oldObj) {\n",[129,87911,87912],{"class":131,"line":1763},[129,87913,87914],{"class":198},"        \u002F\u002F 处理数组的问题\n",[129,87916,87917],{"class":131,"line":1768},[129,87918,87919],{"class":198},"        \u002F\u002F 判断是否属于数组\n",[129,87921,87922],{"class":131,"line":1773},[129,87923,87924],{"class":198},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[129,87926,87927,87929,87932,87935,87938],{"class":131,"line":1778},[129,87928,2511],{"class":135},[129,87930,87931],{"class":139}," (oldObj[k] ",[129,87933,87934],{"class":135},"instanceof",[129,87936,87937],{"class":1977}," Array",[129,87939,12457],{"class":139},[129,87941,87942],{"class":131,"line":1792},[129,87943,87944],{"class":198},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[129,87946,87947],{"class":131,"line":1797},[129,87948,87949],{"class":198},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[129,87951,87952,87955,87957],{"class":131,"line":2591},[129,87953,87954],{"class":139},"          newObj[k] ",[129,87956,185],{"class":135},[129,87958,51839],{"class":139},[129,87960,87961,87964],{"class":131,"line":2605},[129,87962,87963],{"class":1977},"          deepCopy",[129,87965,87966],{"class":139},"(newObj[k], oldObj[k])\n",[129,87968,87969,87971,87973,87975,87977,87979,87982],{"class":131,"line":2613},[129,87970,80081],{"class":139},[129,87972,1715],{"class":135},[129,87974,1718],{"class":135},[129,87976,87931],{"class":139},[129,87978,87934],{"class":135},[129,87980,87981],{"class":1977}," Object",[129,87983,12457],{"class":139},[129,87985,87986,87988,87990],{"class":131,"line":2618},[129,87987,87954],{"class":139},[129,87989,185],{"class":135},[129,87991,87869],{"class":139},[129,87993,87994,87996],{"class":131,"line":2624},[129,87995,87963],{"class":1977},[129,87997,87966],{"class":139},[129,87999,88000,88002,88004],{"class":131,"line":2630},[129,88001,80081],{"class":139},[129,88003,1715],{"class":135},[129,88005,15587],{"class":139},[129,88007,88008],{"class":131,"line":2635},[129,88009,88010],{"class":198},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[129,88012,88013],{"class":131,"line":7963},[129,88014,88015],{"class":198},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[129,88017,88018,88020,88022],{"class":131,"line":7987},[129,88019,87954],{"class":139},[129,88021,185],{"class":135},[129,88023,88024],{"class":139}," oldObj[k]\n",[129,88026,88027],{"class":131,"line":7992},[129,88028,2543],{"class":139},[129,88030,88031],{"class":131,"line":7998},[129,88032,52399],{"class":139},[129,88034,88035],{"class":131,"line":8025},[129,88036,2201],{"class":139},[129,88038,88039,88042,88045],{"class":131,"line":8030},[129,88040,88041],{"class":1977},"    deepCopy",[129,88043,88044],{"class":139},"(o, obj) ",[129,88046,88047],{"class":198},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[129,88049,88050,88052,88054],{"class":131,"line":8036},[129,88051,73754],{"class":139},[129,88053,58248],{"class":1977},[129,88055,88056],{"class":139},"(o)\n",[129,88058,88059,88062,88064],{"class":131,"line":8048},[129,88060,88061],{"class":139},"    o.age ",[129,88063,185],{"class":135},[129,88065,88066],{"class":188}," 20\n",[129,88068,88069,88072,88074,88076,88078],{"class":131,"line":8060},[129,88070,88071],{"class":139},"    o.hobby[",[129,88073,331],{"class":188},[129,88075,4457],{"class":139},[129,88077,185],{"class":135},[129,88079,88080],{"class":244}," '篮球'\n",[129,88082,88083,88086,88088],{"class":131,"line":8072},[129,88084,88085],{"class":139},"    o.family ",[129,88087,185],{"class":135},[129,88089,88090],{"class":244}," '老pink'\n",[129,88092,88093,88095,88097],{"class":131,"line":9731},[129,88094,73754],{"class":139},[129,88096,58248],{"class":1977},[129,88098,70037],{"class":139},[129,88100,88101,88103,88105],{"class":131,"line":9756},[129,88102,52418],{"class":139},[129,88104,51814],{"class":51301},[129,88106,51308],{"class":139},[129,88108,88109,88111,88113],{"class":131,"line":9779},[129,88110,51786],{"class":139},[129,88112,51801],{"class":51301},[129,88114,51308],{"class":139},[129,88116,88117],{"class":131,"line":9803},[129,88118,2414],{"emptyLinePlaceholder":56},[129,88120,88121,88123,88125],{"class":131,"line":9808},[129,88122,51786],{"class":139},[129,88124,50636],{"class":51301},[129,88126,51308],{"class":139},[14,88128,88129],{},[40,88130],{"alt":42,"src":88131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22013,88133,88135,88136],{"id":88134},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[289,88137,88138],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88140,88141],{},[20,88142,88143],{"href":88143,"rel":88144},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24],[14,88146,88147],{},"lodash里边的方法都要加上一个下划线_",[14,88149,88150],{},"_.cloneDeep()",[120,88152,88154],{"className":50634,"code":88153,"language":50636,"meta":42,"style":42},"\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",[126,88155,88156,88166,88180,88184,88192,88206,88226,88238,88246,88250,88258,88263,88282,88290,88300,88308,88316,88328,88332,88338,88342,88346,88362,88370,88379,88387,88395,88403,88407],{"__ignoreMap":42},[129,88157,88158,88160,88162,88164],{"class":131,"line":132},[129,88159,51298],{"class":139},[129,88161,51302],{"class":51301},[129,88163,51305],{"class":1977},[129,88165,51308],{"class":139},[129,88167,88168,88170,88172,88174,88176,88178],{"class":131,"line":51},[129,88169,1049],{"class":139},[129,88171,50636],{"class":51301},[129,88173,51317],{"class":1977},[129,88175,185],{"class":139},[129,88177,51322],{"class":244},[129,88179,51308],{"class":139},[129,88181,88182],{"class":131,"line":1194},[129,88183,2414],{"emptyLinePlaceholder":56},[129,88185,88186,88188,88190],{"class":131,"line":1209},[129,88187,1049],{"class":139},[129,88189,51335],{"class":51301},[129,88191,51308],{"class":139},[129,88193,88194,88196,88198,88200,88202,88204],{"class":131,"line":1215},[129,88195,52145],{"class":139},[129,88197,51345],{"class":51301},[129,88199,51348],{"class":1977},[129,88201,185],{"class":139},[129,88203,51353],{"class":244},[129,88205,51308],{"class":139},[129,88207,88208,88210,88212,88214,88216,88218,88220,88222,88224],{"class":131,"line":1229},[129,88209,52145],{"class":139},[129,88211,51345],{"class":51301},[129,88213,14935],{"class":1977},[129,88215,185],{"class":139},[129,88217,51392],{"class":244},[129,88219,51372],{"class":1977},[129,88221,185],{"class":139},[129,88223,51399],{"class":244},[129,88225,51308],{"class":139},[129,88227,88228,88230,88232,88234,88236],{"class":131,"line":1235},[129,88229,52145],{"class":139},[129,88231,51408],{"class":51301},[129,88233,51411],{"class":139},[129,88235,51408],{"class":51301},[129,88237,51308],{"class":139},[129,88239,88240,88242,88244],{"class":131,"line":1326},[129,88241,51786],{"class":139},[129,88243,51335],{"class":51301},[129,88245,51308],{"class":139},[129,88247,88248],{"class":131,"line":1332},[129,88249,2414],{"emptyLinePlaceholder":56},[129,88251,88252,88254,88256],{"class":131,"line":1344},[129,88253,1049],{"class":139},[129,88255,51801],{"class":51301},[129,88257,51308],{"class":139},[129,88259,88260],{"class":131,"line":1626},[129,88261,88262],{"class":198},"  \u003C!-- 先引用这个库 -->\n",[129,88264,88265,88267,88269,88271,88273,88276,88278,88280],{"class":131,"line":1631},[129,88266,52145],{"class":139},[129,88268,51814],{"class":51301},[129,88270,55240],{"class":1977},[129,88272,185],{"class":139},[129,88274,88275],{"class":244},"\"lodash.min.js\"",[129,88277,55315],{"class":139},[129,88279,51814],{"class":51301},[129,88281,51308],{"class":139},[129,88283,88284,88286,88288],{"class":131,"line":1637},[129,88285,52145],{"class":139},[129,88287,51814],{"class":51301},[129,88289,51308],{"class":139},[129,88291,88292,88294,88296,88298],{"class":131,"line":1642},[129,88293,11236],{"class":135},[129,88295,69972],{"class":188},[129,88297,13579],{"class":135},[129,88299,15587],{"class":139},[129,88301,88302,88304,88306],{"class":131,"line":1656},[129,88303,71617],{"class":139},[129,88305,87811],{"class":244},[129,88307,31467],{"class":139},[129,88309,88310,88312,88314],{"class":131,"line":1661},[129,88311,71627],{"class":139},[129,88313,789],{"class":188},[129,88315,31467],{"class":139},[129,88317,88318,88320,88322,88324,88326],{"class":131,"line":1667},[129,88319,87826],{"class":139},[129,88321,87829],{"class":244},[129,88323,12450],{"class":139},[129,88325,87834],{"class":244},[129,88327,87837],{"class":139},[129,88329,88330],{"class":131,"line":1688},[129,88331,77873],{"class":139},[129,88333,88334,88336],{"class":131,"line":1693},[129,88335,87846],{"class":139},[129,88337,87849],{"class":244},[129,88339,88340],{"class":131,"line":1707},[129,88341,52399],{"class":139},[129,88343,88344],{"class":131,"line":1712},[129,88345,2201],{"class":139},[129,88347,88348,88350,88352,88354,88357,88360],{"class":131,"line":1741},[129,88349,11236],{"class":135},[129,88351,87864],{"class":188},[129,88353,13579],{"class":135},[129,88355,88356],{"class":139}," _.",[129,88358,88359],{"class":1977},"cloneDeep",[129,88361,70037],{"class":139},[129,88363,88364,88366,88368],{"class":131,"line":1746},[129,88365,73754],{"class":139},[129,88367,58248],{"class":1977},[129,88369,88056],{"class":139},[129,88371,88372,88375,88377],{"class":131,"line":1763},[129,88373,88374],{"class":139},"    o.family.baby ",[129,88376,185],{"class":135},[129,88378,88090],{"class":244},[129,88380,88381,88383,88385],{"class":131,"line":1768},[129,88382,73754],{"class":139},[129,88384,58248],{"class":1977},[129,88386,70037],{"class":139},[129,88388,88389,88391,88393],{"class":131,"line":1773},[129,88390,52418],{"class":139},[129,88392,51814],{"class":51301},[129,88394,51308],{"class":139},[129,88396,88397,88399,88401],{"class":131,"line":1778},[129,88398,51786],{"class":139},[129,88400,51801],{"class":51301},[129,88402,51308],{"class":139},[129,88404,88405],{"class":131,"line":1792},[129,88406,2414],{"emptyLinePlaceholder":56},[129,88408,88409,88411,88413],{"class":131,"line":1797},[129,88410,51786],{"class":139},[129,88412,50636],{"class":51301},[129,88414,51308],{"class":139},[14,88416,88417],{},[40,88418],{"alt":42,"src":88419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22013,88421,88423],{"id":88422},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[120,88425,88427],{"className":50634,"code":88426,"language":50636,"meta":42,"style":42},"\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",[126,88428,88429,88439,88453,88457,88465,88479,88499,88511,88519,88523,88531,88539,88549,88557,88565,88577,88581,88587,88591,88595,88600,88605,88610,88636,88644,88653,88661,88669,88677,88681],{"__ignoreMap":42},[129,88430,88431,88433,88435,88437],{"class":131,"line":132},[129,88432,51298],{"class":139},[129,88434,51302],{"class":51301},[129,88436,51305],{"class":1977},[129,88438,51308],{"class":139},[129,88440,88441,88443,88445,88447,88449,88451],{"class":131,"line":51},[129,88442,1049],{"class":139},[129,88444,50636],{"class":51301},[129,88446,51317],{"class":1977},[129,88448,185],{"class":139},[129,88450,51322],{"class":244},[129,88452,51308],{"class":139},[129,88454,88455],{"class":131,"line":1194},[129,88456,2414],{"emptyLinePlaceholder":56},[129,88458,88459,88461,88463],{"class":131,"line":1209},[129,88460,1049],{"class":139},[129,88462,51335],{"class":51301},[129,88464,51308],{"class":139},[129,88466,88467,88469,88471,88473,88475,88477],{"class":131,"line":1215},[129,88468,52145],{"class":139},[129,88470,51345],{"class":51301},[129,88472,51348],{"class":1977},[129,88474,185],{"class":139},[129,88476,51353],{"class":244},[129,88478,51308],{"class":139},[129,88480,88481,88483,88485,88487,88489,88491,88493,88495,88497],{"class":131,"line":1229},[129,88482,52145],{"class":139},[129,88484,51345],{"class":51301},[129,88486,14935],{"class":1977},[129,88488,185],{"class":139},[129,88490,51392],{"class":244},[129,88492,51372],{"class":1977},[129,88494,185],{"class":139},[129,88496,51399],{"class":244},[129,88498,51308],{"class":139},[129,88500,88501,88503,88505,88507,88509],{"class":131,"line":1235},[129,88502,52145],{"class":139},[129,88504,51408],{"class":51301},[129,88506,51411],{"class":139},[129,88508,51408],{"class":51301},[129,88510,51308],{"class":139},[129,88512,88513,88515,88517],{"class":131,"line":1326},[129,88514,51786],{"class":139},[129,88516,51335],{"class":51301},[129,88518,51308],{"class":139},[129,88520,88521],{"class":131,"line":1332},[129,88522,2414],{"emptyLinePlaceholder":56},[129,88524,88525,88527,88529],{"class":131,"line":1344},[129,88526,1049],{"class":139},[129,88528,51801],{"class":51301},[129,88530,51308],{"class":139},[129,88532,88533,88535,88537],{"class":131,"line":1626},[129,88534,52145],{"class":139},[129,88536,51814],{"class":51301},[129,88538,51308],{"class":139},[129,88540,88541,88543,88545,88547],{"class":131,"line":1631},[129,88542,11236],{"class":135},[129,88544,69972],{"class":188},[129,88546,13579],{"class":135},[129,88548,15587],{"class":139},[129,88550,88551,88553,88555],{"class":131,"line":1637},[129,88552,71617],{"class":139},[129,88554,87811],{"class":244},[129,88556,31467],{"class":139},[129,88558,88559,88561,88563],{"class":131,"line":1642},[129,88560,71627],{"class":139},[129,88562,789],{"class":188},[129,88564,31467],{"class":139},[129,88566,88567,88569,88571,88573,88575],{"class":131,"line":1656},[129,88568,87826],{"class":139},[129,88570,87829],{"class":244},[129,88572,12450],{"class":139},[129,88574,87834],{"class":244},[129,88576,87837],{"class":139},[129,88578,88579],{"class":131,"line":1661},[129,88580,77873],{"class":139},[129,88582,88583,88585],{"class":131,"line":1667},[129,88584,87846],{"class":139},[129,88586,87849],{"class":244},[129,88588,88589],{"class":131,"line":1688},[129,88590,52399],{"class":139},[129,88592,88593],{"class":131,"line":1693},[129,88594,2201],{"class":139},[129,88596,88597],{"class":131,"line":1707},[129,88598,88599],{"class":198},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[129,88601,88602],{"class":131,"line":1712},[129,88603,88604],{"class":198},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[129,88606,88607],{"class":131,"line":1741},[129,88608,88609],{"class":198},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[129,88611,88612,88614,88616,88618,88621,88623,88626,88628,88630,88632,88634],{"class":131,"line":1746},[129,88613,11236],{"class":135},[129,88615,87864],{"class":188},[129,88617,13579],{"class":135},[129,88619,88620],{"class":188}," JSON",[129,88622,697],{"class":139},[129,88624,88625],{"class":1977},"parse",[129,88627,140],{"class":139},[129,88629,71665],{"class":188},[129,88631,697],{"class":139},[129,88633,71670],{"class":1977},[129,88635,71673],{"class":139},[129,88637,88638,88640,88642],{"class":131,"line":1763},[129,88639,73754],{"class":139},[129,88641,58248],{"class":1977},[129,88643,88056],{"class":139},[129,88645,88646,88648,88650],{"class":131,"line":1768},[129,88647,88374],{"class":139},[129,88649,185],{"class":135},[129,88651,88652],{"class":244}," '123'\n",[129,88654,88655,88657,88659],{"class":131,"line":1773},[129,88656,73754],{"class":139},[129,88658,58248],{"class":1977},[129,88660,70037],{"class":139},[129,88662,88663,88665,88667],{"class":131,"line":1778},[129,88664,52418],{"class":139},[129,88666,51814],{"class":51301},[129,88668,51308],{"class":139},[129,88670,88671,88673,88675],{"class":131,"line":1792},[129,88672,51786],{"class":139},[129,88674,51801],{"class":51301},[129,88676,51308],{"class":139},[129,88678,88679],{"class":131,"line":1797},[129,88680,2414],{"emptyLinePlaceholder":56},[129,88682,88683,88685,88687],{"class":131,"line":2591},[129,88684,51786],{"class":139},[129,88686,50636],{"class":51301},[129,88688,51308],{"class":139},[14,88690,88691],{},[40,88692],{"alt":42,"src":88693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[71,88695,88697],{"id":88696},"_415-异常处理","4.15 异常处理",[83,88699,88700],{},[86,88701,88702],{},"throw抛异常",[14,88704,88705],{},[40,88706],{"alt":42,"src":88707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[83,88709,88710],{"start":51},[86,88711,88712],{},"try\u002Fcatch 捕获错误信息",[14,88714,88715],{},[40,88716],{"alt":42,"src":88717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[120,88719,88721],{"className":50634,"code":88720,"language":50636,"meta":42,"style":42},"\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",[126,88722,88723,88733,88747,88751,88759,88773,88793,88805,88813,88817,88825,88837,88845,88854,88861,88866,88885,88894,88905,88910,88920,88925,88930,88935,88952,88956,88961,88968,88980,88984,88996,89000,89004,89009,89014,89021,89029,89037,89041],{"__ignoreMap":42},[129,88724,88725,88727,88729,88731],{"class":131,"line":132},[129,88726,51298],{"class":139},[129,88728,51302],{"class":51301},[129,88730,51305],{"class":1977},[129,88732,51308],{"class":139},[129,88734,88735,88737,88739,88741,88743,88745],{"class":131,"line":51},[129,88736,1049],{"class":139},[129,88738,50636],{"class":51301},[129,88740,51317],{"class":1977},[129,88742,185],{"class":139},[129,88744,51322],{"class":244},[129,88746,51308],{"class":139},[129,88748,88749],{"class":131,"line":1194},[129,88750,2414],{"emptyLinePlaceholder":56},[129,88752,88753,88755,88757],{"class":131,"line":1209},[129,88754,1049],{"class":139},[129,88756,51335],{"class":51301},[129,88758,51308],{"class":139},[129,88760,88761,88763,88765,88767,88769,88771],{"class":131,"line":1215},[129,88762,52145],{"class":139},[129,88764,51345],{"class":51301},[129,88766,51348],{"class":1977},[129,88768,185],{"class":139},[129,88770,51353],{"class":244},[129,88772,51308],{"class":139},[129,88774,88775,88777,88779,88781,88783,88785,88787,88789,88791],{"class":131,"line":1229},[129,88776,52145],{"class":139},[129,88778,51345],{"class":51301},[129,88780,14935],{"class":1977},[129,88782,185],{"class":139},[129,88784,51392],{"class":244},[129,88786,51372],{"class":1977},[129,88788,185],{"class":139},[129,88790,51399],{"class":244},[129,88792,51308],{"class":139},[129,88794,88795,88797,88799,88801,88803],{"class":131,"line":1235},[129,88796,52145],{"class":139},[129,88798,51408],{"class":51301},[129,88800,51411],{"class":139},[129,88802,51408],{"class":51301},[129,88804,51308],{"class":139},[129,88806,88807,88809,88811],{"class":131,"line":1326},[129,88808,51786],{"class":139},[129,88810,51335],{"class":51301},[129,88812,51308],{"class":139},[129,88814,88815],{"class":131,"line":1332},[129,88816,2414],{"emptyLinePlaceholder":56},[129,88818,88819,88821,88823],{"class":131,"line":1344},[129,88820,1049],{"class":139},[129,88822,51801],{"class":51301},[129,88824,51308],{"class":139},[129,88826,88827,88829,88831,88833,88835],{"class":131,"line":1626},[129,88828,52145],{"class":139},[129,88830,14],{"class":51301},[129,88832,53495],{"class":139},[129,88834,14],{"class":51301},[129,88836,51308],{"class":139},[129,88838,88839,88841,88843],{"class":131,"line":1631},[129,88840,52145],{"class":139},[129,88842,51814],{"class":51301},[129,88844,51308],{"class":139},[129,88846,88847,88849,88852],{"class":131,"line":1637},[129,88848,70085],{"class":135},[129,88850,88851],{"class":1977}," fn",[129,88853,10868],{"class":139},[129,88855,88856,88859],{"class":131,"line":1642},[129,88857,88858],{"class":135},"      try",[129,88860,15587],{"class":139},[129,88862,88863],{"class":131,"line":1656},[129,88864,88865],{"class":198},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[129,88867,88868,88870,88872,88874,88876,88878,88880,88883],{"class":131,"line":1661},[129,88869,61271],{"class":135},[129,88871,6840],{"class":188},[129,88873,13579],{"class":135},[129,88875,54397],{"class":139},[129,88877,54400],{"class":1977},[129,88879,140],{"class":139},[129,88881,88882],{"class":244},"'.p'",[129,88884,146],{"class":139},[129,88886,88887,88890,88892],{"class":131,"line":1667},[129,88888,88889],{"class":139},"        p.style.color ",[129,88891,185],{"class":135},[129,88893,67052],{"class":244},[129,88895,88896,88899,88902],{"class":131,"line":1688},[129,88897,88898],{"class":139},"      } ",[129,88900,88901],{"class":135},"catch",[129,88903,88904],{"class":139}," (err) {\n",[129,88906,88907],{"class":131,"line":1693},[129,88908,88909],{"class":198},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[129,88911,88912,88915,88917],{"class":131,"line":1707},[129,88913,88914],{"class":139},"        console.",[129,88916,58248],{"class":1977},[129,88918,88919],{"class":139},"(err.message)\n",[129,88921,88922],{"class":131,"line":1712},[129,88923,88924],{"class":198},"        \u002F\u002F 想要中断程序，需要加return\n",[129,88926,88927],{"class":131,"line":1741},[129,88928,88929],{"class":198},"        \u002F\u002F return\n",[129,88931,88932],{"class":131,"line":1746},[129,88933,88934],{"class":198},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[129,88936,88937,88940,88942,88945,88947,88950],{"class":131,"line":1763},[129,88938,88939],{"class":135},"        throw",[129,88941,11593],{"class":135},[129,88943,88944],{"class":1977}," Error",[129,88946,140],{"class":139},[129,88948,88949],{"class":244},"'你看看，选择器错误了吧'",[129,88951,146],{"class":139},[129,88953,88954],{"class":131,"line":1768},[129,88955,52399],{"class":139},[129,88957,88958],{"class":131,"line":1773},[129,88959,88960],{"class":198},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[129,88962,88963,88966],{"class":131,"line":1778},[129,88964,88965],{"class":135},"      finally",[129,88967,15587],{"class":139},[129,88969,88970,88973,88975,88978],{"class":131,"line":1792},[129,88971,88972],{"class":1977},"        alert",[129,88974,140],{"class":139},[129,88976,88977],{"class":244},"'弹出对话框'",[129,88979,146],{"class":139},[129,88981,88982],{"class":131,"line":1797},[129,88983,52399],{"class":139},[129,88985,88986,88988,88990,88992,88994],{"class":131,"line":2591},[129,88987,58245],{"class":139},[129,88989,58248],{"class":1977},[129,88991,140],{"class":139},[129,88993,611],{"class":188},[129,88995,146],{"class":139},[129,88997,88998],{"class":131,"line":2605},[129,88999,2414],{"emptyLinePlaceholder":56},[129,89001,89002],{"class":131,"line":2613},[129,89003,2201],{"class":139},[129,89005,89006],{"class":131,"line":2618},[129,89007,89008],{"class":198},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[129,89010,89011],{"class":131,"line":2624},[129,89012,89013],{"class":198},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[129,89015,89016,89019],{"class":131,"line":2630},[129,89017,89018],{"class":1977},"    fn",[129,89020,1990],{"class":139},[129,89022,89023,89025,89027],{"class":131,"line":2635},[129,89024,52418],{"class":139},[129,89026,51814],{"class":51301},[129,89028,51308],{"class":139},[129,89030,89031,89033,89035],{"class":131,"line":7963},[129,89032,51786],{"class":139},[129,89034,51801],{"class":51301},[129,89036,51308],{"class":139},[129,89038,89039],{"class":131,"line":7987},[129,89040,2414],{"emptyLinePlaceholder":56},[129,89042,89043,89045,89047],{"class":131,"line":7992},[129,89044,51786],{"class":139},[129,89046,50636],{"class":51301},[129,89048,51308],{"class":139},[14,89050,89051],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[83,89053,89054],{"start":1194},[86,89055,89056],{},"debugger",[14,89058,89059],{},[40,89060],{"alt":42,"src":89061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89063,89064],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[71,89066,89068],{"id":89067},"_416-处理this","4.16 处理this",[100,89070,89072],{"id":89071},"_4161-this的指向","4.16.1 this的指向",[83,89074,89075],{},[86,89076,89077],{},"普通函数的this",[14,89079,89080],{},[40,89081],{"alt":42,"src":89082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[83,89084,89085],{"start":51},[86,89086,89087],{},"箭头函数的this",[14,89089,89090],{},[40,89091],{"alt":42,"src":89092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89094,89095],{},[40,89096],{"alt":42,"src":89097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89099,89100],{},[40,89101],{"alt":42,"src":89102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[100,89104,89106],{"id":89105},"_4162-this的改变","4.16.2 this的改变",[14,89108,89109],{},"call() apply() bind()",[83,89111,89112],{},[86,89113,89114],{},"call()",[14,89116,89117],{},[40,89118],{"alt":42,"src":89119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89121,89122],{},"两个作用：①调用函数；②改变this指向",[120,89124,89126],{"className":53068,"code":89125,"language":53070,"meta":42,"style":42},"\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",[126,89127,89128,89136,89144,89148,89153,89157,89162,89167,89172,89176,89181,89189],{"__ignoreMap":42},[129,89129,89130,89132,89134],{"class":131,"line":132},[129,89131,1049],{"class":139},[129,89133,51801],{"class":51301},[129,89135,51308],{"class":139},[129,89137,89138,89140,89142],{"class":131,"line":51},[129,89139,52145],{"class":139},[129,89141,51814],{"class":51301},[129,89143,51308],{"class":139},[129,89145,89146],{"class":131,"line":1194},[129,89147,71524],{"class":139},[129,89149,89150],{"class":131,"line":1209},[129,89151,89152],{"class":139},"      uname: 'pink'\n",[129,89154,89155],{"class":131,"line":1215},[129,89156,2201],{"class":139},[129,89158,89159],{"class":131,"line":1229},[129,89160,89161],{"class":139},"    function fn(x, y) {\n",[129,89163,89164],{"class":131,"line":1235},[129,89165,89166],{"class":139},"      console.log(this)  \u002F\u002Fwindow\n",[129,89168,89169],{"class":131,"line":1326},[129,89170,89171],{"class":139},"      console.log(x + y)\n",[129,89173,89174],{"class":131,"line":1332},[129,89175,2201],{"class":139},[129,89177,89178],{"class":131,"line":1344},[129,89179,89180],{"class":139},"    fn.call(obj, 1, 2)\n",[129,89182,89183,89185,89187],{"class":131,"line":1626},[129,89184,52418],{"class":139},[129,89186,51814],{"class":51301},[129,89188,51308],{"class":139},[129,89190,89191,89193,89195],{"class":131,"line":1631},[129,89192,51786],{"class":139},[129,89194,51801],{"class":51301},[129,89196,51308],{"class":139},[14,89198,89199],{},[40,89200],{"alt":42,"src":89201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[83,89203,89204],{"start":51},[86,89205,89206],{},"apply()",[14,89208,89209],{},[40,89210],{"alt":42,"src":89211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89213,89122],{},[14,89215,89216],{},"call传递的是普通参数，而apply必须传递的是数组",[120,89218,89220],{"className":50634,"code":89219,"language":50636,"meta":42,"style":42},"\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",[126,89221,89222,89232,89246,89250,89258,89272,89292,89304,89312,89316,89324,89332,89342,89349,89353,89358,89374,89386,89400,89404,89409,89428,89433,89437,89442,89447,89455,89460,89482,89487,89503,89519,89531,89535,89540,89559,89567,89575,89579],{"__ignoreMap":42},[129,89223,89224,89226,89228,89230],{"class":131,"line":132},[129,89225,51298],{"class":139},[129,89227,51302],{"class":51301},[129,89229,51305],{"class":1977},[129,89231,51308],{"class":139},[129,89233,89234,89236,89238,89240,89242,89244],{"class":131,"line":51},[129,89235,1049],{"class":139},[129,89237,50636],{"class":51301},[129,89239,51317],{"class":1977},[129,89241,185],{"class":139},[129,89243,51322],{"class":244},[129,89245,51308],{"class":139},[129,89247,89248],{"class":131,"line":1194},[129,89249,2414],{"emptyLinePlaceholder":56},[129,89251,89252,89254,89256],{"class":131,"line":1209},[129,89253,1049],{"class":139},[129,89255,51335],{"class":51301},[129,89257,51308],{"class":139},[129,89259,89260,89262,89264,89266,89268,89270],{"class":131,"line":1215},[129,89261,52145],{"class":139},[129,89263,51345],{"class":51301},[129,89265,51348],{"class":1977},[129,89267,185],{"class":139},[129,89269,51353],{"class":244},[129,89271,51308],{"class":139},[129,89273,89274,89276,89278,89280,89282,89284,89286,89288,89290],{"class":131,"line":1229},[129,89275,52145],{"class":139},[129,89277,51345],{"class":51301},[129,89279,14935],{"class":1977},[129,89281,185],{"class":139},[129,89283,51392],{"class":244},[129,89285,51372],{"class":1977},[129,89287,185],{"class":139},[129,89289,51399],{"class":244},[129,89291,51308],{"class":139},[129,89293,89294,89296,89298,89300,89302],{"class":131,"line":1235},[129,89295,52145],{"class":139},[129,89297,51408],{"class":51301},[129,89299,51411],{"class":139},[129,89301,51408],{"class":51301},[129,89303,51308],{"class":139},[129,89305,89306,89308,89310],{"class":131,"line":1326},[129,89307,51786],{"class":139},[129,89309,51335],{"class":51301},[129,89311,51308],{"class":139},[129,89313,89314],{"class":131,"line":1332},[129,89315,2414],{"emptyLinePlaceholder":56},[129,89317,89318,89320,89322],{"class":131,"line":1344},[129,89319,1049],{"class":139},[129,89321,51801],{"class":51301},[129,89323,51308],{"class":139},[129,89325,89326,89328,89330],{"class":131,"line":1626},[129,89327,52145],{"class":139},[129,89329,51814],{"class":51301},[129,89331,51308],{"class":139},[129,89333,89334,89336,89338,89340],{"class":131,"line":1631},[129,89335,11236],{"class":135},[129,89337,69972],{"class":188},[129,89339,13579],{"class":135},[129,89341,15587],{"class":139},[129,89343,89344,89346],{"class":131,"line":1637},[129,89345,71627],{"class":139},[129,89347,89348],{"class":188},"18\n",[129,89350,89351],{"class":131,"line":1642},[129,89352,2201],{"class":139},[129,89354,89355],{"class":131,"line":1656},[129,89356,89357],{"class":198},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[129,89359,89360,89362,89364,89366,89368,89370,89372],{"class":131,"line":1661},[129,89361,70085],{"class":135},[129,89363,88851],{"class":1977},[129,89365,140],{"class":139},[129,89367,959],{"class":5231},[129,89369,12450],{"class":139},[129,89371,984],{"class":5231},[129,89373,12457],{"class":139},[129,89375,89376,89378,89380,89382,89384],{"class":131,"line":1667},[129,89377,58245],{"class":139},[129,89379,58248],{"class":1977},[129,89381,140],{"class":139},[129,89383,86994],{"class":188},[129,89385,146],{"class":139},[129,89387,89388,89390,89392,89395,89397],{"class":131,"line":1688},[129,89389,58245],{"class":139},[129,89391,58248],{"class":1977},[129,89393,89394],{"class":139},"(x ",[129,89396,620],{"class":135},[129,89398,89399],{"class":139}," y)\n",[129,89401,89402],{"class":131,"line":1693},[129,89403,2201],{"class":139},[129,89405,89406],{"class":131,"line":1707},[129,89407,89408],{"class":198},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[129,89410,89411,89414,89417,89420,89422,89424,89426],{"class":131,"line":1712},[129,89412,89413],{"class":139},"    fn.",[129,89415,89416],{"class":1977},"apply",[129,89418,89419],{"class":139},"(obj, [",[129,89421,357],{"class":188},[129,89423,12450],{"class":139},[129,89425,217],{"class":188},[129,89427,4671],{"class":139},[129,89429,89430],{"class":131,"line":1741},[129,89431,89432],{"class":198},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[129,89434,89435],{"class":131,"line":1746},[129,89436,2414],{"emptyLinePlaceholder":56},[129,89438,89439],{"class":131,"line":1763},[129,89440,89441],{"class":198},"    \u002F\u002F 使用场景：求数组最大值\n",[129,89443,89444],{"class":131,"line":1768},[129,89445,89446],{"class":198},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[129,89448,89449,89452],{"class":131,"line":1773},[129,89450,89451],{"class":198},"    \u002F\u002F console.log(max)",[129,89453,89454],{"class":198},"   \u002F\u002F3\n",[129,89456,89457],{"class":131,"line":1778},[129,89458,89459],{"class":198},"    \u002F\u002F 指向空或者Math都是可以的\n",[129,89461,89462,89464,89466,89468,89470,89472,89474,89476,89478,89480],{"class":131,"line":1792},[129,89463,11236],{"class":135},[129,89465,57696],{"class":188},[129,89467,13579],{"class":135},[129,89469,52227],{"class":139},[129,89471,450],{"class":188},[129,89473,12450],{"class":139},[129,89475,643],{"class":188},[129,89477,12450],{"class":139},[129,89479,674],{"class":188},[129,89481,33247],{"class":139},[129,89483,89484],{"class":131,"line":1797},[129,89485,89486],{"class":198},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[129,89488,89489,89491,89493,89495,89498,89500],{"class":131,"line":2591},[129,89490,11236],{"class":135},[129,89492,5966],{"class":188},[129,89494,13579],{"class":135},[129,89496,89497],{"class":139}," Math.max.",[129,89499,89416],{"class":1977},[129,89501,89502],{"class":139},"(Math, arr)\n",[129,89504,89505,89507,89510,89512,89515,89517],{"class":131,"line":2605},[129,89506,11236],{"class":135},[129,89508,89509],{"class":188}," min",[129,89511,13579],{"class":135},[129,89513,89514],{"class":139}," Math.min.",[129,89516,89416],{"class":1977},[129,89518,89502],{"class":139},[129,89520,89521,89523,89525,89528],{"class":131,"line":2613},[129,89522,73754],{"class":139},[129,89524,58248],{"class":1977},[129,89526,89527],{"class":139},"(max, min)     ",[129,89529,89530],{"class":198},"\u002F\u002F100,4\n",[129,89532,89533],{"class":131,"line":2618},[129,89534,2414],{"emptyLinePlaceholder":56},[129,89536,89537],{"class":131,"line":2624},[129,89538,89539],{"class":198},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[129,89541,89542,89544,89546,89549,89551,89553,89556],{"class":131,"line":2630},[129,89543,73754],{"class":139},[129,89545,58248],{"class":1977},[129,89547,89548],{"class":139},"(Max.",[129,89550,6030],{"class":1977},[129,89552,140],{"class":139},[129,89554,89555],{"class":135},"...",[129,89557,89558],{"class":139},"arr))\n",[129,89560,89561,89563,89565],{"class":131,"line":2635},[129,89562,52418],{"class":139},[129,89564,51814],{"class":51301},[129,89566,51308],{"class":139},[129,89568,89569,89571,89573],{"class":131,"line":7963},[129,89570,51786],{"class":139},[129,89572,51801],{"class":51301},[129,89574,51308],{"class":139},[129,89576,89577],{"class":131,"line":7987},[129,89578,2414],{"emptyLinePlaceholder":56},[129,89580,89581,89583,89585],{"class":131,"line":7992},[129,89582,51786],{"class":139},[129,89584,50636],{"class":51301},[129,89586,51308],{"class":139},[14,89588,89589],{},[40,89590],{"alt":42,"src":89591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[83,89593,89594],{"start":1194},[86,89595,89596],{},"bind()",[14,89598,89599],{},[40,89600],{"alt":42,"src":89601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89603,89604],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89606,89607],{},"bind的语法跟call很相似",[120,89609,89611],{"className":53068,"code":89610,"language":53070,"meta":42,"style":42},"\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",[126,89612,89613,89621,89629,89633,89638,89642,89646,89651,89655,89660,89665,89670,89675,89680,89685,89690,89694,89702],{"__ignoreMap":42},[129,89614,89615,89617,89619],{"class":131,"line":132},[129,89616,1049],{"class":139},[129,89618,51801],{"class":51301},[129,89620,51308],{"class":139},[129,89622,89623,89625,89627],{"class":131,"line":51},[129,89624,52145],{"class":139},[129,89626,51814],{"class":51301},[129,89628,51308],{"class":139},[129,89630,89631],{"class":131,"line":1194},[129,89632,71524],{"class":139},[129,89634,89635],{"class":131,"line":1209},[129,89636,89637],{"class":139},"      age: 18\n",[129,89639,89640],{"class":131,"line":1215},[129,89641,2201],{"class":139},[129,89643,89644],{"class":131,"line":1229},[129,89645,77144],{"class":139},[129,89647,89648],{"class":131,"line":1235},[129,89649,89650],{"class":139},"      console.log(this)\n",[129,89652,89653],{"class":131,"line":1326},[129,89654,2201],{"class":139},[129,89656,89657],{"class":131,"line":1332},[129,89658,89659],{"class":139},"    \u002F\u002F 1.bind 不会调用函数\n",[129,89661,89662],{"class":131,"line":1344},[129,89663,89664],{"class":139},"    \u002F\u002F 2.bind能改变this的指向\n",[129,89666,89667],{"class":131,"line":1626},[129,89668,89669],{"class":139},"    fn.bind()\n",[129,89671,89672],{"class":131,"line":1631},[129,89673,89674],{"class":139},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[129,89676,89677],{"class":131,"line":1637},[129,89678,89679],{"class":139},"    const fun = fn.bind(obj)\n",[129,89681,89682],{"class":131,"line":1642},[129,89683,89684],{"class":139},"    \u002F\u002F console.log(fun)\n",[129,89686,89687],{"class":131,"line":1656},[129,89688,89689],{"class":139},"    \u002F\u002F 调用,查看this的指向\n",[129,89691,89692],{"class":131,"line":1661},[129,89693,52652],{"class":139},[129,89695,89696,89698,89700],{"class":131,"line":1667},[129,89697,52418],{"class":139},[129,89699,51814],{"class":51301},[129,89701,51308],{"class":139},[129,89703,89704,89706,89708],{"class":131,"line":1688},[129,89705,51786],{"class":139},[129,89707,51801],{"class":51301},[129,89709,51308],{"class":139},[14,89711,89712],{},[40,89713],{"alt":42,"src":89714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[83,89716,89717],{"start":1209},[86,89718,89719],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[120,89721,89723],{"className":53068,"code":89722,"language":53070,"meta":42,"style":42},"\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",[126,89724,89725,89733,89746,89754,89759,89763,89768,89773,89778,89783,89788,89793,89798,89803,89807,89815],{"__ignoreMap":42},[129,89726,89727,89729,89731],{"class":131,"line":132},[129,89728,1049],{"class":139},[129,89730,51801],{"class":51301},[129,89732,51308],{"class":139},[129,89734,89735,89737,89739,89742,89744],{"class":131,"line":51},[129,89736,52145],{"class":139},[129,89738,53888],{"class":51301},[129,89740,89741],{"class":139},">禁用\u003C\u002F",[129,89743,53888],{"class":51301},[129,89745,51308],{"class":139},[129,89747,89748,89750,89752],{"class":131,"line":1194},[129,89749,52145],{"class":139},[129,89751,51814],{"class":51301},[129,89753,51308],{"class":139},[129,89755,89756],{"class":131,"line":1209},[129,89757,89758],{"class":139},"    const btn = document.querySelector('button')\n",[129,89760,89761],{"class":131,"line":1215},[129,89762,59017],{"class":139},[129,89764,89765],{"class":131,"line":1229},[129,89766,89767],{"class":139},"      this.disabled = true\n",[129,89769,89770],{"class":131,"line":1235},[129,89771,89772],{"class":139},"      \u002F\u002F 定时器是window进行调用的\n",[129,89774,89775],{"class":131,"line":1326},[129,89776,89777],{"class":139},"      setTimeout(function () {\n",[129,89779,89780],{"class":131,"line":1332},[129,89781,89782],{"class":139},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[129,89784,89785],{"class":131,"line":1344},[129,89786,89787],{"class":139},"        this.disabled = false\n",[129,89789,89790],{"class":131,"line":1626},[129,89791,89792],{"class":139},"      }.bind(this), 2000)\n",[129,89794,89795],{"class":131,"line":1631},[129,89796,89797],{"class":139},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[129,89799,89800],{"class":131,"line":1637},[129,89801,89802],{"class":139},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[129,89804,89805],{"class":131,"line":1642},[129,89806,33462],{"class":139},[129,89808,89809,89811,89813],{"class":131,"line":1656},[129,89810,52418],{"class":139},[129,89812,51814],{"class":51301},[129,89814,51308],{"class":139},[129,89816,89817,89819,89821],{"class":131,"line":1661},[129,89818,51786],{"class":139},[129,89820,51801],{"class":51301},[129,89822,51308],{"class":139},[83,89824,89825],{"start":1215},[86,89826,21968],{},[14,89828,89829],{},[40,89830],{"alt":42,"src":89831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[71,89833,89835],{"id":89834},"_417-性能优化","4.17 性能优化",[100,89837,89839],{"id":89838},"_4171-防抖","4.17.1 防抖",[14,89841,89842],{},[40,89843],{"alt":42,"src":89844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89846,89847],{},[289,89848,89849],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89851,89852],{},"防抖实现方式：",[1146,89854,89855],{},[86,89856,89857],{},"lodash 提供了防抖处理",[14,89859,89860],{},"_.debounce(func,[wait=0],[options={}])",[14,89862,89863],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[120,89865,89867],{"className":50634,"code":89866,"language":50636,"meta":42,"style":42},"\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",[126,89868,89869,89879,89893,89897,89905,89919,89939,89951,89959,89965,89975,89987,89999,90010,90022,90032,90042,90055,90059,90067,90075,90079,90087,90105,90123,90131,90150,90160,90169,90180,90185,90189,90194,90199,90204,90229,90237,90245,90249],{"__ignoreMap":42},[129,89870,89871,89873,89875,89877],{"class":131,"line":132},[129,89872,51298],{"class":139},[129,89874,51302],{"class":51301},[129,89876,51305],{"class":1977},[129,89878,51308],{"class":139},[129,89880,89881,89883,89885,89887,89889,89891],{"class":131,"line":51},[129,89882,1049],{"class":139},[129,89884,50636],{"class":51301},[129,89886,51317],{"class":1977},[129,89888,185],{"class":139},[129,89890,51322],{"class":244},[129,89892,51308],{"class":139},[129,89894,89895],{"class":131,"line":1194},[129,89896,2414],{"emptyLinePlaceholder":56},[129,89898,89899,89901,89903],{"class":131,"line":1209},[129,89900,1049],{"class":139},[129,89902,51335],{"class":51301},[129,89904,51308],{"class":139},[129,89906,89907,89909,89911,89913,89915,89917],{"class":131,"line":1215},[129,89908,52145],{"class":139},[129,89910,51345],{"class":51301},[129,89912,51348],{"class":1977},[129,89914,185],{"class":139},[129,89916,51353],{"class":244},[129,89918,51308],{"class":139},[129,89920,89921,89923,89925,89927,89929,89931,89933,89935,89937],{"class":131,"line":1229},[129,89922,52145],{"class":139},[129,89924,51345],{"class":51301},[129,89926,14935],{"class":1977},[129,89928,185],{"class":139},[129,89930,51392],{"class":244},[129,89932,51372],{"class":1977},[129,89934,185],{"class":139},[129,89936,51399],{"class":244},[129,89938,51308],{"class":139},[129,89940,89941,89943,89945,89947,89949],{"class":131,"line":1235},[129,89942,52145],{"class":139},[129,89944,51408],{"class":51301},[129,89946,51411],{"class":139},[129,89948,51408],{"class":51301},[129,89950,51308],{"class":139},[129,89952,89953,89955,89957],{"class":131,"line":1326},[129,89954,52145],{"class":139},[129,89956,5141],{"class":51301},[129,89958,51308],{"class":139},[129,89960,89961,89963],{"class":131,"line":1332},[129,89962,54753],{"class":1977},[129,89964,15587],{"class":139},[129,89966,89967,89969,89971,89973],{"class":131,"line":1344},[129,89968,72597],{"class":188},[129,89970,51438],{"class":139},[129,89972,60506],{"class":188},[129,89974,1305],{"class":139},[129,89976,89977,89979,89981,89983,89985],{"class":131,"line":1626},[129,89978,54772],{"class":188},[129,89980,51438],{"class":139},[129,89982,1736],{"class":188},[129,89984,51493],{"class":135},[129,89986,1305],{"class":139},[129,89988,89989,89991,89993,89995,89997],{"class":131,"line":1631},[129,89990,54786],{"class":188},[129,89992,51438],{"class":139},[129,89994,1736],{"class":188},[129,89996,51493],{"class":135},[129,89998,1305],{"class":139},[129,90000,90001,90003,90005,90008],{"class":131,"line":1637},[129,90002,54885],{"class":188},[129,90004,51438],{"class":139},[129,90006,90007],{"class":188},"gray",[129,90009,1305],{"class":139},[129,90011,90012,90014,90016,90018,90020],{"class":131,"line":1642},[129,90013,54923],{"class":188},[129,90015,51438],{"class":139},[129,90017,964],{"class":188},[129,90019,51493],{"class":135},[129,90021,1305],{"class":139},[129,90023,90024,90026,90028,90030],{"class":131,"line":1656},[129,90025,57417],{"class":188},[129,90027,51438],{"class":139},[129,90029,60843],{"class":188},[129,90031,1305],{"class":139},[129,90033,90034,90036,90038,90040],{"class":131,"line":1661},[129,90035,57287],{"class":188},[129,90037,51438],{"class":139},[129,90039,51593],{"class":188},[129,90041,1305],{"class":139},[129,90043,90044,90047,90049,90051,90053],{"class":131,"line":1667},[129,90045,90046],{"class":188},"      padding-top",[129,90048,51438],{"class":139},[129,90050,458],{"class":188},[129,90052,51493],{"class":135},[129,90054,1305],{"class":139},[129,90056,90057],{"class":131,"line":1688},[129,90058,2201],{"class":139},[129,90060,90061,90063,90065],{"class":131,"line":1693},[129,90062,52418],{"class":139},[129,90064,5141],{"class":51301},[129,90066,51308],{"class":139},[129,90068,90069,90071,90073],{"class":131,"line":1707},[129,90070,51786],{"class":139},[129,90072,51335],{"class":51301},[129,90074,51308],{"class":139},[129,90076,90077],{"class":131,"line":1712},[129,90078,2414],{"emptyLinePlaceholder":56},[129,90080,90081,90083,90085],{"class":131,"line":1741},[129,90082,1049],{"class":139},[129,90084,51801],{"class":51301},[129,90086,51308],{"class":139},[129,90088,90089,90091,90093,90095,90097,90099,90101,90103],{"class":131,"line":1746},[129,90090,52145],{"class":139},[129,90092,51612],{"class":51301},[129,90094,53487],{"class":1977},[129,90096,185],{"class":139},[129,90098,53492],{"class":244},[129,90100,55315],{"class":139},[129,90102,51612],{"class":51301},[129,90104,51308],{"class":139},[129,90106,90107,90109,90111,90113,90115,90117,90119,90121],{"class":131,"line":1763},[129,90108,52145],{"class":139},[129,90110,51814],{"class":51301},[129,90112,55240],{"class":1977},[129,90114,185],{"class":139},[129,90116,88275],{"class":244},[129,90118,55315],{"class":139},[129,90120,51814],{"class":51301},[129,90122,51308],{"class":139},[129,90124,90125,90127,90129],{"class":131,"line":1768},[129,90126,52145],{"class":139},[129,90128,51814],{"class":51301},[129,90130,51308],{"class":139},[129,90132,90133,90135,90137,90139,90141,90143,90145,90148],{"class":131,"line":1773},[129,90134,11236],{"class":135},[129,90136,86934],{"class":188},[129,90138,13579],{"class":135},[129,90140,54397],{"class":139},[129,90142,54400],{"class":1977},[129,90144,140],{"class":139},[129,90146,90147],{"class":244},"'.box'",[129,90149,146],{"class":139},[129,90151,90152,90154,90156,90158],{"class":131,"line":1778},[129,90153,52220],{"class":135},[129,90155,9453],{"class":139},[129,90157,185],{"class":135},[129,90159,47334],{"class":188},[129,90161,90162,90164,90167],{"class":131,"line":1792},[129,90163,70085],{"class":135},[129,90165,90166],{"class":1977}," mouseMove",[129,90168,10868],{"class":139},[129,90170,90171,90174,90176,90178],{"class":131,"line":1797},[129,90172,90173],{"class":139},"      box.innerHTML ",[129,90175,185],{"class":135},[129,90177,3046],{"class":139},[129,90179,2716],{"class":135},[129,90181,90182],{"class":131,"line":2591},[129,90183,90184],{"class":198},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[129,90186,90187],{"class":131,"line":2605},[129,90188,2201],{"class":139},[129,90190,90191],{"class":131,"line":2613},[129,90192,90193],{"class":198},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[129,90195,90196],{"class":131,"line":2618},[129,90197,90198],{"class":198},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[129,90200,90201],{"class":131,"line":2624},[129,90202,90203],{"class":198},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[129,90205,90206,90209,90211,90213,90216,90219,90222,90225,90227],{"class":131,"line":2630},[129,90207,90208],{"class":139},"    box.",[129,90210,57814],{"class":1977},[129,90212,140],{"class":139},[129,90214,90215],{"class":244},"'mousemove'",[129,90217,90218],{"class":139},", _.",[129,90220,90221],{"class":1977},"debounce",[129,90223,90224],{"class":139},"(mouseMove, ",[129,90226,65075],{"class":188},[129,90228,30498],{"class":139},[129,90230,90231,90233,90235],{"class":131,"line":2635},[129,90232,52418],{"class":139},[129,90234,51814],{"class":51301},[129,90236,51308],{"class":139},[129,90238,90239,90241,90243],{"class":131,"line":7963},[129,90240,51786],{"class":139},[129,90242,51801],{"class":51301},[129,90244,51308],{"class":139},[129,90246,90247],{"class":131,"line":7987},[129,90248,2414],{"emptyLinePlaceholder":56},[129,90250,90251,90253,90255],{"class":131,"line":7992},[129,90252,51786],{"class":139},[129,90254,50636],{"class":51301},[129,90256,51308],{"class":139},[1146,90258,90259],{},[86,90260,90261],{},"手写一个防抖函数来处理",[14,90263,90264],{},"防抖的核心就是利用定时器来实现的：",[14,90266,90267],{},"①声明一个定时器变量",[14,90269,90270],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90272,90273],{},"③如果没有定时器则开启定时器，记得存到变量里面",[120,90275,90277],{"className":50634,"code":90276,"language":50636,"meta":42,"style":42},"\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",[126,90278,90279,90289,90303,90307,90315,90329,90349,90361,90369,90375,90385,90397,90409,90419,90431,90441,90451,90463,90467,90475,90483,90487,90495,90513,90531,90539,90557,90567,90575,90585,90589,90593,90597,90602,90607,90612,90617,90622,90627,90645,90652,90657,90665,90670,90683,90699,90709,90714,90718,90722,90742,90746,90751,90756,90761,90766,90774,90782,90786],{"__ignoreMap":42},[129,90280,90281,90283,90285,90287],{"class":131,"line":132},[129,90282,51298],{"class":139},[129,90284,51302],{"class":51301},[129,90286,51305],{"class":1977},[129,90288,51308],{"class":139},[129,90290,90291,90293,90295,90297,90299,90301],{"class":131,"line":51},[129,90292,1049],{"class":139},[129,90294,50636],{"class":51301},[129,90296,51317],{"class":1977},[129,90298,185],{"class":139},[129,90300,51322],{"class":244},[129,90302,51308],{"class":139},[129,90304,90305],{"class":131,"line":1194},[129,90306,2414],{"emptyLinePlaceholder":56},[129,90308,90309,90311,90313],{"class":131,"line":1209},[129,90310,1049],{"class":139},[129,90312,51335],{"class":51301},[129,90314,51308],{"class":139},[129,90316,90317,90319,90321,90323,90325,90327],{"class":131,"line":1215},[129,90318,52145],{"class":139},[129,90320,51345],{"class":51301},[129,90322,51348],{"class":1977},[129,90324,185],{"class":139},[129,90326,51353],{"class":244},[129,90328,51308],{"class":139},[129,90330,90331,90333,90335,90337,90339,90341,90343,90345,90347],{"class":131,"line":1229},[129,90332,52145],{"class":139},[129,90334,51345],{"class":51301},[129,90336,14935],{"class":1977},[129,90338,185],{"class":139},[129,90340,51392],{"class":244},[129,90342,51372],{"class":1977},[129,90344,185],{"class":139},[129,90346,51399],{"class":244},[129,90348,51308],{"class":139},[129,90350,90351,90353,90355,90357,90359],{"class":131,"line":1235},[129,90352,52145],{"class":139},[129,90354,51408],{"class":51301},[129,90356,51411],{"class":139},[129,90358,51408],{"class":51301},[129,90360,51308],{"class":139},[129,90362,90363,90365,90367],{"class":131,"line":1326},[129,90364,52145],{"class":139},[129,90366,5141],{"class":51301},[129,90368,51308],{"class":139},[129,90370,90371,90373],{"class":131,"line":1332},[129,90372,54753],{"class":1977},[129,90374,15587],{"class":139},[129,90376,90377,90379,90381,90383],{"class":131,"line":1344},[129,90378,72597],{"class":188},[129,90380,51438],{"class":139},[129,90382,60506],{"class":188},[129,90384,1305],{"class":139},[129,90386,90387,90389,90391,90393,90395],{"class":131,"line":1626},[129,90388,54772],{"class":188},[129,90390,51438],{"class":139},[129,90392,1736],{"class":188},[129,90394,51493],{"class":135},[129,90396,1305],{"class":139},[129,90398,90399,90401,90403,90405,90407],{"class":131,"line":1631},[129,90400,54786],{"class":188},[129,90402,51438],{"class":139},[129,90404,1736],{"class":188},[129,90406,51493],{"class":135},[129,90408,1305],{"class":139},[129,90410,90411,90413,90415,90417],{"class":131,"line":1637},[129,90412,54885],{"class":188},[129,90414,51438],{"class":139},[129,90416,90007],{"class":188},[129,90418,1305],{"class":139},[129,90420,90421,90423,90425,90427,90429],{"class":131,"line":1642},[129,90422,54923],{"class":188},[129,90424,51438],{"class":139},[129,90426,964],{"class":188},[129,90428,51493],{"class":135},[129,90430,1305],{"class":139},[129,90432,90433,90435,90437,90439],{"class":131,"line":1656},[129,90434,57417],{"class":188},[129,90436,51438],{"class":139},[129,90438,60843],{"class":188},[129,90440,1305],{"class":139},[129,90442,90443,90445,90447,90449],{"class":131,"line":1661},[129,90444,57287],{"class":188},[129,90446,51438],{"class":139},[129,90448,51593],{"class":188},[129,90450,1305],{"class":139},[129,90452,90453,90455,90457,90459,90461],{"class":131,"line":1667},[129,90454,90046],{"class":188},[129,90456,51438],{"class":139},[129,90458,458],{"class":188},[129,90460,51493],{"class":135},[129,90462,1305],{"class":139},[129,90464,90465],{"class":131,"line":1688},[129,90466,2201],{"class":139},[129,90468,90469,90471,90473],{"class":131,"line":1693},[129,90470,52418],{"class":139},[129,90472,5141],{"class":51301},[129,90474,51308],{"class":139},[129,90476,90477,90479,90481],{"class":131,"line":1707},[129,90478,51786],{"class":139},[129,90480,51335],{"class":51301},[129,90482,51308],{"class":139},[129,90484,90485],{"class":131,"line":1712},[129,90486,2414],{"emptyLinePlaceholder":56},[129,90488,90489,90491,90493],{"class":131,"line":1741},[129,90490,1049],{"class":139},[129,90492,51801],{"class":51301},[129,90494,51308],{"class":139},[129,90496,90497,90499,90501,90503,90505,90507,90509,90511],{"class":131,"line":1746},[129,90498,52145],{"class":139},[129,90500,51612],{"class":51301},[129,90502,53487],{"class":1977},[129,90504,185],{"class":139},[129,90506,53492],{"class":244},[129,90508,55315],{"class":139},[129,90510,51612],{"class":51301},[129,90512,51308],{"class":139},[129,90514,90515,90517,90519,90521,90523,90525,90527,90529],{"class":131,"line":1763},[129,90516,52145],{"class":139},[129,90518,51814],{"class":51301},[129,90520,55240],{"class":1977},[129,90522,185],{"class":139},[129,90524,88275],{"class":244},[129,90526,55315],{"class":139},[129,90528,51814],{"class":51301},[129,90530,51308],{"class":139},[129,90532,90533,90535,90537],{"class":131,"line":1768},[129,90534,52145],{"class":139},[129,90536,51814],{"class":51301},[129,90538,51308],{"class":139},[129,90540,90541,90543,90545,90547,90549,90551,90553,90555],{"class":131,"line":1773},[129,90542,11236],{"class":135},[129,90544,86934],{"class":188},[129,90546,13579],{"class":135},[129,90548,54397],{"class":139},[129,90550,54400],{"class":1977},[129,90552,140],{"class":139},[129,90554,90147],{"class":244},[129,90556,146],{"class":139},[129,90558,90559,90561,90563,90565],{"class":131,"line":1778},[129,90560,52220],{"class":135},[129,90562,9453],{"class":139},[129,90564,185],{"class":135},[129,90566,47334],{"class":188},[129,90568,90569,90571,90573],{"class":131,"line":1792},[129,90570,70085],{"class":135},[129,90572,90166],{"class":1977},[129,90574,10868],{"class":139},[129,90576,90577,90579,90581,90583],{"class":131,"line":1797},[129,90578,90173],{"class":139},[129,90580,185],{"class":135},[129,90582,3046],{"class":139},[129,90584,2716],{"class":135},[129,90586,90587],{"class":131,"line":2591},[129,90588,90184],{"class":198},[129,90590,90591],{"class":131,"line":2605},[129,90592,2201],{"class":139},[129,90594,90595],{"class":131,"line":2613},[129,90596,90193],{"class":198},[129,90598,90599],{"class":131,"line":2618},[129,90600,90601],{"class":198},"    \u002F\u002F 手写防抖函数\n",[129,90603,90604],{"class":131,"line":2624},[129,90605,90606],{"class":198},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[129,90608,90609],{"class":131,"line":2630},[129,90610,90611],{"class":198},"    \u002F\u002F 1.声明定时器变量\n",[129,90613,90614],{"class":131,"line":2635},[129,90615,90616],{"class":198},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[129,90618,90619],{"class":131,"line":7963},[129,90620,90621],{"class":198},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[129,90623,90624],{"class":131,"line":7987},[129,90625,90626],{"class":198},"    \u002F\u002F 4.定时器里面写函数调用\n",[129,90628,90629,90631,90634,90636,90639,90641,90643],{"class":131,"line":7992},[129,90630,70085],{"class":135},[129,90632,90633],{"class":1977}," debounce",[129,90635,140],{"class":139},[129,90637,90638],{"class":5231},"fn",[129,90640,12450],{"class":139},[129,90642,859],{"class":5231},[129,90644,12457],{"class":139},[129,90646,90647,90649],{"class":131,"line":7998},[129,90648,79773],{"class":135},[129,90650,90651],{"class":139}," timer\n",[129,90653,90654],{"class":131,"line":8025},[129,90655,90656],{"class":198},"      \u002F\u002F return 返回一个匿名函数\n",[129,90658,90659,90661,90663],{"class":131,"line":8030},[129,90660,73983],{"class":135},[129,90662,58919],{"class":135},[129,90664,54453],{"class":139},[129,90666,90667],{"class":131,"line":8036},[129,90668,90669],{"class":198},"        \u002F\u002F 这里边写第二三四步\n",[129,90671,90672,90674,90677,90680],{"class":131,"line":8048},[129,90673,2511],{"class":135},[129,90675,90676],{"class":139}," (timer) ",[129,90678,90679],{"class":1977},"clearTimeout",[129,90681,90682],{"class":139},"(timer)\n",[129,90684,90685,90688,90690,90693,90695,90697],{"class":131,"line":8060},[129,90686,90687],{"class":139},"        timer ",[129,90689,185],{"class":135},[129,90691,90692],{"class":1977}," setTimeout",[129,90694,140],{"class":139},[129,90696,54450],{"class":135},[129,90698,54453],{"class":139},[129,90700,90701,90704,90706],{"class":131,"line":8072},[129,90702,90703],{"class":1977},"          fn",[129,90705,13065],{"class":139},[129,90707,90708],{"class":198},"\u002F\u002F加小括号调用fn }, t)\n",[129,90710,90711],{"class":131,"line":9731},[129,90712,90713],{"class":139},"        }, t)\n",[129,90715,90716],{"class":131,"line":9756},[129,90717,52399],{"class":139},[129,90719,90720],{"class":131,"line":9779},[129,90721,2201],{"class":139},[129,90723,90724,90726,90728,90730,90732,90734,90736,90738,90740],{"class":131,"line":9803},[129,90725,90208],{"class":139},[129,90727,57814],{"class":1977},[129,90729,140],{"class":139},[129,90731,90215],{"class":244},[129,90733,12450],{"class":139},[129,90735,90221],{"class":1977},[129,90737,90224],{"class":139},[129,90739,65075],{"class":188},[129,90741,30498],{"class":139},[129,90743,90744],{"class":131,"line":9808},[129,90745,2414],{"emptyLinePlaceholder":56},[129,90747,90748],{"class":131,"line":9813},[129,90749,90750],{"class":198},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[129,90752,90753],{"class":131,"line":9818},[129,90754,90755],{"class":198},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[129,90757,90758],{"class":131,"line":9827},[129,90759,90760],{"class":198},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[129,90762,90763],{"class":131,"line":9832},[129,90764,90765],{"class":198},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[129,90767,90768,90770,90772],{"class":131,"line":9838},[129,90769,52418],{"class":139},[129,90771,51814],{"class":51301},[129,90773,51308],{"class":139},[129,90775,90776,90778,90780],{"class":131,"line":9859},[129,90777,51786],{"class":139},[129,90779,51801],{"class":51301},[129,90781,51308],{"class":139},[129,90783,90784],{"class":131,"line":9865},[129,90785,2414],{"emptyLinePlaceholder":56},[129,90787,90788,90790,90792],{"class":131,"line":9879},[129,90789,51786],{"class":139},[129,90791,50636],{"class":51301},[129,90793,51308],{"class":139},[100,90795,90797],{"id":90796},"_4172-节流","4.17.2 节流",[14,90799,90800],{},[40,90801],{"alt":42,"src":90802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90804,90805],{},[40,90806],{"alt":42,"src":90807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90809,90810],{},[289,90811,90812],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90814,90815],{},"实现方式：",[1146,90817,90818],{},[86,90819,90820],{},"lodash 提供的节流函数来处理",[14,90822,90823],{},"_.throttle(func,[wait=0],[options=])",[14,90825,90826],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[120,90828,90830],{"className":50634,"code":90829,"language":50636,"meta":42,"style":42},"\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",[126,90831,90832,90842,90856,90860,90868,90882,90902,90914,90922,90928,90938,90950,90962,90972,90984,90994,91004,91016,91020,91028,91036,91040,91048,91066,91084,91092,91110,91120,91128,91138,91142,91146,91150,91155,91160,91181,91189,91197,91201],{"__ignoreMap":42},[129,90833,90834,90836,90838,90840],{"class":131,"line":132},[129,90835,51298],{"class":139},[129,90837,51302],{"class":51301},[129,90839,51305],{"class":1977},[129,90841,51308],{"class":139},[129,90843,90844,90846,90848,90850,90852,90854],{"class":131,"line":51},[129,90845,1049],{"class":139},[129,90847,50636],{"class":51301},[129,90849,51317],{"class":1977},[129,90851,185],{"class":139},[129,90853,51322],{"class":244},[129,90855,51308],{"class":139},[129,90857,90858],{"class":131,"line":1194},[129,90859,2414],{"emptyLinePlaceholder":56},[129,90861,90862,90864,90866],{"class":131,"line":1209},[129,90863,1049],{"class":139},[129,90865,51335],{"class":51301},[129,90867,51308],{"class":139},[129,90869,90870,90872,90874,90876,90878,90880],{"class":131,"line":1215},[129,90871,52145],{"class":139},[129,90873,51345],{"class":51301},[129,90875,51348],{"class":1977},[129,90877,185],{"class":139},[129,90879,51353],{"class":244},[129,90881,51308],{"class":139},[129,90883,90884,90886,90888,90890,90892,90894,90896,90898,90900],{"class":131,"line":1229},[129,90885,52145],{"class":139},[129,90887,51345],{"class":51301},[129,90889,14935],{"class":1977},[129,90891,185],{"class":139},[129,90893,51392],{"class":244},[129,90895,51372],{"class":1977},[129,90897,185],{"class":139},[129,90899,51399],{"class":244},[129,90901,51308],{"class":139},[129,90903,90904,90906,90908,90910,90912],{"class":131,"line":1235},[129,90905,52145],{"class":139},[129,90907,51408],{"class":51301},[129,90909,51411],{"class":139},[129,90911,51408],{"class":51301},[129,90913,51308],{"class":139},[129,90915,90916,90918,90920],{"class":131,"line":1326},[129,90917,52145],{"class":139},[129,90919,5141],{"class":51301},[129,90921,51308],{"class":139},[129,90923,90924,90926],{"class":131,"line":1332},[129,90925,54753],{"class":1977},[129,90927,15587],{"class":139},[129,90929,90930,90932,90934,90936],{"class":131,"line":1344},[129,90931,72597],{"class":188},[129,90933,51438],{"class":139},[129,90935,60506],{"class":188},[129,90937,1305],{"class":139},[129,90939,90940,90942,90944,90946,90948],{"class":131,"line":1626},[129,90941,54772],{"class":188},[129,90943,51438],{"class":139},[129,90945,1736],{"class":188},[129,90947,51493],{"class":135},[129,90949,1305],{"class":139},[129,90951,90952,90954,90956,90958,90960],{"class":131,"line":1631},[129,90953,54786],{"class":188},[129,90955,51438],{"class":139},[129,90957,1736],{"class":188},[129,90959,51493],{"class":135},[129,90961,1305],{"class":139},[129,90963,90964,90966,90968,90970],{"class":131,"line":1637},[129,90965,54885],{"class":188},[129,90967,51438],{"class":139},[129,90969,90007],{"class":188},[129,90971,1305],{"class":139},[129,90973,90974,90976,90978,90980,90982],{"class":131,"line":1642},[129,90975,54923],{"class":188},[129,90977,51438],{"class":139},[129,90979,964],{"class":188},[129,90981,51493],{"class":135},[129,90983,1305],{"class":139},[129,90985,90986,90988,90990,90992],{"class":131,"line":1656},[129,90987,57417],{"class":188},[129,90989,51438],{"class":139},[129,90991,60843],{"class":188},[129,90993,1305],{"class":139},[129,90995,90996,90998,91000,91002],{"class":131,"line":1661},[129,90997,57287],{"class":188},[129,90999,51438],{"class":139},[129,91001,51593],{"class":188},[129,91003,1305],{"class":139},[129,91005,91006,91008,91010,91012,91014],{"class":131,"line":1667},[129,91007,90046],{"class":188},[129,91009,51438],{"class":139},[129,91011,458],{"class":188},[129,91013,51493],{"class":135},[129,91015,1305],{"class":139},[129,91017,91018],{"class":131,"line":1688},[129,91019,2201],{"class":139},[129,91021,91022,91024,91026],{"class":131,"line":1693},[129,91023,52418],{"class":139},[129,91025,5141],{"class":51301},[129,91027,51308],{"class":139},[129,91029,91030,91032,91034],{"class":131,"line":1707},[129,91031,51786],{"class":139},[129,91033,51335],{"class":51301},[129,91035,51308],{"class":139},[129,91037,91038],{"class":131,"line":1712},[129,91039,2414],{"emptyLinePlaceholder":56},[129,91041,91042,91044,91046],{"class":131,"line":1741},[129,91043,1049],{"class":139},[129,91045,51801],{"class":51301},[129,91047,51308],{"class":139},[129,91049,91050,91052,91054,91056,91058,91060,91062,91064],{"class":131,"line":1746},[129,91051,52145],{"class":139},[129,91053,51612],{"class":51301},[129,91055,53487],{"class":1977},[129,91057,185],{"class":139},[129,91059,53492],{"class":244},[129,91061,55315],{"class":139},[129,91063,51612],{"class":51301},[129,91065,51308],{"class":139},[129,91067,91068,91070,91072,91074,91076,91078,91080,91082],{"class":131,"line":1763},[129,91069,52145],{"class":139},[129,91071,51814],{"class":51301},[129,91073,55240],{"class":1977},[129,91075,185],{"class":139},[129,91077,88275],{"class":244},[129,91079,55315],{"class":139},[129,91081,51814],{"class":51301},[129,91083,51308],{"class":139},[129,91085,91086,91088,91090],{"class":131,"line":1768},[129,91087,52145],{"class":139},[129,91089,51814],{"class":51301},[129,91091,51308],{"class":139},[129,91093,91094,91096,91098,91100,91102,91104,91106,91108],{"class":131,"line":1773},[129,91095,11236],{"class":135},[129,91097,86934],{"class":188},[129,91099,13579],{"class":135},[129,91101,54397],{"class":139},[129,91103,54400],{"class":1977},[129,91105,140],{"class":139},[129,91107,90147],{"class":244},[129,91109,146],{"class":139},[129,91111,91112,91114,91116,91118],{"class":131,"line":1778},[129,91113,52220],{"class":135},[129,91115,9453],{"class":139},[129,91117,185],{"class":135},[129,91119,47334],{"class":188},[129,91121,91122,91124,91126],{"class":131,"line":1792},[129,91123,70085],{"class":135},[129,91125,90166],{"class":1977},[129,91127,10868],{"class":139},[129,91129,91130,91132,91134,91136],{"class":131,"line":1797},[129,91131,90173],{"class":139},[129,91133,185],{"class":135},[129,91135,3046],{"class":139},[129,91137,2716],{"class":135},[129,91139,91140],{"class":131,"line":2591},[129,91141,90184],{"class":198},[129,91143,91144],{"class":131,"line":2605},[129,91145,2201],{"class":139},[129,91147,91148],{"class":131,"line":2613},[129,91149,90193],{"class":198},[129,91151,91152],{"class":131,"line":2618},[129,91153,91154],{"class":198},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[129,91156,91157],{"class":131,"line":2624},[129,91158,91159],{"class":198},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[129,91161,91162,91164,91166,91168,91170,91172,91175,91177,91179],{"class":131,"line":2630},[129,91163,90208],{"class":139},[129,91165,57814],{"class":1977},[129,91167,140],{"class":139},[129,91169,90215],{"class":244},[129,91171,90218],{"class":139},[129,91173,91174],{"class":1977},"throttle",[129,91176,90224],{"class":139},[129,91178,65075],{"class":188},[129,91180,30498],{"class":139},[129,91182,91183,91185,91187],{"class":131,"line":2635},[129,91184,52418],{"class":139},[129,91186,51814],{"class":51301},[129,91188,51308],{"class":139},[129,91190,91191,91193,91195],{"class":131,"line":7963},[129,91192,51786],{"class":139},[129,91194,51801],{"class":51301},[129,91196,51308],{"class":139},[129,91198,91199],{"class":131,"line":7987},[129,91200,2414],{"emptyLinePlaceholder":56},[129,91202,91203,91205,91207],{"class":131,"line":7992},[129,91204,51786],{"class":139},[129,91206,50636],{"class":51301},[129,91208,51308],{"class":139},[1146,91210,91211],{},[86,91212,91213],{},"手写一个节流函数来处理",[14,91215,70953],{},[14,91217,90267],{},[14,91219,91220],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91222,91223],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[120,91225,91227],{"className":50634,"code":91226,"language":50636,"meta":42,"style":42},"\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",[126,91228,91229,91239,91253,91257,91265,91279,91299,91311,91319,91325,91335,91347,91359,91369,91381,91391,91401,91413,91417,91425,91433,91437,91445,91463,91481,91489,91507,91517,91525,91535,91539,91543,91547,91552,91557,91562,91567,91572,91577,91594,91600,91608,91619,91634,91641,91646,91651,91661,91666,91671,91676,91680,91684,91688,91708,91716,91724,91728],{"__ignoreMap":42},[129,91230,91231,91233,91235,91237],{"class":131,"line":132},[129,91232,51298],{"class":139},[129,91234,51302],{"class":51301},[129,91236,51305],{"class":1977},[129,91238,51308],{"class":139},[129,91240,91241,91243,91245,91247,91249,91251],{"class":131,"line":51},[129,91242,1049],{"class":139},[129,91244,50636],{"class":51301},[129,91246,51317],{"class":1977},[129,91248,185],{"class":139},[129,91250,51322],{"class":244},[129,91252,51308],{"class":139},[129,91254,91255],{"class":131,"line":1194},[129,91256,2414],{"emptyLinePlaceholder":56},[129,91258,91259,91261,91263],{"class":131,"line":1209},[129,91260,1049],{"class":139},[129,91262,51335],{"class":51301},[129,91264,51308],{"class":139},[129,91266,91267,91269,91271,91273,91275,91277],{"class":131,"line":1215},[129,91268,52145],{"class":139},[129,91270,51345],{"class":51301},[129,91272,51348],{"class":1977},[129,91274,185],{"class":139},[129,91276,51353],{"class":244},[129,91278,51308],{"class":139},[129,91280,91281,91283,91285,91287,91289,91291,91293,91295,91297],{"class":131,"line":1229},[129,91282,52145],{"class":139},[129,91284,51345],{"class":51301},[129,91286,14935],{"class":1977},[129,91288,185],{"class":139},[129,91290,51392],{"class":244},[129,91292,51372],{"class":1977},[129,91294,185],{"class":139},[129,91296,51399],{"class":244},[129,91298,51308],{"class":139},[129,91300,91301,91303,91305,91307,91309],{"class":131,"line":1235},[129,91302,52145],{"class":139},[129,91304,51408],{"class":51301},[129,91306,51411],{"class":139},[129,91308,51408],{"class":51301},[129,91310,51308],{"class":139},[129,91312,91313,91315,91317],{"class":131,"line":1326},[129,91314,52145],{"class":139},[129,91316,5141],{"class":51301},[129,91318,51308],{"class":139},[129,91320,91321,91323],{"class":131,"line":1332},[129,91322,54753],{"class":1977},[129,91324,15587],{"class":139},[129,91326,91327,91329,91331,91333],{"class":131,"line":1344},[129,91328,72597],{"class":188},[129,91330,51438],{"class":139},[129,91332,60506],{"class":188},[129,91334,1305],{"class":139},[129,91336,91337,91339,91341,91343,91345],{"class":131,"line":1626},[129,91338,54772],{"class":188},[129,91340,51438],{"class":139},[129,91342,1736],{"class":188},[129,91344,51493],{"class":135},[129,91346,1305],{"class":139},[129,91348,91349,91351,91353,91355,91357],{"class":131,"line":1631},[129,91350,54786],{"class":188},[129,91352,51438],{"class":139},[129,91354,1736],{"class":188},[129,91356,51493],{"class":135},[129,91358,1305],{"class":139},[129,91360,91361,91363,91365,91367],{"class":131,"line":1637},[129,91362,54885],{"class":188},[129,91364,51438],{"class":139},[129,91366,90007],{"class":188},[129,91368,1305],{"class":139},[129,91370,91371,91373,91375,91377,91379],{"class":131,"line":1642},[129,91372,54923],{"class":188},[129,91374,51438],{"class":139},[129,91376,964],{"class":188},[129,91378,51493],{"class":135},[129,91380,1305],{"class":139},[129,91382,91383,91385,91387,91389],{"class":131,"line":1656},[129,91384,57417],{"class":188},[129,91386,51438],{"class":139},[129,91388,60843],{"class":188},[129,91390,1305],{"class":139},[129,91392,91393,91395,91397,91399],{"class":131,"line":1661},[129,91394,57287],{"class":188},[129,91396,51438],{"class":139},[129,91398,51593],{"class":188},[129,91400,1305],{"class":139},[129,91402,91403,91405,91407,91409,91411],{"class":131,"line":1667},[129,91404,90046],{"class":188},[129,91406,51438],{"class":139},[129,91408,458],{"class":188},[129,91410,51493],{"class":135},[129,91412,1305],{"class":139},[129,91414,91415],{"class":131,"line":1688},[129,91416,2201],{"class":139},[129,91418,91419,91421,91423],{"class":131,"line":1693},[129,91420,52418],{"class":139},[129,91422,5141],{"class":51301},[129,91424,51308],{"class":139},[129,91426,91427,91429,91431],{"class":131,"line":1707},[129,91428,51786],{"class":139},[129,91430,51335],{"class":51301},[129,91432,51308],{"class":139},[129,91434,91435],{"class":131,"line":1712},[129,91436,2414],{"emptyLinePlaceholder":56},[129,91438,91439,91441,91443],{"class":131,"line":1741},[129,91440,1049],{"class":139},[129,91442,51801],{"class":51301},[129,91444,51308],{"class":139},[129,91446,91447,91449,91451,91453,91455,91457,91459,91461],{"class":131,"line":1746},[129,91448,52145],{"class":139},[129,91450,51612],{"class":51301},[129,91452,53487],{"class":1977},[129,91454,185],{"class":139},[129,91456,53492],{"class":244},[129,91458,55315],{"class":139},[129,91460,51612],{"class":51301},[129,91462,51308],{"class":139},[129,91464,91465,91467,91469,91471,91473,91475,91477,91479],{"class":131,"line":1763},[129,91466,52145],{"class":139},[129,91468,51814],{"class":51301},[129,91470,55240],{"class":1977},[129,91472,185],{"class":139},[129,91474,88275],{"class":244},[129,91476,55315],{"class":139},[129,91478,51814],{"class":51301},[129,91480,51308],{"class":139},[129,91482,91483,91485,91487],{"class":131,"line":1768},[129,91484,52145],{"class":139},[129,91486,51814],{"class":51301},[129,91488,51308],{"class":139},[129,91490,91491,91493,91495,91497,91499,91501,91503,91505],{"class":131,"line":1773},[129,91492,11236],{"class":135},[129,91494,86934],{"class":188},[129,91496,13579],{"class":135},[129,91498,54397],{"class":139},[129,91500,54400],{"class":1977},[129,91502,140],{"class":139},[129,91504,90147],{"class":244},[129,91506,146],{"class":139},[129,91508,91509,91511,91513,91515],{"class":131,"line":1778},[129,91510,52220],{"class":135},[129,91512,9453],{"class":139},[129,91514,185],{"class":135},[129,91516,47334],{"class":188},[129,91518,91519,91521,91523],{"class":131,"line":1792},[129,91520,70085],{"class":135},[129,91522,90166],{"class":1977},[129,91524,10868],{"class":139},[129,91526,91527,91529,91531,91533],{"class":131,"line":1797},[129,91528,90173],{"class":139},[129,91530,185],{"class":135},[129,91532,3046],{"class":139},[129,91534,2716],{"class":135},[129,91536,91537],{"class":131,"line":2591},[129,91538,90184],{"class":198},[129,91540,91541],{"class":131,"line":2605},[129,91542,2201],{"class":139},[129,91544,91545],{"class":131,"line":2613},[129,91546,90193],{"class":198},[129,91548,91549],{"class":131,"line":2618},[129,91550,91551],{"class":198},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[129,91553,91554],{"class":131,"line":2624},[129,91555,91556],{"class":198},"    \u002F\u002F 1.声明一个定时器变量\n",[129,91558,91559],{"class":131,"line":2630},[129,91560,91561],{"class":198},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[129,91563,91564],{"class":131,"line":2635},[129,91565,91566],{"class":198},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[129,91568,91569],{"class":131,"line":7963},[129,91570,91571],{"class":198},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[129,91573,91574],{"class":131,"line":7987},[129,91575,91576],{"class":198},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[129,91578,91579,91581,91584,91586,91588,91590,91592],{"class":131,"line":7992},[129,91580,70085],{"class":135},[129,91582,91583],{"class":1977}," throttle",[129,91585,140],{"class":139},[129,91587,90638],{"class":5231},[129,91589,12450],{"class":139},[129,91591,859],{"class":5231},[129,91593,12457],{"class":139},[129,91595,91596,91598],{"class":131,"line":7998},[129,91597,79773],{"class":135},[129,91599,90651],{"class":139},[129,91601,91602,91604,91606],{"class":131,"line":8025},[129,91603,73983],{"class":135},[129,91605,58919],{"class":135},[129,91607,54453],{"class":139},[129,91609,91610,91612,91614,91616],{"class":131,"line":8030},[129,91611,2511],{"class":135},[129,91613,1672],{"class":139},[129,91615,366],{"class":135},[129,91617,91618],{"class":139},"timer) {\n",[129,91620,91621,91624,91626,91628,91630,91632],{"class":131,"line":8036},[129,91622,91623],{"class":139},"          timer ",[129,91625,185],{"class":135},[129,91627,90692],{"class":1977},[129,91629,140],{"class":139},[129,91631,54450],{"class":135},[129,91633,54453],{"class":139},[129,91635,91636,91639],{"class":131,"line":8048},[129,91637,91638],{"class":1977},"            fn",[129,91640,1990],{"class":139},[129,91642,91643],{"class":131,"line":8060},[129,91644,91645],{"class":198},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[129,91647,91648],{"class":131,"line":8072},[129,91649,91650],{"class":198},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[129,91652,91653,91656,91658],{"class":131,"line":9731},[129,91654,91655],{"class":139},"            timer ",[129,91657,185],{"class":135},[129,91659,91660],{"class":188}," null\n",[129,91662,91663],{"class":131,"line":9756},[129,91664,91665],{"class":198},"            \u002F\u002F 不能用clearTimeout(timer)\n",[129,91667,91668],{"class":131,"line":9779},[129,91669,91670],{"class":198},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[129,91672,91673],{"class":131,"line":9803},[129,91674,91675],{"class":139},"          }, t)\n",[129,91677,91678],{"class":131,"line":9808},[129,91679,2543],{"class":139},[129,91681,91682],{"class":131,"line":9813},[129,91683,52399],{"class":139},[129,91685,91686],{"class":131,"line":9818},[129,91687,2201],{"class":139},[129,91689,91690,91692,91694,91696,91698,91700,91702,91704,91706],{"class":131,"line":9827},[129,91691,90208],{"class":139},[129,91693,57814],{"class":1977},[129,91695,140],{"class":139},[129,91697,90215],{"class":244},[129,91699,12450],{"class":139},[129,91701,91174],{"class":1977},[129,91703,90224],{"class":139},[129,91705,65075],{"class":188},[129,91707,30498],{"class":139},[129,91709,91710,91712,91714],{"class":131,"line":9832},[129,91711,52418],{"class":139},[129,91713,51814],{"class":51301},[129,91715,51308],{"class":139},[129,91717,91718,91720,91722],{"class":131,"line":9838},[129,91719,51786],{"class":139},[129,91721,51801],{"class":51301},[129,91723,51308],{"class":139},[129,91725,91726],{"class":131,"line":9859},[129,91727,2414],{"emptyLinePlaceholder":56},[129,91729,91730,91732,91734],{"class":131,"line":9865},[129,91731,51786],{"class":139},[129,91733,50636],{"class":51301},[129,91735,51308],{"class":139},[100,91737,91739],{"id":91738},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[120,91741,91743],{"className":53068,"code":91742,"language":53070,"meta":42,"style":42},"\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",[126,91744,91745,91753,91761,91766,91771,91776,91781,91785,91793],{"__ignoreMap":42},[129,91746,91747,91749,91751],{"class":131,"line":132},[129,91748,1049],{"class":139},[129,91750,51801],{"class":51301},[129,91752,51308],{"class":139},[129,91754,91755,91757,91759],{"class":131,"line":51},[129,91756,52145],{"class":139},[129,91758,51814],{"class":51301},[129,91760,51308],{"class":139},[129,91762,91763],{"class":131,"line":1194},[129,91764,91765],{"class":139},"    let timer = null\n",[129,91767,91768],{"class":131,"line":1209},[129,91769,91770],{"class":139},"    timer = setTimeout(() => {\n",[129,91772,91773],{"class":131,"line":1215},[129,91774,91775],{"class":139},"      clearTimeout(timer)\n",[129,91777,91778],{"class":131,"line":1229},[129,91779,91780],{"class":139},"      console.log(timer)\n",[129,91782,91783],{"class":131,"line":1235},[129,91784,60226],{"class":139},[129,91786,91787,91789,91791],{"class":131,"line":1326},[129,91788,52418],{"class":139},[129,91790,51814],{"class":51301},[129,91792,51308],{"class":139},[129,91794,91795,91797,91799],{"class":131,"line":1332},[129,91796,51786],{"class":139},[129,91798,51801],{"class":51301},[129,91800,51308],{"class":139},[14,91802,91803],{},"输出为1",[14,91805,91806],{},"在开启的定时器里边写清除定时器",[14,91808,91809],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[100,91811,91813],{"id":91812},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91815,91816],{},"页面打开，可以记录上一次的视频播放位置",[14,91818,91819],{},[40,91820],{"alt":42,"src":91821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91823,91824],{},[40,91825],{"alt":42,"src":91826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[120,91828,91830],{"className":50634,"code":91829,"language":50636,"meta":42,"style":42},"\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",[126,91831,91832,91842,91856,91860,91868,91882,91902,91922,91944,91957,91965,91971,91981,91991,92001,92005,92009,92016,92029,92041,92045,92049,92059,92071,92085,92089,92093,92100,92110,92123,92135,92145,92155,92171,92183,92187,92191,92199,92209,92221,92231,92241,92251,92255,92259,92269,92280,92284,92292,92300,92304,92312,92327,92342,92357,92378,92386,92394,92409,92431,92439,92454,92480,92506,92532,92540,92548,92567,92575,92580,92599,92604,92622,92627,92632,92640,92645,92659,92667,92672,92689,92693,92698,92720,92724,92732,92740,92744],{"__ignoreMap":42},[129,91833,91834,91836,91838,91840],{"class":131,"line":132},[129,91835,51298],{"class":139},[129,91837,51302],{"class":51301},[129,91839,51305],{"class":1977},[129,91841,51308],{"class":139},[129,91843,91844,91846,91848,91850,91852,91854],{"class":131,"line":51},[129,91845,1049],{"class":139},[129,91847,50636],{"class":51301},[129,91849,51317],{"class":1977},[129,91851,185],{"class":139},[129,91853,51322],{"class":244},[129,91855,51308],{"class":139},[129,91857,91858],{"class":131,"line":1194},[129,91859,2414],{"emptyLinePlaceholder":56},[129,91861,91862,91864,91866],{"class":131,"line":1209},[129,91863,1049],{"class":139},[129,91865,51335],{"class":51301},[129,91867,51308],{"class":139},[129,91869,91870,91872,91874,91876,91878,91880],{"class":131,"line":1215},[129,91871,52145],{"class":139},[129,91873,51345],{"class":51301},[129,91875,51348],{"class":1977},[129,91877,185],{"class":139},[129,91879,51353],{"class":244},[129,91881,59128],{"class":139},[129,91883,91884,91886,91888,91890,91892,91894,91896,91898,91900],{"class":131,"line":1229},[129,91885,52145],{"class":139},[129,91887,51345],{"class":51301},[129,91889,51364],{"class":1977},[129,91891,185],{"class":139},[129,91893,51369],{"class":244},[129,91895,51372],{"class":1977},[129,91897,185],{"class":139},[129,91899,51377],{"class":244},[129,91901,59128],{"class":139},[129,91903,91904,91906,91908,91910,91912,91914,91916,91918,91920],{"class":131,"line":1235},[129,91905,52145],{"class":139},[129,91907,51345],{"class":51301},[129,91909,14935],{"class":1977},[129,91911,185],{"class":139},[129,91913,51392],{"class":244},[129,91915,51372],{"class":1977},[129,91917,185],{"class":139},[129,91919,51399],{"class":244},[129,91921,59128],{"class":139},[129,91923,91924,91926,91928,91930,91932,91935,91937,91939,91942],{"class":131,"line":1326},[129,91925,52145],{"class":139},[129,91927,51345],{"class":51301},[129,91929,14935],{"class":1977},[129,91931,185],{"class":139},[129,91933,91934],{"class":244},"\"referrer\"",[129,91936,51372],{"class":1977},[129,91938,185],{"class":139},[129,91940,91941],{"class":244},"\"never\"",[129,91943,59128],{"class":139},[129,91945,91946,91948,91950,91953,91955],{"class":131,"line":1332},[129,91947,52145],{"class":139},[129,91949,51408],{"class":51301},[129,91951,91952],{"class":139},">综合案例\u003C\u002F",[129,91954,51408],{"class":51301},[129,91956,51308],{"class":139},[129,91958,91959,91961,91963],{"class":131,"line":1344},[129,91960,52145],{"class":139},[129,91962,5141],{"class":51301},[129,91964,51308],{"class":139},[129,91966,91967,91969],{"class":131,"line":1626},[129,91968,6418],{"class":51301},[129,91970,15587],{"class":139},[129,91972,91973,91975,91977,91979],{"class":131,"line":1631},[129,91974,54696],{"class":188},[129,91976,51438],{"class":139},[129,91978,331],{"class":188},[129,91980,1305],{"class":139},[129,91982,91983,91985,91987,91989],{"class":131,"line":1637},[129,91984,54707],{"class":188},[129,91986,51438],{"class":139},[129,91988,331],{"class":188},[129,91990,1305],{"class":139},[129,91992,91993,91995,91997,91999],{"class":131,"line":1642},[129,91994,72597],{"class":188},[129,91996,51438],{"class":139},[129,91998,60506],{"class":188},[129,92000,1305],{"class":139},[129,92002,92003],{"class":131,"line":1656},[129,92004,2201],{"class":139},[129,92006,92007],{"class":131,"line":1661},[129,92008,2414],{"emptyLinePlaceholder":56},[129,92010,92011,92014],{"class":131,"line":1667},[129,92012,92013],{"class":1977},"    .container",[129,92015,15587],{"class":139},[129,92017,92018,92020,92022,92025,92027],{"class":131,"line":1688},[129,92019,54772],{"class":188},[129,92021,51438],{"class":139},[129,92023,92024],{"class":188},"1200",[129,92026,51493],{"class":135},[129,92028,1305],{"class":139},[129,92030,92031,92033,92035,92037,92039],{"class":131,"line":1693},[129,92032,54707],{"class":188},[129,92034,51438],{"class":139},[129,92036,331],{"class":188},[129,92038,51557],{"class":188},[129,92040,1305],{"class":139},[129,92042,92043],{"class":131,"line":1707},[129,92044,2201],{"class":139},[129,92046,92047],{"class":131,"line":1712},[129,92048,2414],{"emptyLinePlaceholder":56},[129,92050,92051,92054,92057],{"class":131,"line":1741},[129,92052,92053],{"class":1977},"    .video",[129,92055,92056],{"class":51301}," video",[129,92058,15587],{"class":139},[129,92060,92061,92063,92065,92067,92069],{"class":131,"line":1746},[129,92062,54772],{"class":188},[129,92064,51438],{"class":139},[129,92066,450],{"class":188},[129,92068,467],{"class":135},[129,92070,1305],{"class":139},[129,92072,92073,92075,92077,92079,92081,92083],{"class":131,"line":1763},[129,92074,54696],{"class":188},[129,92076,51438],{"class":139},[129,92078,839],{"class":188},[129,92080,51493],{"class":135},[129,92082,4107],{"class":188},[129,92084,1305],{"class":139},[129,92086,92087],{"class":131,"line":1768},[129,92088,2201],{"class":139},[129,92090,92091],{"class":131,"line":1773},[129,92092,2414],{"emptyLinePlaceholder":56},[129,92094,92095,92098],{"class":131,"line":1778},[129,92096,92097],{"class":1977},"    .elevator",[129,92099,15587],{"class":139},[129,92101,92102,92104,92106,92108],{"class":131,"line":1792},[129,92103,54760],{"class":188},[129,92105,51438],{"class":139},[129,92107,86234],{"class":188},[129,92109,1305],{"class":139},[129,92111,92112,92114,92116,92119,92121],{"class":131,"line":1797},[129,92113,54948],{"class":188},[129,92115,51438],{"class":139},[129,92117,92118],{"class":188},"280",[129,92120,51493],{"class":135},[129,92122,1305],{"class":139},[129,92124,92125,92127,92129,92131,92133],{"class":131,"line":2591},[129,92126,86428],{"class":188},[129,92128,51438],{"class":139},[129,92130,839],{"class":188},[129,92132,51493],{"class":135},[129,92134,1305],{"class":139},[129,92136,92137,92139,92141,92143],{"class":131,"line":2605},[129,92138,86241],{"class":188},[129,92140,51438],{"class":139},[129,92142,86246],{"class":188},[129,92144,1305],{"class":139},[129,92146,92147,92149,92151,92153],{"class":131,"line":2613},[129,92148,61722],{"class":188},[129,92150,51438],{"class":139},[129,92152,60843],{"class":188},[129,92154,1305],{"class":139},[129,92156,92157,92159,92161,92163,92165,92167,92169],{"class":131,"line":2618},[129,92158,61978],{"class":188},[129,92160,51438],{"class":139},[129,92162,357],{"class":188},[129,92164,51493],{"class":135},[129,92166,51522],{"class":188},[129,92168,62245],{"class":188},[129,92170,1305],{"class":139},[129,92172,92173,92175,92177,92179,92181],{"class":131,"line":2624},[129,92174,54772],{"class":188},[129,92176,51438],{"class":139},[129,92178,1046],{"class":188},[129,92180,51493],{"class":135},[129,92182,1305],{"class":139},[129,92184,92185],{"class":131,"line":2630},[129,92186,2201],{"class":139},[129,92188,92189],{"class":131,"line":2635},[129,92190,2414],{"emptyLinePlaceholder":56},[129,92192,92193,92195,92197],{"class":131,"line":7963},[129,92194,92097],{"class":1977},[129,92196,1413],{"class":51301},[129,92198,15587],{"class":139},[129,92200,92201,92203,92205,92207],{"class":131,"line":7987},[129,92202,55010],{"class":188},[129,92204,51438],{"class":139},[129,92206,60870],{"class":188},[129,92208,1305],{"class":139},[129,92210,92211,92213,92215,92217,92219],{"class":131,"line":7992},[129,92212,54696],{"class":188},[129,92214,51438],{"class":139},[129,92216,585],{"class":188},[129,92218,51493],{"class":135},[129,92220,1305],{"class":139},[129,92222,92223,92225,92227,92229],{"class":131,"line":7998},[129,92224,63971],{"class":188},[129,92226,51438],{"class":139},[129,92228,54738],{"class":188},[129,92230,1305],{"class":139},[129,92232,92233,92235,92237,92239],{"class":131,"line":8025},[129,92234,57287],{"class":188},[129,92236,51438],{"class":139},[129,92238,51593],{"class":188},[129,92240,1305],{"class":139},[129,92242,92243,92245,92247,92249],{"class":131,"line":8030},[129,92244,57417],{"class":188},[129,92246,51438],{"class":139},[129,92248,62071],{"class":188},[129,92250,1305],{"class":139},[129,92252,92253],{"class":131,"line":8036},[129,92254,2201],{"class":139},[129,92256,92257],{"class":131,"line":8048},[129,92258,2414],{"emptyLinePlaceholder":56},[129,92260,92261,92263,92265,92267],{"class":131,"line":8060},[129,92262,92097],{"class":1977},[129,92264,1413],{"class":51301},[129,92266,64025],{"class":1977},[129,92268,15587],{"class":139},[129,92270,92271,92273,92275,92278],{"class":131,"line":8072},[129,92272,57417],{"class":188},[129,92274,51438],{"class":139},[129,92276,92277],{"class":188},"#1286ff",[129,92279,1305],{"class":139},[129,92281,92282],{"class":131,"line":9731},[129,92283,2201],{"class":139},[129,92285,92286,92288,92290],{"class":131,"line":9756},[129,92287,52418],{"class":139},[129,92289,5141],{"class":51301},[129,92291,51308],{"class":139},[129,92293,92294,92296,92298],{"class":131,"line":9779},[129,92295,51786],{"class":139},[129,92297,51335],{"class":51301},[129,92299,51308],{"class":139},[129,92301,92302],{"class":131,"line":9803},[129,92303,2414],{"emptyLinePlaceholder":56},[129,92305,92306,92308,92310],{"class":131,"line":9808},[129,92307,1049],{"class":139},[129,92309,51801],{"class":51301},[129,92311,51308],{"class":139},[129,92313,92314,92316,92318,92320,92322,92325],{"class":131,"line":9813},[129,92315,52145],{"class":139},[129,92317,51612],{"class":51301},[129,92319,53487],{"class":1977},[129,92321,185],{"class":139},[129,92323,92324],{"class":244},"\"container\"",[129,92326,51308],{"class":139},[129,92328,92329,92331,92333,92335,92337,92340],{"class":131,"line":9818},[129,92330,51342],{"class":139},[129,92332,51612],{"class":51301},[129,92334,53487],{"class":1977},[129,92336,185],{"class":139},[129,92338,92339],{"class":244},"\"header\"",[129,92341,51308],{"class":139},[129,92343,92344,92346,92348,92350,92352,92355],{"class":131,"line":9827},[129,92345,55235],{"class":139},[129,92347,20],{"class":51301},[129,92349,61058],{"class":1977},[129,92351,185],{"class":139},[129,92353,92354],{"class":244},"\"http:\u002F\u002Fpip.itcast.cn\"",[129,92356,51308],{"class":139},[129,92358,92359,92361,92363,92365,92367,92370,92372,92374,92376],{"class":131,"line":9832},[129,92360,55303],{"class":139},[129,92362,40],{"class":51301},[129,92364,55240],{"class":1977},[129,92366,185],{"class":139},[129,92368,92369],{"class":244},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[129,92371,55248],{"class":1977},[129,92373,185],{"class":139},[129,92375,7667],{"class":244},[129,92377,59128],{"class":139},[129,92379,92380,92382,92384],{"class":131,"line":9838},[129,92381,55408],{"class":139},[129,92383,20],{"class":51301},[129,92385,51308],{"class":139},[129,92387,92388,92390,92392],{"class":131,"line":9859},[129,92389,51777],{"class":139},[129,92391,51612],{"class":51301},[129,92393,51308],{"class":139},[129,92395,92396,92398,92400,92402,92404,92407],{"class":131,"line":9865},[129,92397,51342],{"class":139},[129,92399,51612],{"class":51301},[129,92401,53487],{"class":1977},[129,92403,185],{"class":139},[129,92405,92406],{"class":244},"\"video\"",[129,92408,51308],{"class":139},[129,92410,92411,92413,92415,92417,92419,92422,92425,92427,92429],{"class":131,"line":9879},[129,92412,55235],{"class":139},[129,92414,28184],{"class":51301},[129,92416,55240],{"class":1977},[129,92418,185],{"class":139},[129,92420,92421],{"class":244},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[129,92423,92424],{"class":1977}," controls",[129,92426,55315],{"class":139},[129,92428,28184],{"class":51301},[129,92430,51308],{"class":139},[129,92432,92433,92435,92437],{"class":131,"line":9885},[129,92434,51777],{"class":139},[129,92436,51612],{"class":51301},[129,92438,51308],{"class":139},[129,92440,92441,92443,92445,92447,92449,92452],{"class":131,"line":9912},[129,92442,51342],{"class":139},[129,92444,51612],{"class":51301},[129,92446,53487],{"class":1977},[129,92448,185],{"class":139},[129,92450,92451],{"class":244},"\"elevator\"",[129,92453,51308],{"class":139},[129,92455,92456,92458,92460,92462,92464,92466,92469,92471,92473,92476,92478],{"class":131,"line":9921},[129,92457,55235],{"class":139},[129,92459,20],{"class":51301},[129,92461,61058],{"class":1977},[129,92463,185],{"class":139},[129,92465,64237],{"class":244},[129,92467,92468],{"class":1977}," data-ref",[129,92470,185],{"class":139},[129,92472,92406],{"class":244},[129,92474,92475],{"class":139},">视频介绍\u003C\u002F",[129,92477,20],{"class":51301},[129,92479,51308],{"class":139},[129,92481,92482,92484,92486,92488,92490,92492,92494,92496,92499,92502,92504],{"class":131,"line":9927},[129,92483,55235],{"class":139},[129,92485,20],{"class":51301},[129,92487,61058],{"class":1977},[129,92489,185],{"class":139},[129,92491,64237],{"class":244},[129,92493,92468],{"class":1977},[129,92495,185],{"class":139},[129,92497,92498],{"class":244},"\"intro\"",[129,92500,92501],{"class":139},">课程简介\u003C\u002F",[129,92503,20],{"class":51301},[129,92505,51308],{"class":139},[129,92507,92508,92510,92512,92514,92516,92518,92520,92522,92525,92528,92530],{"class":131,"line":9935},[129,92509,55235],{"class":139},[129,92511,20],{"class":51301},[129,92513,61058],{"class":1977},[129,92515,185],{"class":139},[129,92517,64237],{"class":244},[129,92519,92468],{"class":1977},[129,92521,185],{"class":139},[129,92523,92524],{"class":244},"\"outline\"",[129,92526,92527],{"class":139},">评论列表\u003C\u002F",[129,92529,20],{"class":51301},[129,92531,51308],{"class":139},[129,92533,92534,92536,92538],{"class":131,"line":9940},[129,92535,51777],{"class":139},[129,92537,51612],{"class":51301},[129,92539,51308],{"class":139},[129,92541,92542,92544,92546],{"class":131,"line":16619},[129,92543,52418],{"class":139},[129,92545,51612],{"class":51301},[129,92547,51308],{"class":139},[129,92549,92550,92552,92554,92556,92558,92561,92563,92565],{"class":131,"line":16625},[129,92551,52145],{"class":139},[129,92553,51814],{"class":51301},[129,92555,55240],{"class":1977},[129,92557,185],{"class":139},[129,92559,92560],{"class":244},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[129,92562,55315],{"class":139},[129,92564,51814],{"class":51301},[129,92566,51308],{"class":139},[129,92568,92569,92571,92573],{"class":131,"line":16648},[129,92570,52145],{"class":139},[129,92572,51814],{"class":51301},[129,92574,51308],{"class":139},[129,92576,92577],{"class":131,"line":16654},[129,92578,92579],{"class":198},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[129,92581,92582,92584,92586,92588,92590,92592,92594,92597],{"class":131,"line":16677},[129,92583,11236],{"class":135},[129,92585,92056],{"class":188},[129,92587,13579],{"class":135},[129,92589,54397],{"class":139},[129,92591,54400],{"class":1977},[129,92593,140],{"class":139},[129,92595,92596],{"class":244},"'video'",[129,92598,146],{"class":139},[129,92600,92601],{"class":131,"line":16691},[129,92602,92603],{"class":198},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[129,92605,92606,92609,92611,92613,92615,92618,92620],{"class":131,"line":16711},[129,92607,92608],{"class":139},"    video.ontimeupdate ",[129,92610,185],{"class":135},[129,92612,88356],{"class":139},[129,92614,91174],{"class":1977},[129,92616,92617],{"class":139},"(() ",[129,92619,84723],{"class":135},[129,92621,15587],{"class":139},[129,92623,92624],{"class":131,"line":16717},[129,92625,92626],{"class":198},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[129,92628,92629],{"class":131,"line":16728},[129,92630,92631],{"class":198},"      \u002F\u002F 控制台输出当前的时间\n",[129,92633,92634,92637],{"class":131,"line":16751},[129,92635,92636],{"class":198},"      \u002F\u002F console.log(video.currentTime)",[129,92638,92639],{"class":198},"  \u002F\u002F获得当前的视频时间\n",[129,92641,92642],{"class":131,"line":16773},[129,92643,92644],{"class":198},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[129,92646,92647,92649,92651,92653,92656],{"class":131,"line":16778},[129,92648,74684],{"class":139},[129,92650,71655],{"class":1977},[129,92652,140],{"class":139},[129,92654,92655],{"class":244},"'currentTime'",[129,92657,92658],{"class":139},", video.currentTime)\n",[129,92660,92661,92663,92665],{"class":131,"line":16784},[129,92662,54536],{"class":139},[129,92664,6425],{"class":188},[129,92666,146],{"class":139},[129,92668,92669],{"class":131,"line":16798},[129,92670,92671],{"class":198},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[129,92673,92674,92677,92680,92682,92685,92687],{"class":131,"line":16811},[129,92675,92676],{"class":139},"    video.",[129,92678,92679],{"class":1977},"onloadeddata",[129,92681,13579],{"class":135},[129,92683,92684],{"class":139}," () ",[129,92686,84723],{"class":135},[129,92688,15587],{"class":139},[129,92690,92691],{"class":131,"line":16816},[129,92692,60013],{"class":198},[129,92694,92695],{"class":131,"line":16830},[129,92696,92697],{"class":198},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[129,92699,92700,92703,92705,92708,92710,92712,92714,92716,92718],{"class":131,"line":16835},[129,92701,92702],{"class":139},"      video.currentTime ",[129,92704,185],{"class":135},[129,92706,92707],{"class":139}," localStorage.",[129,92709,71686],{"class":1977},[129,92711,140],{"class":139},[129,92713,92655],{"class":244},[129,92715,13729],{"class":139},[129,92717,71358],{"class":135},[129,92719,47334],{"class":188},[129,92721,92722],{"class":131,"line":16841},[129,92723,2201],{"class":139},[129,92725,92726,92728,92730],{"class":131,"line":16846},[129,92727,52418],{"class":139},[129,92729,51814],{"class":51301},[129,92731,51308],{"class":139},[129,92733,92734,92736,92738],{"class":131,"line":16860},[129,92735,51786],{"class":139},[129,92737,51801],{"class":51301},[129,92739,51308],{"class":139},[129,92741,92742],{"class":131,"line":16865},[129,92743,2414],{"emptyLinePlaceholder":56},[129,92745,92746,92748,92750],{"class":131,"line":16870},[129,92747,51786],{"class":139},[129,92749,50636],{"class":51301},[129,92751,51308],{"class":139},[5141,92753,92754],{},"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":42,"searchDepth":51,"depth":51,"links":92756},[92757,92762,92766,92767,92768,92773,92778,92779,92780,92781,92788,92793,92794,92804,92808,92809,92813],{"id":76692,"depth":51,"text":76693,"children":92758},[92759,92760,92761],{"id":76696,"depth":1194,"text":76697},{"id":76721,"depth":1194,"text":76722},{"id":76733,"depth":1194,"text":76734},{"id":76745,"depth":51,"text":76746,"children":92763},[92764,92765],{"id":76749,"depth":1194,"text":76750},{"id":76764,"depth":1194,"text":76765},{"id":76816,"depth":51,"text":76817},{"id":76860,"depth":51,"text":76861},{"id":76877,"depth":51,"text":76878,"children":92769},[92770,92771,92772],{"id":76881,"depth":1194,"text":76882},{"id":76894,"depth":1194,"text":76895},{"id":76999,"depth":1194,"text":77000},{"id":77288,"depth":51,"text":77289,"children":92774},[92775,92776,92777],{"id":77292,"depth":1194,"text":77293},{"id":77735,"depth":1194,"text":77736},{"id":78146,"depth":1194,"text":78147},{"id":78209,"depth":51,"text":78210},{"id":78288,"depth":51,"text":78289},{"id":78381,"depth":51,"text":78382},{"id":80226,"depth":51,"text":80227,"children":92782},[92783,92784,92785,92786,92787],{"id":80230,"depth":1194,"text":80231},{"id":80242,"depth":1194,"text":80243},{"id":80461,"depth":1194,"text":80462},{"id":80479,"depth":1194,"text":80480},{"id":80539,"depth":1194,"text":80540},{"id":84807,"depth":51,"text":84808,"children":92789},[92790,92791,92792],{"id":84811,"depth":1194,"text":84812},{"id":84829,"depth":1194,"text":84830},{"id":84855,"depth":1194,"text":84856},{"id":84864,"depth":51,"text":84865},{"id":84886,"depth":51,"text":84887,"children":92795},[92796,92797,92798,92799,92800,92801,92802,92803],{"id":84890,"depth":1194,"text":84891},{"id":85151,"depth":1194,"text":85152},{"id":85337,"depth":1194,"text":85338},{"id":85704,"depth":1194,"text":85705},{"id":85820,"depth":1194,"text":85821},{"id":85856,"depth":1194,"text":85857},{"id":85903,"depth":1194,"text":85904},{"id":85937,"depth":1194,"text":85938},{"id":87300,"depth":51,"text":87301,"children":92805},[92806,92807],{"id":87304,"depth":1194,"text":87305},{"id":87341,"depth":1194,"text":87342},{"id":88696,"depth":51,"text":88697},{"id":89067,"depth":51,"text":89068,"children":92810},[92811,92812],{"id":89071,"depth":1194,"text":89072},{"id":89105,"depth":1194,"text":89106},{"id":89834,"depth":51,"text":89835,"children":92814},[92815,92816,92817,92818],{"id":89838,"depth":1194,"text":89839},{"id":90796,"depth":1194,"text":90797},{"id":91738,"depth":1194,"text":91739},{"id":91812,"depth":1194,"text":91813},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76681,"description":53},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92825,"title":92826,"body":92827,"description":92838,"extension":54,"meta":92839,"navigation":56,"path":92841,"seo":92842,"stem":92843,"__hash__":92844},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92828,"toc":92836},[92829],[14,92830,92831,92832],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[20,92833,92834],{"href":92834,"rel":92835},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24],{"title":42,"searchDepth":51,"depth":51,"links":92837},[],"三件套第三套学习",{"category":92840},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92826,"description":92838},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92846,"title":92847,"body":92848,"description":53,"extension":54,"meta":92953,"navigation":56,"path":92954,"seo":92955,"stem":92956,"__hash__":92957},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92849,"toc":92948},[92850,92857,92860,92863,92866,92870,92879,92882,92885,92889,92898,92901,92905,92908,92928,92931,92945],[14,92851,92852],{},[20,92853,92856],{"href":92854,"rel":92855},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92858,92847],{"id":92859},"_1安装",[14,92861,92862],{},"numpy是科学计算基础库,底层是C语言",[14,92864,92865],{},"三种方式：",[71,92867,92869],{"id":92868},"_11-通过pip安装","1.1 通过pip安装",[120,92871,92873],{"className":30379,"code":92872,"language":30381,"meta":42,"style":42},"pip install numpy\n",[126,92874,92875],{"__ignoreMap":42},[129,92876,92877],{"class":131,"line":132},[129,92878,92872],{"class":139},[14,92880,92881],{},"首选方式，自动处理依赖项",[14,92883,92884],{},"在提示系统命令符中使用cmd",[71,92886,92888],{"id":92887},"_12-通过anaconda安装","1.2 通过Anaconda安装",[120,92890,92892],{"className":30379,"code":92891,"language":30381,"meta":42,"style":42},"conda install numpy\n",[126,92893,92894],{"__ignoreMap":42},[129,92895,92896],{"class":131,"line":132},[129,92897,92891],{"class":139},[14,92899,92900],{},"自动解决环境依赖",[71,92902,92904],{"id":92903},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92906,92907],{},"对于Debian\u002FUbuntu",[120,92909,92911],{"className":30379,"code":92910,"language":30381,"meta":42,"style":42},"sudo apt-get install python3-numpy\n",[126,92912,92913],{"__ignoreMap":42},[129,92914,92915,92918,92920,92923,92925],{"class":131,"line":132},[129,92916,92917],{"class":139},"sudo apt",[129,92919,671],{"class":135},[129,92921,92922],{"class":139},"get install python3",[129,92924,671],{"class":135},[129,92926,92927],{"class":139},"numpy\n",[14,92929,92930],{},"对于Fedora:",[120,92932,92934],{"className":30379,"code":92933,"language":30381,"meta":42,"style":42},"sudo dnf install python3-numpy\n",[126,92935,92936],{"__ignoreMap":42},[129,92937,92938,92941,92943],{"class":131,"line":132},[129,92939,92940],{"class":139},"sudo dnf install python3",[129,92942,671],{"class":135},[129,92944,92927],{"class":139},[5141,92946,92947],{},"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":42,"searchDepth":51,"depth":51,"links":92949},[92950,92951,92952],{"id":92868,"depth":51,"text":92869},{"id":92887,"depth":51,"text":92888},{"id":92903,"depth":51,"text":92904},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92847,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92959,"title":92960,"body":92961,"description":53,"extension":54,"meta":93074,"navigation":56,"path":93075,"seo":93076,"stem":93077,"__hash__":93078},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92962,"toc":93072},[92963,92966,92969,92972,92975,92978,92981,92984,92987,92990,93066,93069],[10,92964,92960],{"id":92965},"_10算数函数",[14,92967,92968],{},"加减乘除运算跟python基础语法没区别",[14,92970,92971],{},"除了python那种方法外还可以使用函数",[14,92973,92974],{},"加：np.add(a,b)",[14,92976,92977],{},"减：np.subtract(a,b)",[14,92979,92980],{},"乘：np.multiply(a,b)",[14,92982,92983],{},"除：np.divide(a,b) == a\u002Fb",[14,92985,92986],{},"取余：np.mod(a,b) == a%b",[14,92988,92989],{},"必须会的用法：",[120,92991,92993],{"className":30379,"code":92992,"language":30381,"meta":42,"style":42},"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",[126,92994,92995,93017,93038,93048,93061],{"__ignoreMap":42},[129,92996,92997,92999,93001,93004,93006,93009,93011,93013,93015],{"class":131,"line":132},[129,92998,20],{"class":139},[129,93000,185],{"class":135},[129,93002,93003],{"class":139},"np.arange(",[129,93005,559],{"class":188},[129,93007,93008],{"class":139},").reshape(",[129,93010,211],{"class":188},[129,93012,517],{"class":139},[129,93014,211],{"class":188},[129,93016,146],{"class":139},[129,93018,93019,93021,93023,93026,93028,93030,93032,93034,93036],{"class":131,"line":51},[129,93020,402],{"class":139},[129,93022,185],{"class":135},[129,93024,93025],{"class":139},"np.array([",[129,93027,585],{"class":188},[129,93029,517],{"class":139},[129,93031,585],{"class":188},[129,93033,517],{"class":139},[129,93035,585],{"class":188},[129,93037,4671],{"class":139},[129,93039,93040,93043,93045],{"class":131,"line":1194},[129,93041,93042],{"class":139},"result",[129,93044,185],{"class":135},[129,93046,93047],{"class":139},"np.empty_like(a)\n",[129,93049,93050,93053,93056,93058],{"class":131,"line":1209},[129,93051,93052],{"class":139},"np.add(a,b,",[129,93054,93055],{"class":5231},"out",[129,93057,185],{"class":135},[129,93059,93060],{"class":139},"result)\n",[129,93062,93063],{"class":131,"line":1215},[129,93064,93065],{"class":139},"result\n",[14,93067,93068],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5141,93070,93071],{},"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":42,"searchDepth":51,"depth":51,"links":93073},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92960,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93080,"title":93081,"body":93082,"description":53,"extension":54,"meta":93844,"navigation":56,"path":93845,"seo":93846,"stem":93847,"__hash__":93848},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93083,"toc":93831},[93084,93087,93090,93093,93097,93136,93140,93184,93244,93248,93251,93290,93293,93338,93342,93378,93382,93451,93455,93519,93523,93526,93529,93532,93535,93571,93575,93615,93619,93691,93694,93698,93761,93765,93828],[10,93085,93081],{"id":93086},"_11统计函数",[14,93088,93089],{},"sum max min mean",[14,93091,93092],{},"这些有axis参数，可以指定方向",[71,93094,93096],{"id":93095},"_111-sum求和函数","11.1 sum()求和函数",[120,93098,93100],{"className":30379,"code":93099,"language":30381,"meta":42,"style":42},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[126,93101,93102,93107,93128],{"__ignoreMap":42},[129,93103,93104],{"class":131,"line":132},[129,93105,93106],{"class":198},"#创建一维数组\n",[129,93108,93109,93111,93113,93116,93118,93120,93122,93124,93126],{"class":131,"line":51},[129,93110,20],{"class":139},[129,93112,185],{"class":135},[129,93114,93115],{"class":139},"np.random.randint(",[129,93117,357],{"class":188},[129,93119,517],{"class":139},[129,93121,450],{"class":188},[129,93123,517],{"class":139},[129,93125,839],{"class":188},[129,93127,146],{"class":139},[129,93129,93130,93133],{"class":131,"line":1194},[129,93131,93132],{"class":139},"np.sum(a)",[129,93134,93135],{"class":198},"#求和\n",[71,93137,93139],{"id":93138},"_112-max求最大值函数","11.2 max()求最大值函数",[120,93141,93143],{"className":30379,"code":93142,"language":30381,"meta":42,"style":42},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[126,93144,93145,93149,93169,93174,93179],{"__ignoreMap":42},[129,93146,93147],{"class":131,"line":132},[129,93148,93106],{"class":198},[129,93150,93151,93153,93155,93157,93159,93161,93163,93165,93167],{"class":131,"line":51},[129,93152,20],{"class":139},[129,93154,185],{"class":135},[129,93156,93115],{"class":139},[129,93158,357],{"class":188},[129,93160,517],{"class":139},[129,93162,450],{"class":188},[129,93164,517],{"class":139},[129,93166,839],{"class":188},[129,93168,146],{"class":139},[129,93170,93171],{"class":131,"line":1194},[129,93172,93173],{"class":139},"np.max(a)\n",[129,93175,93176],{"class":131,"line":1209},[129,93177,93178],{"class":198},"#最大索引(求最大元素的索引)arg\n",[129,93180,93181],{"class":131,"line":1215},[129,93182,93183],{"class":139},"np.argmax(a)\n",[120,93185,93187],{"className":30379,"code":93186,"language":30381,"meta":42,"style":42},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[126,93188,93189,93210,93230,93234],{"__ignoreMap":42},[129,93190,93191,93193,93195,93198,93200,93202,93204,93206,93208],{"class":131,"line":132},[129,93192,10934],{"class":139},[129,93194,185],{"class":135},[129,93196,93197],{"class":139}," np.array([",[129,93199,357],{"class":188},[129,93201,12450],{"class":139},[129,93203,458],{"class":188},[129,93205,12450],{"class":139},[129,93207,211],{"class":188},[129,93209,4671],{"class":139},[129,93211,93212,93214,93216,93218,93220,93222,93224,93226,93228],{"class":131,"line":51},[129,93213,10960],{"class":139},[129,93215,185],{"class":135},[129,93217,93197],{"class":139},[129,93219,211],{"class":188},[129,93221,12450],{"class":139},[129,93223,217],{"class":188},[129,93225,12450],{"class":139},[129,93227,432],{"class":188},[129,93229,4671],{"class":139},[129,93231,93232],{"class":131,"line":1194},[129,93233,2414],{"emptyLinePlaceholder":56},[129,93235,93236,93238,93241],{"class":131,"line":1209},[129,93237,30416],{"class":188},[129,93239,93240],{"class":139},"(np.maximum(a, b))   ",[129,93242,93243],{"class":198},"# [3 5 4]，每个位置上取较大值\n",[71,93245,93247],{"id":93246},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93249,93250],{},"①一维数组：",[120,93252,93254],{"className":30379,"code":93253,"language":30381,"meta":42,"style":42},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[126,93255,93256,93260,93280,93285],{"__ignoreMap":42},[129,93257,93258],{"class":131,"line":132},[129,93259,93106],{"class":198},[129,93261,93262,93264,93266,93268,93270,93272,93274,93276,93278],{"class":131,"line":51},[129,93263,20],{"class":139},[129,93265,185],{"class":135},[129,93267,93115],{"class":139},[129,93269,357],{"class":188},[129,93271,517],{"class":139},[129,93273,450],{"class":188},[129,93275,517],{"class":139},[129,93277,839],{"class":188},[129,93279,146],{"class":139},[129,93281,93282],{"class":131,"line":1194},[129,93283,93284],{"class":198},"#求平均值\n",[129,93286,93287],{"class":131,"line":1209},[129,93288,93289],{"class":139},"np.mean(a)\n",[14,93291,93292],{},"②二维数组",[120,93294,93296],{"className":30379,"code":93295,"language":30381,"meta":42,"style":42},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[126,93297,93298,93303,93328,93333],{"__ignoreMap":42},[129,93299,93300],{"class":131,"line":132},[129,93301,93302],{"class":198},"#二维数组\n",[129,93304,93305,93308,93310,93312,93314,93316,93318,93320,93322,93324,93326],{"class":131,"line":51},[129,93306,93307],{"class":139},"aa",[129,93309,185],{"class":135},[129,93311,93003],{"class":139},[129,93313,357],{"class":188},[129,93315,517],{"class":139},[129,93317,662],{"class":188},[129,93319,93008],{"class":139},[129,93321,211],{"class":188},[129,93323,517],{"class":139},[129,93325,432],{"class":188},[129,93327,146],{"class":139},[129,93329,93330],{"class":131,"line":1194},[129,93331,93332],{"class":198},"#对数组中的所有数求平均\n",[129,93334,93335],{"class":131,"line":1209},[129,93336,93337],{"class":139},"np.mean(aa)\n",[71,93339,93341],{"id":93340},"_114-median求中位数函数","11.4 median()求中位数函数",[120,93343,93345],{"className":30379,"code":93344,"language":30381,"meta":42,"style":42},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[126,93346,93347,93352,93368,93373],{"__ignoreMap":42},[129,93348,93349],{"class":131,"line":132},[129,93350,93351],{"class":198},"#求中位数\n",[129,93353,93354,93356,93358,93360,93362,93364,93366],{"class":131,"line":51},[129,93355,402],{"class":139},[129,93357,185],{"class":135},[129,93359,93003],{"class":139},[129,93361,357],{"class":188},[129,93363,517],{"class":139},[129,93365,585],{"class":188},[129,93367,146],{"class":139},[129,93369,93370],{"class":131,"line":1194},[129,93371,93372],{"class":139},"np.median(b)\n",[129,93374,93375],{"class":131,"line":1209},[129,93376,93377],{"class":198},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[71,93379,93381],{"id":93380},"_115-power求幂运算函数","11.5 power()求幂运算函数",[120,93383,93385],{"className":30379,"code":93384,"language":30381,"meta":42,"style":42},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[126,93386,93387,93403,93408,93413,93422,93427,93436],{"__ignoreMap":42},[129,93388,93389,93391,93393,93395,93397,93399,93401],{"class":131,"line":132},[129,93390,402],{"class":139},[129,93392,185],{"class":135},[129,93394,93003],{"class":139},[129,93396,357],{"class":188},[129,93398,517],{"class":139},[129,93400,585],{"class":188},[129,93402,146],{"class":139},[129,93404,93405],{"class":131,"line":51},[129,93406,93407],{"class":198},"#幂运算\n",[129,93409,93410],{"class":131,"line":1194},[129,93411,93412],{"class":198},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[129,93414,93415,93418,93420],{"class":131,"line":1209},[129,93416,93417],{"class":139},"np.power(b,",[129,93419,217],{"class":188},[129,93421,146],{"class":139},[129,93423,93424],{"class":131,"line":1215},[129,93425,93426],{"class":198},"#或者以下代码，将数据存储起来\n",[129,93428,93429,93431,93433],{"class":131,"line":1229},[129,93430,984],{"class":139},[129,93432,185],{"class":135},[129,93434,93435],{"class":139},"np.empty_like(b)\n",[129,93437,93438,93440,93442,93444,93446,93448],{"class":131,"line":1235},[129,93439,93417],{"class":139},[129,93441,217],{"class":188},[129,93443,517],{"class":139},[129,93445,93055],{"class":5231},[129,93447,185],{"class":135},[129,93449,93450],{"class":139},"y)\n",[71,93452,93454],{"id":93453},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[120,93456,93458],{"className":30379,"code":93457,"language":30381,"meta":42,"style":42},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[126,93459,93460,93476,93481,93486,93490,93508],{"__ignoreMap":42},[129,93461,93462,93464,93466,93468,93470,93472,93474],{"class":131,"line":132},[129,93463,402],{"class":139},[129,93465,185],{"class":135},[129,93467,93003],{"class":139},[129,93469,357],{"class":188},[129,93471,517],{"class":139},[129,93473,585],{"class":188},[129,93475,146],{"class":139},[129,93477,93478],{"class":131,"line":51},[129,93479,93480],{"class":198},"#开方\n",[129,93482,93483],{"class":131,"line":1194},[129,93484,93485],{"class":139},"np.sqrt(b)\n",[129,93487,93488],{"class":131,"line":1209},[129,93489,93426],{"class":198},[129,93491,93492,93494,93496,93499,93502,93504,93506],{"class":131,"line":1215},[129,93493,984],{"class":139},[129,93495,185],{"class":135},[129,93497,93498],{"class":139},"np.empty_like(b,",[129,93500,93501],{"class":5231},"dtype",[129,93503,185],{"class":135},[129,93505,179],{"class":188},[129,93507,146],{"class":139},[129,93509,93510,93513,93515,93517],{"class":131,"line":1229},[129,93511,93512],{"class":139},"np.sqrt(b,",[129,93514,93055],{"class":5231},[129,93516,185],{"class":135},[129,93518,93450],{"class":139},[71,93520,93522],{"id":93521},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93524,93525],{},"对数组中的元素累计求和，可指定轴",[14,93527,93528],{},"#累计求和的意思是：",[14,93530,93531],{},"a = np.array([1, 2, 3, 4])",[14,93533,93534],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[120,93536,93538],{"className":30379,"code":93537,"language":30381,"meta":42,"style":42},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[126,93539,93540,93556,93561,93566],{"__ignoreMap":42},[129,93541,93542,93544,93546,93548,93550,93552,93554],{"class":131,"line":132},[129,93543,402],{"class":139},[129,93545,185],{"class":135},[129,93547,93003],{"class":139},[129,93549,357],{"class":188},[129,93551,517],{"class":139},[129,93553,585],{"class":188},[129,93555,146],{"class":139},[129,93557,93558],{"class":131,"line":51},[129,93559,93560],{"class":139},"np.cumsum(b)\n",[129,93562,93563],{"class":131,"line":1194},[129,93564,93565],{"class":198},"#结果：\n",[129,93567,93568],{"class":131,"line":1209},[129,93569,93570],{"class":198},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[71,93572,93574],{"id":93573},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[120,93576,93578],{"className":30379,"code":93577,"language":30381,"meta":42,"style":42},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[126,93579,93580,93596,93601,93606,93610],{"__ignoreMap":42},[129,93581,93582,93584,93586,93588,93590,93592,93594],{"class":131,"line":132},[129,93583,402],{"class":139},[129,93585,185],{"class":135},[129,93587,93003],{"class":139},[129,93589,357],{"class":188},[129,93591,517],{"class":139},[129,93593,585],{"class":188},[129,93595,146],{"class":139},[129,93597,93598],{"class":131,"line":51},[129,93599,93600],{"class":198},"#对数组中的元素累计求积，可指定轴\n",[129,93602,93603],{"class":131,"line":1194},[129,93604,93605],{"class":139},"np.cumprod(b)\n",[129,93607,93608],{"class":131,"line":1209},[129,93609,93565],{"class":198},[129,93611,93612],{"class":131,"line":1215},[129,93613,93614],{"class":198},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[71,93616,93618],{"id":93617},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[120,93620,93622],{"className":30379,"code":93621,"language":30381,"meta":42,"style":42},"#删除数组中的重复数据，并对数据进行排序\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",[126,93623,93624,93629,93677,93682,93686],{"__ignoreMap":42},[129,93625,93626],{"class":131,"line":132},[129,93627,93628],{"class":198},"#删除数组中的重复数据，并对数据进行排序\n",[129,93630,93631,93633,93635,93637,93639,93641,93643,93645,93647,93649,93651,93653,93655,93657,93659,93661,93663,93665,93667,93669,93671,93673,93675],{"class":131,"line":51},[129,93632,20],{"class":139},[129,93634,185],{"class":135},[129,93636,93025],{"class":139},[129,93638,357],{"class":188},[129,93640,517],{"class":139},[129,93642,217],{"class":188},[129,93644,517],{"class":139},[129,93646,211],{"class":188},[129,93648,517],{"class":139},[129,93650,637],{"class":188},[129,93652,517],{"class":139},[129,93654,211],{"class":188},[129,93656,517],{"class":139},[129,93658,585],{"class":188},[129,93660,517],{"class":139},[129,93662,337],{"class":188},[129,93664,517],{"class":139},[129,93666,331],{"class":188},[129,93668,517],{"class":139},[129,93670,914],{"class":188},[129,93672,517],{"class":139},[129,93674,432],{"class":188},[129,93676,4671],{"class":139},[129,93678,93679],{"class":131,"line":1194},[129,93680,93681],{"class":139},"np.unique(a)\n",[129,93683,93684],{"class":131,"line":1209},[129,93685,93565],{"class":198},[129,93687,93688],{"class":131,"line":1215},[129,93689,93690],{"class":198},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93692,93693],{},"升序形式排序",[71,93695,93697],{"id":93696},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[120,93699,93701],{"className":30379,"code":93700,"language":30381,"meta":42,"style":42},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[126,93702,93703,93751,93756],{"__ignoreMap":42},[129,93704,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723,93725,93727,93729,93731,93733,93735,93737,93739,93741,93743,93745,93747,93749],{"class":131,"line":132},[129,93706,20],{"class":139},[129,93708,185],{"class":135},[129,93710,93025],{"class":139},[129,93712,357],{"class":188},[129,93714,517],{"class":139},[129,93716,217],{"class":188},[129,93718,517],{"class":139},[129,93720,211],{"class":188},[129,93722,517],{"class":139},[129,93724,637],{"class":188},[129,93726,517],{"class":139},[129,93728,211],{"class":188},[129,93730,517],{"class":139},[129,93732,585],{"class":188},[129,93734,517],{"class":139},[129,93736,337],{"class":188},[129,93738,517],{"class":139},[129,93740,331],{"class":188},[129,93742,517],{"class":139},[129,93744,914],{"class":188},[129,93746,517],{"class":139},[129,93748,432],{"class":188},[129,93750,4671],{"class":139},[129,93752,93753],{"class":131,"line":51},[129,93754,93755],{"class":198},"#返回数组中非零元素的索引\n",[129,93757,93758],{"class":131,"line":1194},[129,93759,93760],{"class":139},"np.nonzero(a)\n",[71,93762,93764],{"id":93763},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[120,93766,93768],{"className":30379,"code":93767,"language":30381,"meta":42,"style":42},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[126,93769,93770,93818,93823],{"__ignoreMap":42},[129,93771,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796,93798,93800,93802,93804,93806,93808,93810,93812,93814,93816],{"class":131,"line":132},[129,93773,20],{"class":139},[129,93775,185],{"class":135},[129,93777,93025],{"class":139},[129,93779,357],{"class":188},[129,93781,517],{"class":139},[129,93783,217],{"class":188},[129,93785,517],{"class":139},[129,93787,211],{"class":188},[129,93789,517],{"class":139},[129,93791,637],{"class":188},[129,93793,517],{"class":139},[129,93795,211],{"class":188},[129,93797,517],{"class":139},[129,93799,585],{"class":188},[129,93801,517],{"class":139},[129,93803,337],{"class":188},[129,93805,517],{"class":139},[129,93807,331],{"class":188},[129,93809,517],{"class":139},[129,93811,914],{"class":188},[129,93813,517],{"class":139},[129,93815,432],{"class":188},[129,93817,4671],{"class":139},[129,93819,93820],{"class":131,"line":51},[129,93821,93822],{"class":198},"#计算一组数中最大值与最小值的差，可指定轴\n",[129,93824,93825],{"class":131,"line":1194},[129,93826,93827],{"class":139},"np.ptp(a)\n",[5141,93829,93830],{},"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":42,"searchDepth":51,"depth":51,"links":93832},[93833,93834,93835,93836,93837,93838,93839,93840,93841,93842,93843],{"id":93095,"depth":51,"text":93096},{"id":93138,"depth":51,"text":93139},{"id":93246,"depth":51,"text":93247},{"id":93340,"depth":51,"text":93341},{"id":93380,"depth":51,"text":93381},{"id":93453,"depth":51,"text":93454},{"id":93521,"depth":51,"text":93522},{"id":93573,"depth":51,"text":93574},{"id":93617,"depth":51,"text":93618},{"id":93696,"depth":51,"text":93697},{"id":93763,"depth":51,"text":93764},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93081,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93850,"title":93851,"body":93852,"description":53,"extension":54,"meta":94507,"navigation":56,"path":94508,"seo":94509,"stem":94510,"__hash__":94511},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93853,"toc":94495},[93854,93857,93861,93864,94080,94084,94087,94296,94300,94366,94371,94375,94378,94381,94419,94423,94426,94431,94435,94438,94441,94446,94450,94453,94457,94460,94463,94468,94472,94475,94478,94483,94487,94492],[10,93855,93851],{"id":93856},"_12其他常用函数",[71,93858,93860],{"id":93859},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93862,93863],{},"将数组的数据按照行列复制扩展",[120,93865,93867],{"className":30379,"code":93866,"language":30381,"meta":42,"style":42},"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",[126,93868,93869,93885,93894,93898,93903,93908,93921,93925,93930,93935,93940,93944,93949,93973,93985,93989,93993,93998,94003,94008,94013,94017,94030,94034,94038,94043,94048,94053,94058,94063,94067,94071,94076],{"__ignoreMap":42},[129,93870,93871,93873,93875,93877,93879,93881,93883],{"class":131,"line":132},[129,93872,20],{"class":139},[129,93874,185],{"class":135},[129,93876,93003],{"class":139},[129,93878,357],{"class":188},[129,93880,517],{"class":139},[129,93882,458],{"class":188},[129,93884,146],{"class":139},[129,93886,93887,93890,93892],{"class":131,"line":51},[129,93888,93889],{"class":139},"np.tile(a,",[129,93891,217],{"class":188},[129,93893,146],{"class":139},[129,93895,93896],{"class":131,"line":1194},[129,93897,93565],{"class":198},[129,93899,93900],{"class":131,"line":1209},[129,93901,93902],{"class":198},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[129,93904,93905],{"class":131,"line":1215},[129,93906,93907],{"class":198},"#行复制两次，列复制三次\n",[129,93909,93910,93913,93915,93917,93919],{"class":131,"line":1229},[129,93911,93912],{"class":139},"np.tile(a,(",[129,93914,217],{"class":188},[129,93916,517],{"class":139},[129,93918,211],{"class":188},[129,93920,30498],{"class":139},[129,93922,93923],{"class":131,"line":1235},[129,93924,93565],{"class":198},[129,93926,93927],{"class":131,"line":1326},[129,93928,93929],{"class":244},"'''\n",[129,93931,93932],{"class":131,"line":1332},[129,93933,93934],{"class":244},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[129,93936,93937],{"class":131,"line":1344},[129,93938,93939],{"class":244},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[129,93941,93942],{"class":131,"line":1626},[129,93943,93929],{"class":244},[129,93945,93946],{"class":131,"line":1631},[129,93947,93948],{"class":198},"#创建二维数组\n",[129,93950,93951,93953,93955,93957,93959,93961,93963,93965,93967,93969,93971],{"class":131,"line":1637},[129,93952,93307],{"class":139},[129,93954,185],{"class":135},[129,93956,93003],{"class":139},[129,93958,357],{"class":188},[129,93960,517],{"class":139},[129,93962,662],{"class":188},[129,93964,93008],{"class":139},[129,93966,432],{"class":188},[129,93968,517],{"class":139},[129,93970,211],{"class":188},[129,93972,146],{"class":139},[129,93974,93975,93978,93980,93982],{"class":131,"line":1642},[129,93976,93977],{"class":139},"np.tile(aa,",[129,93979,217],{"class":188},[129,93981,568],{"class":139},[129,93983,93984],{"class":198},"#一个数的时候就是行\n",[129,93986,93987],{"class":131,"line":1656},[129,93988,93565],{"class":198},[129,93990,93991],{"class":131,"line":1661},[129,93992,93929],{"class":244},[129,93994,93995],{"class":131,"line":1667},[129,93996,93997],{"class":244},"array([[ 1,  2,  3,  1,  2,  3],\n",[129,93999,94000],{"class":131,"line":1688},[129,94001,94002],{"class":244},"       [ 4,  5,  6,  4,  5,  6],\n",[129,94004,94005],{"class":131,"line":1693},[129,94006,94007],{"class":244},"       [ 7,  8,  9,  7,  8,  9],\n",[129,94009,94010],{"class":131,"line":1707},[129,94011,94012],{"class":244},"       [10, 11, 12, 10, 11, 12]])\n",[129,94014,94015],{"class":131,"line":1712},[129,94016,93929],{"class":244},[129,94018,94019,94022,94024,94026,94028],{"class":131,"line":1741},[129,94020,94021],{"class":139},"np.tile(aa,(",[129,94023,217],{"class":188},[129,94025,517],{"class":139},[129,94027,211],{"class":188},[129,94029,30498],{"class":139},[129,94031,94032],{"class":131,"line":1746},[129,94033,93565],{"class":198},[129,94035,94036],{"class":131,"line":1763},[129,94037,93929],{"class":244},[129,94039,94040],{"class":131,"line":1768},[129,94041,94042],{"class":244},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[129,94044,94045],{"class":131,"line":1773},[129,94046,94047],{"class":244},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[129,94049,94050],{"class":131,"line":1778},[129,94051,94052],{"class":244},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[129,94054,94055],{"class":131,"line":1792},[129,94056,94057],{"class":244},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[129,94059,94060],{"class":131,"line":1797},[129,94061,94062],{"class":244},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[129,94064,94065],{"class":131,"line":2591},[129,94066,94047],{"class":244},[129,94068,94069],{"class":131,"line":2605},[129,94070,94052],{"class":244},[129,94072,94073],{"class":131,"line":2613},[129,94074,94075],{"class":244},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[129,94077,94078],{"class":131,"line":2618},[129,94079,93929],{"class":244},[71,94081,94083],{"id":94082},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94085,94086],{},"repeat()将数组中的每个元素重复若干次",[120,94088,94090],{"className":30379,"code":94089,"language":30381,"meta":42,"style":42},"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",[126,94091,94092,94108,94117,94121,94126,94150,94155,94164,94168,94173,94177,94182,94198,94202,94206,94211,94216,94221,94225,94230,94234,94239,94244,94248,94264,94268,94272,94277,94282,94287,94292],{"__ignoreMap":42},[129,94093,94094,94096,94098,94100,94102,94104,94106],{"class":131,"line":132},[129,94095,20],{"class":139},[129,94097,185],{"class":135},[129,94099,93003],{"class":139},[129,94101,357],{"class":188},[129,94103,517],{"class":139},[129,94105,458],{"class":188},[129,94107,146],{"class":139},[129,94109,94110,94113,94115],{"class":131,"line":51},[129,94111,94112],{"class":139},"np.repeat(a,",[129,94114,211],{"class":188},[129,94116,146],{"class":139},[129,94118,94119],{"class":131,"line":1194},[129,94120,93565],{"class":198},[129,94122,94123],{"class":131,"line":1209},[129,94124,94125],{"class":198},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[129,94127,94128,94130,94132,94134,94136,94138,94140,94142,94144,94146,94148],{"class":131,"line":1215},[129,94129,93307],{"class":139},[129,94131,185],{"class":135},[129,94133,93003],{"class":139},[129,94135,357],{"class":188},[129,94137,517],{"class":139},[129,94139,662],{"class":188},[129,94141,93008],{"class":139},[129,94143,432],{"class":188},[129,94145,517],{"class":139},[129,94147,211],{"class":188},[129,94149,146],{"class":139},[129,94151,94152],{"class":131,"line":1229},[129,94153,94154],{"class":198},"#这个重复之后二维变成一维\n",[129,94156,94157,94160,94162],{"class":131,"line":1235},[129,94158,94159],{"class":139},"np.repeat(aa,",[129,94161,217],{"class":188},[129,94163,146],{"class":139},[129,94165,94166],{"class":131,"line":1326},[129,94167,93929],{"class":244},[129,94169,94170],{"class":131,"line":1332},[129,94171,94172],{"class":244},"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",[129,94174,94175],{"class":131,"line":1344},[129,94176,93929],{"class":244},[129,94178,94179],{"class":131,"line":1626},[129,94180,94181],{"class":198},"#指定axis\n",[129,94183,94184,94186,94188,94190,94192,94194,94196],{"class":131,"line":1631},[129,94185,94159],{"class":139},[129,94187,217],{"class":188},[129,94189,517],{"class":139},[129,94191,47515],{"class":5231},[129,94193,185],{"class":135},[129,94195,331],{"class":188},[129,94197,146],{"class":139},[129,94199,94200],{"class":131,"line":1637},[129,94201,93565],{"class":198},[129,94203,94204],{"class":131,"line":1642},[129,94205,93929],{"class":244},[129,94207,94208],{"class":131,"line":1656},[129,94209,94210],{"class":244},"array([[ 1,  2,  3],\n",[129,94212,94213],{"class":131,"line":1661},[129,94214,94215],{"class":244},"       [ 1,  2,  3],\n",[129,94217,94218],{"class":131,"line":1667},[129,94219,94220],{"class":244},"       [ 4,  5,  6],\n",[129,94222,94223],{"class":131,"line":1688},[129,94224,94220],{"class":244},[129,94226,94227],{"class":131,"line":1693},[129,94228,94229],{"class":244},"       [ 7,  8,  9],\n",[129,94231,94232],{"class":131,"line":1707},[129,94233,94229],{"class":244},[129,94235,94236],{"class":131,"line":1712},[129,94237,94238],{"class":244},"       [10, 11, 12],\n",[129,94240,94241],{"class":131,"line":1741},[129,94242,94243],{"class":244},"       [10, 11, 12]])\n",[129,94245,94246],{"class":131,"line":1746},[129,94247,93929],{"class":244},[129,94249,94250,94252,94254,94256,94258,94260,94262],{"class":131,"line":1763},[129,94251,94159],{"class":139},[129,94253,217],{"class":188},[129,94255,517],{"class":139},[129,94257,47515],{"class":5231},[129,94259,185],{"class":135},[129,94261,357],{"class":188},[129,94263,146],{"class":139},[129,94265,94266],{"class":131,"line":1768},[129,94267,93565],{"class":198},[129,94269,94270],{"class":131,"line":1773},[129,94271,93929],{"class":244},[129,94273,94274],{"class":131,"line":1778},[129,94275,94276],{"class":244},"array([[ 1,  1,  2,  2,  3,  3],\n",[129,94278,94279],{"class":131,"line":1792},[129,94280,94281],{"class":244},"       [ 4,  4,  5,  5,  6,  6],\n",[129,94283,94284],{"class":131,"line":1797},[129,94285,94286],{"class":244},"       [ 7,  7,  8,  8,  9,  9],\n",[129,94288,94289],{"class":131,"line":2591},[129,94290,94291],{"class":244},"       [10, 10, 11, 11, 12, 12]])\n",[129,94293,94294],{"class":131,"line":2605},[129,94295,93929],{"class":244},[71,94297,94299],{"id":94298},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[120,94301,94303],{"className":30379,"code":94302,"language":30381,"meta":42,"style":42},"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",[126,94304,94305,94321,94326,94338,94342,94347,94357,94361],{"__ignoreMap":42},[129,94306,94307,94309,94311,94313,94315,94317,94319],{"class":131,"line":132},[129,94308,20],{"class":139},[129,94310,185],{"class":135},[129,94312,93003],{"class":139},[129,94314,357],{"class":188},[129,94316,517],{"class":139},[129,94318,458],{"class":188},[129,94320,146],{"class":139},[129,94322,94323],{"class":131,"line":51},[129,94324,94325],{"class":198},"#array([，2，3，4])\n",[129,94327,94328,94331,94333,94335],{"class":131,"line":1194},[129,94329,94330],{"class":139},"np.roll(a,",[129,94332,217],{"class":188},[129,94334,568],{"class":139},[129,94336,94337],{"class":198},"#传正数向后调多少位，传负数向前调多少位\n",[129,94339,94340],{"class":131,"line":1209},[129,94341,93565],{"class":198},[129,94343,94344],{"class":131,"line":1215},[129,94345,94346],{"class":198},"#array([3, 4, 1, 2])\n",[129,94348,94349,94351,94353,94355],{"class":131,"line":1229},[129,94350,94330],{"class":139},[129,94352,671],{"class":135},[129,94354,357],{"class":188},[129,94356,146],{"class":139},[129,94358,94359],{"class":131,"line":1235},[129,94360,93565],{"class":198},[129,94362,94363],{"class":131,"line":1326},[129,94364,94365],{"class":198},"#array([2, 3, 4, 1])\n",[14,94367,94368],{},[40,94369],{"alt":42,"src":94370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[71,94372,94374],{"id":94373},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94376,94377],{},"resize()重新调整数组的大小",[14,94379,94380],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[120,94382,94384],{"className":30379,"code":94383,"language":30381,"meta":42,"style":42},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[126,94385,94386,94391,94404],{"__ignoreMap":42},[129,94387,94388],{"class":131,"line":132},[129,94389,94390],{"class":198},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[129,94392,94393,94396,94398,94400,94402],{"class":131,"line":51},[129,94394,94395],{"class":139},"np.resize(aa,(",[129,94397,217],{"class":188},[129,94399,517],{"class":139},[129,94401,483],{"class":188},[129,94403,30498],{"class":139},[129,94405,94406,94408,94410,94412,94414,94416],{"class":131,"line":1194},[129,94407,94395],{"class":139},[129,94409,217],{"class":188},[129,94411,517],{"class":139},[129,94413,559],{"class":188},[129,94415,82772],{"class":139},[129,94417,94418],{"class":198},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[71,94420,94422],{"id":94421},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94424,94425],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94427,94428],{},[40,94429],{"alt":42,"src":94430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[71,94432,94434],{"id":94433},"_126-保存加载文件","12.6 保存加载文件",[14,94436,94437],{},"savetxt():将数据保存到txt文件中",[14,94439,94440],{},"loadtxt():从文件加载数据",[14,94442,94443],{},[40,94444],{"alt":42,"src":94445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[71,94447,94449],{"id":94448},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94451,94452],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[71,94454,94456],{"id":94455},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94458,94459],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94461,94462],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94464,94465],{},[40,94466],{"alt":42,"src":94467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[71,94469,94471],{"id":94470},"_129-where语句","12.9 where语句",[14,94473,94474],{},"np.where(条件,x,y)",[14,94476,94477],{},"如果条件为True,对应值为x,否则对应值为y",[14,94479,94480],{},[40,94481],{"alt":42,"src":94482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[71,94484,94486],{"id":94485},"_1210-dot矩阵","12.10 dot()矩阵",[14,94488,94489],{},[40,94490],{"alt":42,"src":94491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5141,94493,94494],{},"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":42,"searchDepth":51,"depth":51,"links":94496},[94497,94498,94499,94500,94501,94502,94503,94504,94505,94506],{"id":93859,"depth":51,"text":93860},{"id":94082,"depth":51,"text":94083},{"id":94298,"depth":51,"text":94299},{"id":94373,"depth":51,"text":94374},{"id":94421,"depth":51,"text":94422},{"id":94433,"depth":51,"text":94434},{"id":94448,"depth":51,"text":94449},{"id":94455,"depth":51,"text":94456},{"id":94470,"depth":51,"text":94471},{"id":94485,"depth":51,"text":94486},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93851,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94513,"title":94514,"body":94515,"description":53,"extension":54,"meta":94868,"navigation":56,"path":94869,"seo":94870,"stem":94871,"__hash__":94872},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94516,"toc":94866},[94517,94520,94523,94526,94529,94532,94597,94599,94863],[10,94518,94514],{"id":94519},"_13数组排序",[14,94521,94522],{},"排序主要用到的方法是np.sort和np.argsort",[14,94524,94525],{},"其中np.sort()对数组直接排序",[14,94527,94528],{},"而np.argsort()是返回排序后的原始索引",[14,94530,94531],{},"①一维数组",[120,94533,94535],{"className":30379,"code":94534,"language":30381,"meta":42,"style":42},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[126,94536,94537,94541,94581,94589],{"__ignoreMap":42},[129,94538,94539],{"class":131,"line":132},[129,94540,93106],{"class":198},[129,94542,94543,94545,94547,94549,94551,94553,94555,94557,94559,94561,94563,94565,94567,94569,94571,94573,94575,94577,94579],{"class":131,"line":51},[129,94544,20],{"class":139},[129,94546,185],{"class":135},[129,94548,93025],{"class":139},[129,94550,211],{"class":188},[129,94552,517],{"class":139},[129,94554,637],{"class":188},[129,94556,517],{"class":139},[129,94558,534],{"class":188},[129,94560,517],{"class":139},[129,94562,914],{"class":188},[129,94564,517],{"class":139},[129,94566,418],{"class":188},[129,94568,517],{"class":139},[129,94570,1032],{"class":188},[129,94572,517],{"class":139},[129,94574,483],{"class":188},[129,94576,517],{"class":139},[129,94578,585],{"class":188},[129,94580,4671],{"class":139},[129,94582,94583,94586],{"class":131,"line":1194},[129,94584,94585],{"class":139},"np.sort(a)",[129,94587,94588],{"class":198},"#升序排序\n",[129,94590,94591,94594],{"class":131,"line":1209},[129,94592,94593],{"class":139},"np.argsort(a)",[129,94595,94596],{"class":198},"#按照元素大小来索引排序\n",[14,94598,93292],{},[120,94600,94602],{"className":30379,"code":94601,"language":30381,"meta":42,"style":42},"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",[126,94603,94604,94616,94642,94647,94651,94656,94661,94666,94671,94675,94683,94687,94692,94697,94702,94707,94711,94716,94729,94733,94738,94743,94748,94753,94757,94762,94774,94778,94782,94786,94790,94794,94798,94803,94818,94823,94832,94837,94841,94845,94850,94854,94859],{"__ignoreMap":42},[129,94605,94606,94609,94611,94613],{"class":131,"line":132},[129,94607,94608],{"class":139},"np.random.seed(",[129,94610,331],{"class":188},[129,94612,568],{"class":139},[129,94614,94615],{"class":198},"#保证每次值一样\n",[129,94617,94618,94620,94622,94624,94626,94628,94630,94632,94634,94636,94638,94640],{"class":131,"line":51},[129,94619,93307],{"class":139},[129,94621,185],{"class":135},[129,94623,93115],{"class":139},[129,94625,450],{"class":188},[129,94627,517],{"class":139},[129,94629,31497],{"class":5231},[129,94631,185],{"class":135},[129,94633,140],{"class":139},[129,94635,432],{"class":188},[129,94637,517],{"class":139},[129,94639,483],{"class":188},[129,94641,30498],{"class":139},[129,94643,94644],{"class":131,"line":1194},[129,94645,94646],{"class":198},"#原数组：\n",[129,94648,94649],{"class":131,"line":1209},[129,94650,93929],{"class":244},[129,94652,94653],{"class":131,"line":1215},[129,94654,94655],{"class":244},"array([[44, 47, 64, 67, 67,  9],\n",[129,94657,94658],{"class":131,"line":1229},[129,94659,94660],{"class":244},"       [83, 21, 36, 87, 70, 88],\n",[129,94662,94663],{"class":131,"line":1235},[129,94664,94665],{"class":244},"       [88, 12, 58, 65, 39, 87],\n",[129,94667,94668],{"class":131,"line":1326},[129,94669,94670],{"class":244},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[129,94672,94673],{"class":131,"line":1332},[129,94674,93929],{"class":244},[129,94676,94677,94680],{"class":131,"line":1344},[129,94678,94679],{"class":139},"np.sort(aa)",[129,94681,94682],{"class":198},"#每行进行了排序\n",[129,94684,94685],{"class":131,"line":1626},[129,94686,93929],{"class":244},[129,94688,94689],{"class":131,"line":1631},[129,94690,94691],{"class":244},"array([[ 9, 44, 47, 64, 67, 67],\n",[129,94693,94694],{"class":131,"line":1637},[129,94695,94696],{"class":244},"       [21, 36, 70, 83, 87, 88],\n",[129,94698,94699],{"class":131,"line":1642},[129,94700,94701],{"class":244},"       [12, 39, 58, 65, 87, 88],\n",[129,94703,94704],{"class":131,"line":1656},[129,94705,94706],{"class":244},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[129,94708,94709],{"class":131,"line":1661},[129,94710,93929],{"class":244},[129,94712,94713],{"class":131,"line":1667},[129,94714,94715],{"class":198},"#axis=0时\n",[129,94717,94718,94721,94723,94725,94727],{"class":131,"line":1688},[129,94719,94720],{"class":139},"np.sort(aa,",[129,94722,47515],{"class":5231},[129,94724,185],{"class":135},[129,94726,331],{"class":188},[129,94728,146],{"class":139},[129,94730,94731],{"class":131,"line":1693},[129,94732,93929],{"class":244},[129,94734,94735],{"class":131,"line":1707},[129,94736,94737],{"class":244},"array([[44, 12, 36, 37, 25,  9],\n",[129,94739,94740],{"class":131,"line":1712},[129,94741,94742],{"class":244},"       [46, 21, 58, 65, 39, 77],\n",[129,94744,94745],{"class":131,"line":1741},[129,94746,94747],{"class":244},"       [83, 47, 64, 67, 67, 87],\n",[129,94749,94750],{"class":131,"line":1746},[129,94751,94752],{"class":244},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[129,94754,94755],{"class":131,"line":1763},[129,94756,93929],{"class":244},[129,94758,94759],{"class":131,"line":1768},[129,94760,94761],{"class":198},"#axis=1时,为默认值\n",[129,94763,94764,94766,94768,94770,94772],{"class":131,"line":1773},[129,94765,94720],{"class":139},[129,94767,47515],{"class":5231},[129,94769,185],{"class":135},[129,94771,357],{"class":188},[129,94773,146],{"class":139},[129,94775,94776],{"class":131,"line":1778},[129,94777,93929],{"class":244},[129,94779,94780],{"class":131,"line":1792},[129,94781,94691],{"class":244},[129,94783,94784],{"class":131,"line":1797},[129,94785,94696],{"class":244},[129,94787,94788],{"class":131,"line":2591},[129,94789,94701],{"class":244},[129,94791,94792],{"class":131,"line":2605},[129,94793,94706],{"class":244},[129,94795,94796],{"class":131,"line":2613},[129,94797,93929],{"class":244},[129,94799,94800],{"class":131,"line":2618},[129,94801,94802],{"class":198},"#按最后一列排序\n",[129,94804,94805,94807,94809,94812,94814,94816],{"class":131,"line":2624},[129,94806,402],{"class":139},[129,94808,185],{"class":135},[129,94810,94811],{"class":139},"aa[:,",[129,94813,671],{"class":135},[129,94815,357],{"class":188},[129,94817,33247],{"class":139},[129,94819,94820],{"class":131,"line":2630},[129,94821,94822],{"class":198},"#获取最后一列排好序的索引\n",[129,94824,94825,94827,94829],{"class":131,"line":2635},[129,94826,74059],{"class":139},[129,94828,185],{"class":135},[129,94830,94831],{"class":139},"np.argsort(b)\n",[129,94833,94834],{"class":131,"line":7963},[129,94835,94836],{"class":139},"aa[index]\n",[129,94838,94839],{"class":131,"line":7987},[129,94840,93929],{"class":244},[129,94842,94843],{"class":131,"line":7992},[129,94844,94655],{"class":244},[129,94846,94847],{"class":131,"line":7998},[129,94848,94849],{"class":244},"       [46, 88, 81, 37, 25, 77],\n",[129,94851,94852],{"class":131,"line":8025},[129,94853,94665],{"class":244},[129,94855,94856],{"class":131,"line":8030},[129,94857,94858],{"class":244},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[129,94860,94861],{"class":131,"line":8036},[129,94862,93929],{"class":244},[5141,94864,94865],{},"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":42,"searchDepth":51,"depth":51,"links":94867},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94514,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94874,"title":94875,"body":94876,"description":53,"extension":54,"meta":94906,"navigation":56,"path":94907,"seo":94908,"stem":94909,"__hash__":94910},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94877,"toc":94904},[94878,94881,94884,94887,94890,94893,94896,94899],[10,94879,94875],{"id":94880},"_14广播机制",[14,94882,94883],{},"广播的规则：",[14,94885,94886],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94888,94889],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94891,94892],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94894,94895],{},"3.如果没有维度形状为1，则会引发异常",[14,94897,94898],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94900,94901],{},[40,94902],{"alt":42,"src":94903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":42,"searchDepth":51,"depth":51,"links":94905},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94875,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94912,"title":94913,"body":94914,"description":53,"extension":54,"meta":95012,"navigation":56,"path":95013,"seo":95014,"stem":95015,"__hash__":95016},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94915,"toc":95010},[94916,94919,94922,95007],[10,94917,94913],{"id":94918},"_15比较掩码",[14,94920,94921],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[120,94923,94925],{"className":30379,"code":94924,"language":30381,"meta":42,"style":42},"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",[126,94926,94927,94973,94984,94998,95002],{"__ignoreMap":42},[129,94928,94929,94931,94933,94936,94938,94940,94942,94944,94946,94948,94950,94952,94954,94956,94958,94960,94962,94964,94966,94968,94970],{"class":131,"line":132},[129,94930,20],{"class":139},[129,94932,185],{"class":135},[129,94934,94935],{"class":139},"np.array([[",[129,94937,357],{"class":188},[129,94939,517],{"class":139},[129,94941,217],{"class":188},[129,94943,517],{"class":139},[129,94945,211],{"class":188},[129,94947,48031],{"class":139},[129,94949,611],{"class":188},[129,94951,517],{"class":139},[129,94953,637],{"class":188},[129,94955,517],{"class":139},[129,94957,662],{"class":188},[129,94959,48031],{"class":139},[129,94961,864],{"class":188},[129,94963,517],{"class":139},[129,94965,889],{"class":188},[129,94967,517],{"class":139},[129,94969,914],{"class":188},[129,94971,94972],{"class":139},"]])\n",[129,94974,94975,94977,94979,94981],{"class":131,"line":51},[129,94976,20],{"class":139},[129,94978,1049],{"class":135},[129,94980,839],{"class":188},[129,94982,94983],{"class":198},"#结果是一个由True,False组成的数组\n",[129,94985,94986,94989,94991,94993,94995],{"class":131,"line":1194},[129,94987,94988],{"class":139},"a[a",[129,94990,1049],{"class":135},[129,94992,839],{"class":188},[129,94994,1079],{"class":139},[129,94996,94997],{"class":198},"#小于20的元素会存到这个数组中\n",[129,94999,95000],{"class":131,"line":1209},[129,95001,93565],{"class":198},[129,95003,95004],{"class":131,"line":1215},[129,95005,95006],{"class":198},"#array([ 1,  2,  3, 11, 12, 13])\n",[5141,95008,95009],{},"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":42,"searchDepth":51,"depth":51,"links":95011},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94913,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95018,"title":95019,"body":95020,"description":53,"extension":54,"meta":95112,"navigation":56,"path":95113,"seo":95114,"stem":95115,"__hash__":95116},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95021,"toc":95110},[95022,95025,95028,95031,95034,95037,95102,95107],[10,95023,95019],{"id":95024},"_16魔法命令time",[14,95026,95027],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95029,95030],{},"%:行模式",[14,95032,95033],{},"%%:单元格模式",[14,95035,95036],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[120,95038,95040],{"className":30379,"code":95039,"language":30381,"meta":42,"style":42},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[126,95041,95042,95047,95054,95059,95068,95081,95085,95093],{"__ignoreMap":42},[129,95043,95044],{"class":131,"line":132},[129,95045,95046],{"class":198},"#程序执行时间\n",[129,95048,95049,95051],{"class":131,"line":51},[129,95050,30393],{"class":135},[129,95052,95053],{"class":139}," time \n",[129,95055,95056],{"class":131,"line":1194},[129,95057,95058],{"class":198},"#获取时间\n",[129,95060,95061,95064,95066],{"class":131,"line":1209},[129,95062,95063],{"class":139},"start",[129,95065,185],{"class":135},[129,95067,32419],{"class":139},[129,95069,95070,95073,95076,95078],{"class":131,"line":1215},[129,95071,95072],{"class":139},"time.sleep(",[129,95074,95075],{"class":188},"0.4",[129,95077,568],{"class":139},[129,95079,95080],{"class":198},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[129,95082,95083],{"class":131,"line":1229},[129,95084,95058],{"class":198},[129,95086,95087,95089,95091],{"class":131,"line":1235},[129,95088,45802],{"class":139},[129,95090,185],{"class":135},[129,95092,32419],{"class":139},[129,95094,95095,95097,95099],{"class":131,"line":1326},[129,95096,45802],{"class":139},[129,95098,671],{"class":135},[129,95100,95101],{"class":139},"start\n",[14,95103,95104],{},[40,95105],{"alt":42,"src":95106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5141,95108,95109],{},"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":42,"searchDepth":51,"depth":51,"links":95111},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95019,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95118,"title":95119,"body":95120,"description":53,"extension":54,"meta":95155,"navigation":56,"path":95156,"seo":95157,"stem":95158,"__hash__":95159},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95121,"toc":95153},[95122,95125,95128,95131,95134,95137,95140,95143,95148],[10,95123,95119],{"id":95124},"_17魔法命令timeit",[14,95126,95127],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95129,95130],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95132,95133],{},"单元格模式：",[14,95135,95136],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95138,95139],{},"初始化语句执行次数由轮数来决定",[14,95141,95142],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95144,95145],{},[40,95146],{"alt":42,"src":95147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95149,95150],{},[40,95151],{"alt":42,"src":95152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":42,"searchDepth":51,"depth":51,"links":95154},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95119,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95161,"title":95162,"body":95163,"description":53,"extension":54,"meta":95181,"navigation":56,"path":95182,"seo":95183,"stem":95184,"__hash__":95185},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95164,"toc":95179},[95165,95168,95171,95174],[10,95166,95162],{"id":95167},"_18魔法命令writefile和run",[14,95169,95170],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95172,95173],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95175,95176],{},[40,95177],{"alt":42,"src":95178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":42,"searchDepth":51,"depth":51,"links":95180},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95162,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95187,"title":95188,"body":95189,"description":53,"extension":54,"meta":95242,"navigation":56,"path":95243,"seo":95244,"stem":95245,"__hash__":95246},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95190,"toc":95240},[95191,95194,95197,95199,95202,95205,95210,95213,95216,95219,95222,95225,95228,95231,95234,95237],[10,95192,95188],{"id":95193},"_19魔法命令memit",[14,95195,95196],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95198,24600],{},[14,95200,95201],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95203,95204],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95206,95207],{},[40,95208],{"alt":42,"src":95209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95211,95212],{},"补充：",[14,95214,95215],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95217,95218],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95220,95221],{},"解决方法：",[14,95223,95224],{},"1.cmd",[14,95226,95227],{},"2.依次输入以下代码：",[14,95229,95230],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95232,95233],{},"pip install --upgrade ipython",[14,95235,95236],{},"#升级 memory_profiler 和 setuptools",[14,95238,95239],{},"pip install --upgrade memory_profiler setuptools",{"title":42,"searchDepth":51,"depth":51,"links":95241},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95188,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95248,"title":95249,"body":95250,"description":53,"extension":54,"meta":96896,"navigation":56,"path":96897,"seo":96898,"stem":96899,"__hash__":96900},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95251,"toc":96866},[95252,95255,95259,95263,95324,95327,95332,95336,95341,95346,95351,95356,95359,95364,95368,95372,95405,95408,95411,95414,95466,95469,95505,95508,95550,95554,95575,95577,95614,95616,95621,95623,95628,95632,95635,95663,95667,95671,95724,95728,95820,95824,95828,95831,95836,95840,95865,95870,95874,95877,95880,95883,95886,95889,95892,95895,95907,95911,95915,95918,95950,95953,95976,95979,96005,96008,96034,96037,96071,96074,96136,96140,96143,96147,96150,96176,96179,96182,96187,96190,96259,96261,96266,96327,96330,96341,96347,96352,96356,96359,96372,96376,96391,96393,96416,96418,96444,96447,96450,96453,96501,96503,96508,96512,96516,96543,96547,96574,96577,96582,96587,96677,96681,96739,96744,96747,96750,96792,96796,96852,96857,96860,96863],[10,95253,95249],{"id":95254},"_2创建数组",[71,95256,95258],{"id":95257},"_21-array函数创建数组","2.1 array()函数创建数组",[100,95260,95262],{"id":95261},"_221-函数语句","2.2.1 函数语句",[120,95264,95266],{"className":30379,"code":95265,"language":30381,"meta":42,"style":42},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[126,95267,95268],{"__ignoreMap":42},[129,95269,95270,95273,95276,95278,95280,95282,95284,95286,95289,95291,95294,95296,95299,95301,95303,95305,95308,95310,95313,95315,95318,95320,95322],{"class":131,"line":132},[129,95271,95272],{"class":139},"numpy.array(",[129,95274,95275],{"class":188},"object",[129,95277,12450],{"class":139},[129,95279,93501],{"class":5231},[129,95281,13579],{"class":135},[129,95283,38934],{"class":188},[129,95285,12450],{"class":139},[129,95287,95288],{"class":5231},"copy",[129,95290,13579],{"class":135},[129,95292,95293],{"class":188}," True",[129,95295,12450],{"class":139},[129,95297,95298],{"class":5231},"order",[129,95300,13579],{"class":135},[129,95302,38934],{"class":188},[129,95304,12450],{"class":139},[129,95306,95307],{"class":5231},"subok",[129,95309,13579],{"class":135},[129,95311,95312],{"class":188}," False",[129,95314,12450],{"class":139},[129,95316,95317],{"class":5231},"ndmin",[129,95319,13579],{"class":135},[129,95321,4107],{"class":188},[129,95323,146],{"class":139},[14,95325,95326],{},"参数：",[14,95328,95329],{},[40,95330],{"alt":42,"src":95331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[100,95333,95335],{"id":95334},"_222-实例","2.2.2 实例",[14,95337,95338],{},[40,95339],{"alt":42,"src":95340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95342,95343],{},[40,95344],{"alt":42,"src":95345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95347,95348],{},[40,95349],{"alt":42,"src":95350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95352,95353],{},[40,95354],{"alt":42,"src":95355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95357,95358],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95360,95361],{},[40,95362],{"alt":42,"src":95363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[71,95365,95367],{"id":95366},"_22-随机数创建数组","2.2 随机数创建数组",[100,95369,95371],{"id":95370},"_221-random语句","2.2.1 random语句",[120,95373,95375],{"className":30379,"code":95374,"language":30381,"meta":42,"style":42},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[126,95376,95377,95382,95387,95395,95400],{"__ignoreMap":42},[129,95378,95379],{"class":131,"line":132},[129,95380,95381],{"class":198},"#random.random()\n",[129,95383,95384],{"class":131,"line":51},[129,95385,95386],{"class":198},"#确定随机种子,就是每次运行结果是相同的\n",[129,95388,95389,95391,95393],{"class":131,"line":1194},[129,95390,94608],{"class":139},[129,95392,331],{"class":188},[129,95394,146],{"class":139},[129,95396,95397],{"class":131,"line":1209},[129,95398,95399],{"class":139},"np.random.random()\n",[129,95401,95402],{"class":131,"line":1215},[129,95403,95404],{"class":198},"#生成一个随机的数目\n",[14,95406,95407],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95409,95410],{},"可以指定数组形状 size",[14,95412,95413],{},"①生成一维数组",[120,95415,95417],{"className":30379,"code":95416,"language":30381,"meta":42,"style":42},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[126,95418,95419,95424,95437,95442,95458],{"__ignoreMap":42},[129,95420,95421],{"class":131,"line":132},[129,95422,95423],{"class":198},"#random.random(size())\n",[129,95425,95426,95429,95431,95433,95435],{"class":131,"line":51},[129,95427,95428],{"class":139},"np.random.random(",[129,95430,31497],{"class":5231},[129,95432,185],{"class":135},[129,95434,458],{"class":188},[129,95436,146],{"class":139},[129,95438,95439],{"class":131,"line":1194},[129,95440,95441],{"class":198},"#生成一位的五个元素\n",[129,95443,95444,95446,95448,95450,95452,95454,95456],{"class":131,"line":1209},[129,95445,20],{"class":139},[129,95447,185],{"class":135},[129,95449,95428],{"class":139},[129,95451,31497],{"class":5231},[129,95453,185],{"class":135},[129,95455,432],{"class":188},[129,95457,146],{"class":139},[129,95459,95460,95463],{"class":131,"line":1215},[129,95461,95462],{"class":139},"a.shape ",[129,95464,95465],{"class":198},"#输出数组形状\n",[14,95467,95468],{},"②生成二维数组",[120,95470,95472],{"className":30379,"code":95471,"language":30381,"meta":42,"style":42},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[126,95473,95474,95478,95500],{"__ignoreMap":42},[129,95475,95476],{"class":131,"line":132},[129,95477,93302],{"class":198},[129,95479,95480,95482,95484,95486,95488,95490,95492,95494,95496,95498],{"class":131,"line":51},[129,95481,93307],{"class":139},[129,95483,185],{"class":135},[129,95485,95428],{"class":139},[129,95487,31497],{"class":5231},[129,95489,185],{"class":135},[129,95491,140],{"class":139},[129,95493,432],{"class":188},[129,95495,517],{"class":139},[129,95497,458],{"class":188},[129,95499,30498],{"class":139},[129,95501,95502],{"class":131,"line":1194},[129,95503,95504],{"class":198},"#生成四行五列的数组\n",[14,95506,95507],{},"③生成三维数组",[120,95509,95511],{"className":30379,"code":95510,"language":30381,"meta":42,"style":42},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[126,95512,95513,95518,95545],{"__ignoreMap":42},[129,95514,95515],{"class":131,"line":132},[129,95516,95517],{"class":198},"#三维数组\n",[129,95519,95520,95523,95525,95527,95529,95531,95533,95535,95537,95539,95541,95543],{"class":131,"line":51},[129,95521,95522],{"class":139},"aaa",[129,95524,185],{"class":135},[129,95526,95428],{"class":139},[129,95528,31497],{"class":5231},[129,95530,185],{"class":135},[129,95532,140],{"class":139},[129,95534,217],{"class":188},[129,95536,517],{"class":139},[129,95538,211],{"class":188},[129,95540,517],{"class":139},[129,95542,432],{"class":188},[129,95544,30498],{"class":139},[129,95546,95547],{"class":131,"line":1194},[129,95548,95549],{"class":139},"aaa.shape\n",[100,95551,95553],{"id":95552},"_222-randint语句","2.2.2 randint语句",[120,95555,95557],{"className":30379,"code":95556,"language":30381,"meta":42,"style":42},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[126,95558,95559,95564],{"__ignoreMap":42},[129,95560,95561],{"class":131,"line":132},[129,95562,95563],{"class":198},"#生成随机的整数 random.randint(low,high,size)\n",[129,95565,95566,95568,95570,95572],{"class":131,"line":51},[129,95567,93115],{"class":139},[129,95569,458],{"class":188},[129,95571,13729],{"class":139},[129,95573,95574],{"class":198},"#0~5中的随机一个数\n",[14,95576,95413],{},[120,95578,95580],{"className":30379,"code":95579,"language":30381,"meta":42,"style":42},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[126,95581,95582,95587,95609],{"__ignoreMap":42},[129,95583,95584],{"class":131,"line":132},[129,95585,95586],{"class":198},"#一维\n",[129,95588,95589,95591,95593,95595,95597,95599,95601,95603,95605,95607],{"class":131,"line":51},[129,95590,93115],{"class":139},[129,95592,357],{"class":188},[129,95594,517],{"class":139},[129,95596,611],{"class":188},[129,95598,517],{"class":139},[129,95600,31497],{"class":5231},[129,95602,185],{"class":135},[129,95604,140],{"class":139},[129,95606,585],{"class":188},[129,95608,30498],{"class":139},[129,95610,95611],{"class":131,"line":1194},[129,95612,95613],{"class":198},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95615,95468],{},[14,95617,95618],{},[40,95619],{"alt":42,"src":95620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95622,95507],{},[14,95624,95625],{},[40,95626],{"alt":42,"src":95627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[100,95629,95631],{"id":95630},"_222-rand语句","2.2.2 rand语句",[14,95633,95634],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[120,95636,95638],{"className":30379,"code":95637,"language":30381,"meta":42,"style":42},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[126,95639,95640,95653,95658],{"__ignoreMap":42},[129,95641,95642,95645,95647,95649,95651],{"class":131,"line":132},[129,95643,95644],{"class":139},"np.random.rand(",[129,95646,450],{"class":188},[129,95648,517],{"class":139},[129,95650,585],{"class":188},[129,95652,146],{"class":139},[129,95654,95655],{"class":131,"line":51},[129,95656,95657],{"class":198},"#第一个参数100：行数，表示有100个样本\n",[129,95659,95660],{"class":131,"line":1194},[129,95661,95662],{"class":198},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[71,95664,95666],{"id":95665},"_23-arange创建数组","2.3 arange()创建数组",[100,95668,95670],{"id":95669},"_231-函数语句","2.3.1 函数语句",[120,95672,95674],{"className":30379,"code":95673,"language":30381,"meta":42,"style":42},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[126,95675,95676,95690,95695,95700,95705,95710,95715,95720],{"__ignoreMap":42},[129,95677,95678,95681,95683,95685,95688],{"class":131,"line":132},[129,95679,95680],{"class":139},"numpy.arange([start,] stop[, step], ",[129,95682,93501],{"class":5231},[129,95684,185],{"class":135},[129,95686,95687],{"class":188},"None",[129,95689,146],{"class":139},[129,95691,95692],{"class":131,"line":51},[129,95693,95694],{"class":198},"#参数\n",[129,95696,95697],{"class":131,"line":1194},[129,95698,95699],{"class":244},"\"\"\"\n",[129,95701,95702],{"class":131,"line":1209},[129,95703,95704],{"class":244},"start:起始值，可选，默认从 0 开始。\n",[129,95706,95707],{"class":131,"line":1215},[129,95708,95709],{"class":244},"stop:结束值（不包含该值）。\n",[129,95711,95712],{"class":131,"line":1229},[129,95713,95714],{"class":244},"step:步长，可选，默认是 1。可以为浮点数。\n",[129,95716,95717],{"class":131,"line":1235},[129,95718,95719],{"class":244},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[129,95721,95722],{"class":131,"line":1326},[129,95723,95699],{"class":244},[100,95725,95727],{"id":95726},"_232-实例","2.3.2 实例",[120,95729,95731],{"className":30379,"code":95730,"language":30381,"meta":42,"style":42},"#创建一维数组\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",[126,95732,95733,95737,95761,95766,95771,95775,95798,95802,95806,95811,95816],{"__ignoreMap":42},[129,95734,95735],{"class":131,"line":132},[129,95736,93106],{"class":198},[129,95738,95739,95741,95743,95745,95747,95749,95751,95753,95755,95757,95759],{"class":131,"line":51},[129,95740,93003],{"class":139},[129,95742,357],{"class":188},[129,95744,517],{"class":139},[129,95746,864],{"class":188},[129,95748,517],{"class":139},[129,95750,357],{"class":188},[129,95752,517],{"class":139},[129,95754,93501],{"class":5231},[129,95756,185],{"class":135},[129,95758,143],{"class":188},[129,95760,146],{"class":139},[129,95762,95763],{"class":131,"line":1194},[129,95764,95765],{"class":198},"#输出结果：\n",[129,95767,95768],{"class":131,"line":1209},[129,95769,95770],{"class":198},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[129,95772,95773],{"class":131,"line":1215},[129,95774,93948],{"class":198},[129,95776,95777,95780,95782,95784,95786,95789,95791,95793,95795],{"class":131,"line":1229},[129,95778,95779],{"class":139},"np.array([np.arange(",[129,95781,357],{"class":188},[129,95783,517],{"class":139},[129,95785,432],{"class":188},[129,95787,95788],{"class":139},"),np.arange(",[129,95790,432],{"class":188},[129,95792,517],{"class":139},[129,95794,508],{"class":188},[129,95796,95797],{"class":139},")])\n",[129,95799,95800],{"class":131,"line":1235},[129,95801,93565],{"class":198},[129,95803,95804],{"class":131,"line":1326},[129,95805,95699],{"class":244},[129,95807,95808],{"class":131,"line":1332},[129,95809,95810],{"class":244},"array([[1, 2, 3],\n",[129,95812,95813],{"class":131,"line":1344},[129,95814,95815],{"class":244},"       [4, 5, 6]])\n",[129,95817,95818],{"class":131,"line":1626},[129,95819,95699],{"class":244},[71,95821,95823],{"id":95822},"_24-生态分布","2.4 生态分布",[100,95825,95827],{"id":95826},"_241-标准正态分布","2.4.1 标准正态分布",[14,95829,95830],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95832,95833],{},[40,95834],{"alt":42,"src":95835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[100,95837,95839],{"id":95838},"_242-常规正态分布","2.4.2 常规正态分布",[120,95841,95843],{"className":30379,"code":95842,"language":30381,"meta":42,"style":42},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[126,95844,95845,95850,95855,95860],{"__ignoreMap":42},[129,95846,95847],{"class":131,"line":132},[129,95848,95849],{"class":139},"random.normal(loc,scale,size)也可以生成正态分布\n",[129,95851,95852],{"class":131,"line":51},[129,95853,95854],{"class":198},"#loc:期望\n",[129,95856,95857],{"class":131,"line":1194},[129,95858,95859],{"class":198},"#scale:方差\n",[129,95861,95862],{"class":131,"line":1209},[129,95863,95864],{"class":198},"#size:用于确定是几维的数列\n",[14,95866,95867],{},[40,95868],{"alt":42,"src":95869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[71,95871,95873],{"id":95872},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95875,95876],{},"ndim:秩，维度个数",[14,95878,95879],{},"size:数组元素的个数",[14,95881,95882],{},"shape:数组的形状",[14,95884,95885],{},"dtype:数组元素的类型",[14,95887,95888],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95890,95891],{},"他们都是属性，通过数组.属性的形式来确定",[14,95893,95894],{},"如果需要输出多个可以通过以下方式：",[120,95896,95898],{"className":30379,"code":95897,"language":30381,"meta":42,"style":42},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[126,95899,95900],{"__ignoreMap":42},[129,95901,95902,95904],{"class":131,"line":132},[129,95903,30416],{"class":188},[129,95905,95906],{"class":139},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[71,95908,95910],{"id":95909},"_26-其他方式创建数组","2.6 其他方式创建数组",[100,95912,95914],{"id":95913},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95916,95917],{},"①创建一维数组",[120,95919,95921],{"className":30379,"code":95920,"language":30381,"meta":42,"style":42},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[126,95922,95923,95932,95936,95941,95946],{"__ignoreMap":42},[129,95924,95925,95928,95930],{"class":131,"line":132},[129,95926,95927],{"class":139},"np.zeros(",[129,95929,585],{"class":188},[129,95931,146],{"class":139},[129,95933,95934],{"class":131,"line":51},[129,95935,95699],{"class":244},[129,95937,95938],{"class":131,"line":1194},[129,95939,95940],{"class":244},"输出结果：\n",[129,95942,95943],{"class":131,"line":1209},[129,95944,95945],{"class":244},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[129,95947,95948],{"class":131,"line":1215},[129,95949,95699],{"class":244},[14,95951,95952],{},"上方代码等价于：",[120,95954,95956],{"className":30379,"code":95955,"language":30381,"meta":42,"style":42},"np.zeros(shape=(10))#创建10个元素的0数组\n",[126,95957,95958],{"__ignoreMap":42},[129,95959,95960,95962,95965,95967,95969,95971,95973],{"class":131,"line":132},[129,95961,95927],{"class":139},[129,95963,95964],{"class":5231},"shape",[129,95966,185],{"class":135},[129,95968,140],{"class":139},[129,95970,585],{"class":188},[129,95972,82772],{"class":139},[129,95974,95975],{"class":198},"#创建10个元素的0数组\n",[14,95977,95978],{},"也可以指定类型",[120,95980,95982],{"className":30379,"code":95981,"language":30381,"meta":42,"style":42},"#指定类型\nnp.zeros(5,dtype=int)\n",[126,95983,95984,95989],{"__ignoreMap":42},[129,95985,95986],{"class":131,"line":132},[129,95987,95988],{"class":198},"#指定类型\n",[129,95990,95991,95993,95995,95997,95999,96001,96003],{"class":131,"line":51},[129,95992,95927],{"class":139},[129,95994,458],{"class":188},[129,95996,517],{"class":139},[129,95998,93501],{"class":5231},[129,96000,185],{"class":135},[129,96002,143],{"class":188},[129,96004,146],{"class":139},[14,96006,96007],{},"②创建二维数组",[120,96009,96011],{"className":30379,"code":96010,"language":30381,"meta":42,"style":42},"np.zeros((3,4),dtype=int)\n",[126,96012,96013],{"__ignoreMap":42},[129,96014,96015,96018,96020,96022,96024,96026,96028,96030,96032],{"class":131,"line":132},[129,96016,96017],{"class":139},"np.zeros((",[129,96019,211],{"class":188},[129,96021,517],{"class":139},[129,96023,432],{"class":188},[129,96025,42257],{"class":139},[129,96027,93501],{"class":5231},[129,96029,185],{"class":135},[129,96031,143],{"class":188},[129,96033,146],{"class":139},[14,96035,96036],{},"③创建三维数组",[120,96038,96040],{"className":30379,"code":96039,"language":30381,"meta":42,"style":42},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[126,96041,96042,96047],{"__ignoreMap":42},[129,96043,96044],{"class":131,"line":132},[129,96045,96046],{"class":198},"#创建三维数组\n",[129,96048,96049,96051,96053,96055,96057,96059,96061,96063,96065,96067,96069],{"class":131,"line":51},[129,96050,96017],{"class":139},[129,96052,211],{"class":188},[129,96054,517],{"class":139},[129,96056,432],{"class":188},[129,96058,517],{"class":139},[129,96060,458],{"class":188},[129,96062,42257],{"class":139},[129,96064,93501],{"class":5231},[129,96066,185],{"class":135},[129,96068,143],{"class":188},[129,96070,146],{"class":139},[14,96072,96073],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[120,96075,96077],{"className":30379,"code":96076,"language":30381,"meta":42,"style":42},"#使用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",[126,96078,96079,96084,96099,96104,96109,96131],{"__ignoreMap":42},[129,96080,96081],{"class":131,"line":132},[129,96082,96083],{"class":198},"#使用zeros_like将创建的一维数组变成全0的数组\n",[129,96085,96086,96088,96090,96092,96094,96096],{"class":131,"line":51},[129,96087,20],{"class":139},[129,96089,185],{"class":135},[129,96091,93003],{"class":139},[129,96093,432],{"class":188},[129,96095,568],{"class":139},[129,96097,96098],{"class":198},"#这个得到的结果：一维数组0，1，2，3\n",[129,96100,96101],{"class":131,"line":1194},[129,96102,96103],{"class":139},"np.zeros_like(a)\n",[129,96105,96106],{"class":131,"line":1209},[129,96107,96108],{"class":198},"#使用zeros_like将创建的二维数组变成全0的数组\n",[129,96110,96111,96113,96115,96117,96119,96121,96123,96125,96127,96129],{"class":131,"line":1215},[129,96112,93307],{"class":139},[129,96114,185],{"class":135},[129,96116,95428],{"class":139},[129,96118,31497],{"class":5231},[129,96120,185],{"class":135},[129,96122,140],{"class":139},[129,96124,432],{"class":188},[129,96126,517],{"class":139},[129,96128,458],{"class":188},[129,96130,30498],{"class":139},[129,96132,96133],{"class":131,"line":1229},[129,96134,96135],{"class":139},"np.zeros_like(aa)\n",[100,96137,96139],{"id":96138},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96141,96142],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[100,96144,96146],{"id":96145},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96148,96149],{},"①empty()用法",[120,96151,96153],{"className":30379,"code":96152,"language":30381,"meta":42,"style":42},"numpy.empty(shape,dtype=float,order='c')\n",[126,96154,96155],{"__ignoreMap":42},[129,96156,96157,96160,96162,96164,96166,96168,96170,96172,96174],{"class":131,"line":132},[129,96158,96159],{"class":139},"numpy.empty(shape,",[129,96161,93501],{"class":5231},[129,96163,185],{"class":135},[129,96165,179],{"class":188},[129,96167,517],{"class":139},[129,96169,95298],{"class":5231},[129,96171,185],{"class":135},[129,96173,76029],{"class":244},[129,96175,146],{"class":139},[14,96177,96178],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96180,96181],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96183,96184],{},[40,96185],{"alt":42,"src":96186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96188,96189],{},"②empty()用法",[120,96191,96193],{"className":30379,"code":96192,"language":30381,"meta":42,"style":42},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[126,96194,96195,96216,96228,96249,96254],{"__ignoreMap":42},[129,96196,96197,96199,96201,96204,96206,96208,96210,96212,96214],{"class":131,"line":132},[129,96198,984],{"class":139},[129,96200,185],{"class":135},[129,96202,96203],{"class":139},"np.empty(",[129,96205,585],{"class":188},[129,96207,517],{"class":139},[129,96209,93501],{"class":5231},[129,96211,185],{"class":135},[129,96213,143],{"class":188},[129,96215,146],{"class":139},[129,96217,96218,96220,96222,96224,96226],{"class":131,"line":51},[129,96219,959],{"class":139},[129,96221,185],{"class":135},[129,96223,93003],{"class":139},[129,96225,458],{"class":188},[129,96227,146],{"class":139},[129,96229,96230,96233,96235,96238,96240,96242,96245,96247],{"class":131,"line":1194},[129,96231,96232],{"class":139},"np.add(",[129,96234,217],{"class":188},[129,96236,96237],{"class":139},",x,",[129,96239,93055],{"class":5231},[129,96241,185],{"class":135},[129,96243,96244],{"class":139},"y[:",[129,96246,458],{"class":188},[129,96248,4671],{"class":139},[129,96250,96251],{"class":131,"line":1209},[129,96252,96253],{"class":198},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[129,96255,96256],{"class":131,"line":1215},[129,96257,96258],{"class":139},"y\n",[14,96260,11529],{},[14,96262,96263],{},[40,96264],{"alt":42,"src":96265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[120,96267,96269],{"className":30379,"code":96268,"language":30381,"meta":42,"style":42},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[126,96270,96271,96287,96307,96322],{"__ignoreMap":42},[129,96272,96273,96275,96277,96279,96281,96283,96285],{"class":131,"line":132},[129,96274,959],{"class":139},[129,96276,185],{"class":135},[129,96278,93003],{"class":139},[129,96280,357],{"class":188},[129,96282,517],{"class":139},[129,96284,483],{"class":188},[129,96286,146],{"class":139},[129,96288,96289,96291,96293,96295,96297,96299,96301,96303,96305],{"class":131,"line":51},[129,96290,984],{"class":139},[129,96292,185],{"class":135},[129,96294,96203],{"class":139},[129,96296,458],{"class":188},[129,96298,517],{"class":139},[129,96300,93501],{"class":5231},[129,96302,185],{"class":135},[129,96304,143],{"class":188},[129,96306,146],{"class":139},[129,96308,96309,96312,96314,96316,96318,96320],{"class":131,"line":1194},[129,96310,96311],{"class":139},"np.add(x,",[129,96313,217],{"class":188},[129,96315,517],{"class":139},[129,96317,93055],{"class":5231},[129,96319,185],{"class":135},[129,96321,93450],{"class":139},[129,96323,96324],{"class":131,"line":1209},[129,96325,96326],{"class":198},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96328,96329],{},"③empty_like()",[14,96331,96332],{},[289,96333,96334,96335,96340],{},"创建一个",[289,96336,96337],{},[289,96338,96339],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96342,96343,96346],{},[126,96344,96345],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96348,96349],{},[40,96350],{"alt":42,"src":96351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[100,96353,96355],{"id":96354},"_264-用法","2.6.4 ？？用法",[14,96357,96358],{},"当想查看一个函数的参数时，可以通过？？来实现",[120,96360,96362],{"className":30379,"code":96361,"language":30381,"meta":42,"style":42},"np.full??\n",[126,96363,96364],{"__ignoreMap":42},[129,96365,96366,96369],{"class":131,"line":132},[129,96367,96368],{"class":139},"np.full",[129,96370,96371],{"class":77404},"??\n",[100,96373,96375],{"id":96374},"_265-full创建数组","2.6.5 full()创建数组",[120,96377,96379],{"className":30379,"code":96378,"language":30381,"meta":42,"style":42},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[126,96380,96381,96386],{"__ignoreMap":42},[129,96382,96383],{"class":131,"line":132},[129,96384,96385],{"class":139},"full(shape,fill_value)\n",[129,96387,96388],{"class":131,"line":51},[129,96389,96390],{"class":139},"创建全为某个指定值的数组\n",[14,96392,94531],{},[120,96394,96396],{"className":30379,"code":96395,"language":30381,"meta":42,"style":42},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[126,96397,96398,96403],{"__ignoreMap":42},[129,96399,96400],{"class":131,"line":132},[129,96401,96402],{"class":198},"#创建一个一维数组,以20进行填充\n",[129,96404,96405,96408,96410,96412,96414],{"class":131,"line":51},[129,96406,96407],{"class":139},"np.full(",[129,96409,585],{"class":188},[129,96411,517],{"class":139},[129,96413,839],{"class":188},[129,96415,146],{"class":139},[14,96417,93292],{},[120,96419,96421],{"className":30379,"code":96420,"language":30381,"meta":42,"style":42},"#创建二维数组\nnp.full((3,5),11)\n",[126,96422,96423,96427],{"__ignoreMap":42},[129,96424,96425],{"class":131,"line":132},[129,96426,93948],{"class":198},[129,96428,96429,96432,96434,96436,96438,96440,96442],{"class":131,"line":51},[129,96430,96431],{"class":139},"np.full((",[129,96433,211],{"class":188},[129,96435,517],{"class":139},[129,96437,458],{"class":188},[129,96439,42257],{"class":139},[129,96441,611],{"class":188},[129,96443,146],{"class":139},[14,96445,96446],{},"③full_like用法",[14,96448,96449],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96451,96452],{},"这里是指定填充而已",[120,96454,96456],{"className":30379,"code":96455,"language":30381,"meta":42,"style":42},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[126,96457,96458,96463,96487,96492],{"__ignoreMap":42},[129,96459,96460],{"class":131,"line":132},[129,96461,96462],{"class":198},"#创建一个指定形状数组\n",[129,96464,96465,96467,96469,96471,96473,96475,96477,96479,96481,96483,96485],{"class":131,"line":51},[129,96466,20],{"class":139},[129,96468,185],{"class":135},[129,96470,93003],{"class":139},[129,96472,357],{"class":188},[129,96474,517],{"class":139},[129,96476,464],{"class":188},[129,96478,93008],{"class":139},[129,96480,432],{"class":188},[129,96482,517],{"class":139},[129,96484,559],{"class":188},[129,96486,146],{"class":139},[129,96488,96489],{"class":131,"line":1194},[129,96490,96491],{"class":198},"#进行指定填充\n",[129,96493,96494,96497,96499],{"class":131,"line":1209},[129,96495,96496],{"class":139},"np.full_like(a,",[129,96498,585],{"class":188},[129,96500,146],{"class":139},[14,96502,11529],{},[14,96504,96505],{},[40,96506],{"alt":42,"src":96507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[100,96509,96511],{"id":96510},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22013,96513,96515],{"id":96514},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[120,96517,96519],{"className":30379,"code":96518,"language":30381,"meta":42,"style":42},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[126,96520,96521,96538],{"__ignoreMap":42},[129,96522,96523,96526,96528,96530,96532,96534,96536],{"class":131,"line":132},[129,96524,96525],{"class":139},"np.eye(",[129,96527,432],{"class":188},[129,96529,517],{"class":139},[129,96531,93501],{"class":5231},[129,96533,185],{"class":135},[129,96535,143],{"class":188},[129,96537,146],{"class":139},[129,96539,96540],{"class":131,"line":51},[129,96541,96542],{"class":198},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22013,96544,96546],{"id":96545},"_2662-法2identity","2.6.6.2 法2：identity()",[120,96548,96550],{"className":30379,"code":96549,"language":30381,"meta":42,"style":42},"#identity()\nnp.identity(5,dtype=int)\n",[126,96551,96552,96557],{"__ignoreMap":42},[129,96553,96554],{"class":131,"line":132},[129,96555,96556],{"class":198},"#identity()\n",[129,96558,96559,96562,96564,96566,96568,96570,96572],{"class":131,"line":51},[129,96560,96561],{"class":139},"np.identity(",[129,96563,458],{"class":188},[129,96565,517],{"class":139},[129,96567,93501],{"class":5231},[129,96569,185],{"class":135},[129,96571,143],{"class":188},[129,96573,146],{"class":139},[14,96575,96576],{},"两个函数是有区别的",[14,96578,96579],{},[40,96580],{"alt":42,"src":96581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96583,96584],{},[40,96585],{"alt":42,"src":96586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[120,96588,96590],{"className":30379,"code":96589,"language":30381,"meta":42,"style":42},"# 创建一个 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",[126,96591,96592,96597,96609,96614,96619,96624,96629,96633,96638,96658,96662,96667,96672],{"__ignoreMap":42},[129,96593,96594],{"class":131,"line":132},[129,96595,96596],{"class":198},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[129,96598,96599,96601,96603,96605,96607],{"class":131,"line":51},[129,96600,96525],{"class":139},[129,96602,211],{"class":188},[129,96604,12450],{"class":139},[129,96606,432],{"class":188},[129,96608,146],{"class":139},[129,96610,96611],{"class":131,"line":1194},[129,96612,96613],{"class":198},"# 输出:\n",[129,96615,96616],{"class":131,"line":1209},[129,96617,96618],{"class":198},"# [[1. 0. 0. 0.]\n",[129,96620,96621],{"class":131,"line":1215},[129,96622,96623],{"class":198},"#  [0. 1. 0. 0.]\n",[129,96625,96626],{"class":131,"line":1229},[129,96627,96628],{"class":198},"#  [0. 0. 1. 0.]]\n",[129,96630,96631],{"class":131,"line":1235},[129,96632,2414],{"emptyLinePlaceholder":56},[129,96634,96635],{"class":131,"line":1326},[129,96636,96637],{"class":198},"# 对角线向上偏移1\n",[129,96639,96640,96642,96644,96646,96648,96650,96652,96654,96656],{"class":131,"line":1332},[129,96641,96525],{"class":139},[129,96643,211],{"class":188},[129,96645,12450],{"class":139},[129,96647,432],{"class":188},[129,96649,12450],{"class":139},[129,96651,632],{"class":5231},[129,96653,185],{"class":135},[129,96655,357],{"class":188},[129,96657,146],{"class":139},[129,96659,96660],{"class":131,"line":1344},[129,96661,96613],{"class":198},[129,96663,96664],{"class":131,"line":1626},[129,96665,96666],{"class":198},"# [[0. 1. 0. 0.]\n",[129,96668,96669],{"class":131,"line":1631},[129,96670,96671],{"class":198},"#  [0. 0. 1. 0.]\n",[129,96673,96674],{"class":131,"line":1637},[129,96675,96676],{"class":198},"#  [0. 0. 0. 1.]]\n",[100,96678,96680],{"id":96679},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[120,96682,96684],{"className":30379,"code":96683,"language":30381,"meta":42,"style":42},"#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",[126,96685,96686,96691,96695,96700,96705,96710,96715,96720,96725,96730,96735],{"__ignoreMap":42},[129,96687,96688],{"class":131,"line":132},[129,96689,96690],{"class":198},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[129,96692,96693],{"class":131,"line":51},[129,96694,95699],{"class":244},[129,96696,96697],{"class":131,"line":1194},[129,96698,96699],{"class":244},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[129,96701,96702],{"class":131,"line":1209},[129,96703,96704],{"class":244},"参数介绍：\n",[129,96706,96707],{"class":131,"line":1215},[129,96708,96709],{"class":244},"start：序列的起始值\n",[129,96711,96712],{"class":131,"line":1229},[129,96713,96714],{"class":244},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[129,96716,96717],{"class":131,"line":1235},[129,96718,96719],{"class":244},"num：要生长的等步长的样本数量，默认为50\n",[129,96721,96722],{"class":131,"line":1326},[129,96723,96724],{"class":244},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[129,96726,96727],{"class":131,"line":1332},[129,96728,96729],{"class":244},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[129,96731,96732],{"class":131,"line":1344},[129,96733,96734],{"class":244},"dtype：ndarry的数据类型\n",[129,96736,96737],{"class":131,"line":1626},[129,96738,95699],{"class":244},[14,96740,96741],{},[40,96742],{"alt":42,"src":96743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96745,96746],{},"这里num=是可以省略的",[14,96748,96749],{},"也就是下方两行代码结果是一模一样的",[120,96751,96753],{"className":30379,"code":96752,"language":30381,"meta":42,"style":42},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[126,96754,96755,96772],{"__ignoreMap":42},[129,96756,96757,96760,96762,96764,96766,96768,96770],{"class":131,"line":132},[129,96758,96759],{"class":139},"np.linspace(",[129,96761,357],{"class":188},[129,96763,517],{"class":139},[129,96765,458],{"class":188},[129,96767,517],{"class":139},[129,96769,458],{"class":188},[129,96771,146],{"class":139},[129,96773,96774,96776,96778,96780,96782,96784,96786,96788,96790],{"class":131,"line":51},[129,96775,96759],{"class":139},[129,96777,357],{"class":188},[129,96779,517],{"class":139},[129,96781,458],{"class":188},[129,96783,517],{"class":139},[129,96785,1679],{"class":5231},[129,96787,185],{"class":135},[129,96789,458],{"class":188},[129,96791,146],{"class":139},[100,96793,96795],{"id":96794},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[120,96797,96799],{"className":30379,"code":96798,"language":30381,"meta":42,"style":42},"#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",[126,96800,96801,96806,96810,96815,96820,96825,96830,96834,96839,96844,96848],{"__ignoreMap":42},[129,96802,96803],{"class":131,"line":132},[129,96804,96805],{"class":198},"#logspace函数用于创建一个等比数列，格式如下：\n",[129,96807,96808],{"class":131,"line":51},[129,96809,95699],{"class":244},[129,96811,96812],{"class":131,"line":1194},[129,96813,96814],{"class":244},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[129,96816,96817],{"class":131,"line":1209},[129,96818,96819],{"class":244},"参数为：\n",[129,96821,96822],{"class":131,"line":1215},[129,96823,96824],{"class":244},"start:序列的起始位置为：base**start\n",[129,96826,96827],{"class":131,"line":1229},[129,96828,96829],{"class":244},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[129,96831,96832],{"class":131,"line":1235},[129,96833,96719],{"class":244},[129,96835,96836],{"class":131,"line":1326},[129,96837,96838],{"class":244},"endpoint：是否包含 stop 这个值，默认是 True\n",[129,96840,96841],{"class":131,"line":1332},[129,96842,96843],{"class":244},"base：对数的底数，默认是 10（常见对数）\n",[129,96845,96846],{"class":131,"line":1344},[129,96847,96734],{"class":244},[129,96849,96850],{"class":131,"line":1626},[129,96851,95699],{"class":244},[14,96853,96854],{},[40,96855],{"alt":42,"src":96856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96858,96859],{},"logspace()函数中的num参数也是可以不写num=的",[14,96861,96862],{},"endpoint是不可以省略的",[5141,96864,96865],{},"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":42,"searchDepth":51,"depth":51,"links":96867},[96868,96872,96877,96881,96885,96886],{"id":95257,"depth":51,"text":95258,"children":96869},[96870,96871],{"id":95261,"depth":1194,"text":95262},{"id":95334,"depth":1194,"text":95335},{"id":95366,"depth":51,"text":95367,"children":96873},[96874,96875,96876],{"id":95370,"depth":1194,"text":95371},{"id":95552,"depth":1194,"text":95553},{"id":95630,"depth":1194,"text":95631},{"id":95665,"depth":51,"text":95666,"children":96878},[96879,96880],{"id":95669,"depth":1194,"text":95670},{"id":95726,"depth":1194,"text":95727},{"id":95822,"depth":51,"text":95823,"children":96882},[96883,96884],{"id":95826,"depth":1194,"text":95827},{"id":95838,"depth":1194,"text":95839},{"id":95872,"depth":51,"text":95873},{"id":95909,"depth":51,"text":95910,"children":96887},[96888,96889,96890,96891,96892,96893,96894,96895],{"id":95913,"depth":1194,"text":95914},{"id":96138,"depth":1194,"text":96139},{"id":96145,"depth":1194,"text":96146},{"id":96354,"depth":1194,"text":96355},{"id":96374,"depth":1194,"text":96375},{"id":96510,"depth":1194,"text":96511},{"id":96679,"depth":1194,"text":96680},{"id":96794,"depth":1194,"text":96795},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95249,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96902,"title":96903,"body":96904,"description":53,"extension":54,"meta":96997,"navigation":56,"path":96998,"seo":96999,"stem":97000,"__hash__":97001},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96905,"toc":96995},[96906,96909,96912,96915,96918,96921,96924,96927,96930,96933,96936,96939,96941,96944,96947,96952,96955,96958,96992],[10,96907,96903],{"id":96908},"_20魔法命令mprun",[14,96910,96911],{},"逐行分析数据内存的使用情况",[14,96913,96914],{},"语法格式：",[14,96916,96917],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96919,96920],{},"分析结果列如下：",[14,96922,96923],{},"Line行号",[14,96925,96926],{},"Mem usage内存使用大小",[14,96928,96929],{},"increment内存增量",[14,96931,96932],{},"Line content代码内容",[14,96934,96935],{},"补充说明：",[14,96937,96938],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96940,95204],{},[14,96942,96943],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,96945,96946],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,96948,96949],{},[40,96950],{"alt":42,"src":96951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,96953,96954],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,96956,96957],{},"这时候需要重新加载模块",[120,96959,96961],{"className":30379,"code":96960,"language":30381,"meta":42,"style":42},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[126,96962,96963,96968,96975,96980],{"__ignoreMap":42},[129,96964,96965],{"class":131,"line":132},[129,96966,96967],{"class":198},"#重新加载模块\n",[129,96969,96970,96972],{"class":131,"line":51},[129,96971,30393],{"class":135},[129,96973,96974],{"class":139}," importlib\n",[129,96976,96977],{"class":131,"line":1194},[129,96978,96979],{"class":139},"importlib.reload(mprun_test)\n",[129,96981,96982,96984,96987,96989],{"class":131,"line":1209},[129,96983,467],{"class":135},[129,96985,96986],{"class":139},"mprun ",[129,96988,671],{"class":135},[129,96990,96991],{"class":139},"f mprun_test.fun_test mprun_test.fun_test()\n",[5141,96993,96994],{},"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":42,"searchDepth":51,"depth":51,"links":96996},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96903,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97003,"title":97004,"body":97005,"description":53,"extension":54,"meta":97022,"navigation":56,"path":97023,"seo":97024,"stem":97025,"__hash__":97026},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97006,"toc":97020},[97007,97010,97015],[10,97008,97004],{"id":97009},"_3一维数组的索引和切片",[14,97011,97012],{},[40,97013],{"alt":42,"src":97014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97016,97017],{},[40,97018],{"alt":42,"src":97019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":42,"searchDepth":51,"depth":51,"links":97021},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97004,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97028,"title":97029,"body":97030,"description":53,"extension":54,"meta":97513,"navigation":56,"path":97514,"seo":97515,"stem":97516,"__hash__":97517},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97031,"toc":97511},[97032,97035,97038,97043,97076,97079,97117,97120,97154,97157,97262,97265,97302,97305,97406,97409,97460,97463,97505,97508],[10,97033,97029],{"id":97034},"_4二维数组的索引与切片",[14,97036,97037],{},"①获取指定单个元素",[14,97039,97040],{},[40,97041],{"alt":42,"src":97042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[120,97044,97046],{"className":30379,"code":97045,"language":30381,"meta":42,"style":42},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[126,97047,97048,97053,97058,97063],{"__ignoreMap":42},[129,97049,97050],{"class":131,"line":132},[129,97051,97052],{"class":198},"#获取元素9\n",[129,97054,97055],{"class":131,"line":51},[129,97056,97057],{"class":198},"#先获取所在行，再获取所在列\n",[129,97059,97060],{"class":131,"line":1194},[129,97061,97062],{"class":198},"#数组[行索引号，列索引号]\n",[129,97064,97065,97068,97070,97072,97074],{"class":131,"line":1209},[129,97066,97067],{"class":139},"a[",[129,97069,357],{"class":188},[129,97071,517],{"class":139},[129,97073,217],{"class":188},[129,97075,33247],{"class":139},[14,97077,97078],{},"②获取整行元素",[120,97080,97082],{"className":30379,"code":97081,"language":30381,"meta":42,"style":42},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[126,97083,97084,97089,97094,97102,97107],{"__ignoreMap":42},[129,97085,97086],{"class":131,"line":132},[129,97087,97088],{"class":198},"#获取整行 数组[行索引号]\n",[129,97090,97091],{"class":131,"line":51},[129,97092,97093],{"class":198},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[129,97095,97096,97098,97100],{"class":131,"line":1194},[129,97097,97067],{"class":139},[129,97099,217],{"class":188},[129,97101,33247],{"class":139},[129,97103,97104],{"class":131,"line":1209},[129,97105,97106],{"class":198},"#也可以负索引获取一行\n",[129,97108,97109,97111,97113,97115],{"class":131,"line":1215},[129,97110,97067],{"class":139},[129,97112,671],{"class":135},[129,97114,357],{"class":188},[129,97116,33247],{"class":139},[14,97118,97119],{},"③获取整列元素",[120,97121,97123],{"className":30379,"code":97122,"language":30381,"meta":42,"style":42},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[126,97124,97125,97130,97139,97144],{"__ignoreMap":42},[129,97126,97127],{"class":131,"line":132},[129,97128,97129],{"class":198},"#获取整列 数组名[:,列索引]\n",[129,97131,97132,97135,97137],{"class":131,"line":51},[129,97133,97134],{"class":139},"a[:,",[129,97136,217],{"class":188},[129,97138,33247],{"class":139},[129,97140,97141],{"class":131,"line":1194},[129,97142,97143],{"class":198},"#也可以负索引获取一列\n",[129,97145,97146,97148,97150,97152],{"class":131,"line":1209},[129,97147,97134],{"class":139},[129,97149,671],{"class":135},[129,97151,357],{"class":188},[129,97153,33247],{"class":139},[14,97155,97156],{},"④部分行部分列的元素",[120,97158,97160],{"className":30379,"code":97159,"language":30381,"meta":42,"style":42},"#部分行部分列 数组名[行切片，列切片]\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",[126,97161,97162,97167,97177,97181,97185,97190,97195,97199,97211,97215,97219,97224,97229,97234,97239,97243,97248],{"__ignoreMap":42},[129,97163,97164],{"class":131,"line":132},[129,97165,97166],{"class":198},"#部分行部分列 数组名[行切片，列切片]\n",[129,97168,97169,97172,97174],{"class":131,"line":51},[129,97170,97171],{"class":139},"a[:",[129,97173,217],{"class":188},[129,97175,97176],{"class":139},",:]\n",[129,97178,97179],{"class":131,"line":1194},[129,97180,93565],{"class":198},[129,97182,97183],{"class":131,"line":1209},[129,97184,93929],{"class":244},[129,97186,97187],{"class":131,"line":1215},[129,97188,97189],{"class":244},"array([[ 1,  2,  3,  4,  5,  6],\n",[129,97191,97192],{"class":131,"line":1229},[129,97193,97194],{"class":244},"       [ 7,  8,  9, 10, 11, 12]])\n",[129,97196,97197],{"class":131,"line":1235},[129,97198,93929],{"class":244},[129,97200,97201,97203,97205,97207,97209],{"class":131,"line":1326},[129,97202,97134],{"class":139},[129,97204,357],{"class":188},[129,97206,998],{"class":139},[129,97208,432],{"class":188},[129,97210,33247],{"class":139},[129,97212,97213],{"class":131,"line":1332},[129,97214,93565],{"class":198},[129,97216,97217],{"class":131,"line":1344},[129,97218,93929],{"class":244},[129,97220,97221],{"class":131,"line":1626},[129,97222,97223],{"class":244},"array([[ 2,  3,  4],\n",[129,97225,97226],{"class":131,"line":1631},[129,97227,97228],{"class":244},"       [ 8,  9, 10],\n",[129,97230,97231],{"class":131,"line":1637},[129,97232,97233],{"class":244},"       [14, 15, 16],\n",[129,97235,97236],{"class":131,"line":1642},[129,97237,97238],{"class":244},"       [20, 21, 22]])\n",[129,97240,97241],{"class":131,"line":1656},[129,97242,93929],{"class":244},[129,97244,97245],{"class":131,"line":1661},[129,97246,97247],{"class":198},"#对列行同时进行切片，使用了step参数\n",[129,97249,97250,97253,97255,97258,97260],{"class":131,"line":1667},[129,97251,97252],{"class":139},"a[::",[129,97254,217],{"class":188},[129,97256,97257],{"class":139},",::",[129,97259,217],{"class":188},[129,97261,33247],{"class":139},[14,97263,97264],{},"⑤同时获取两个元素",[120,97266,97268],{"className":30379,"code":97267,"language":30381,"meta":42,"style":42},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[126,97269,97270,97275,97280],{"__ignoreMap":42},[129,97271,97272],{"class":131,"line":132},[129,97273,97274],{"class":198},"#同时获取第三行第二列，第四行第一列\n",[129,97276,97277],{"class":131,"line":51},[129,97278,97279],{"class":198},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[129,97281,97282,97285,97287,97289,97291,97293,97295,97297,97299],{"class":131,"line":1194},[129,97283,97284],{"class":139},"a[(",[129,97286,217],{"class":188},[129,97288,517],{"class":139},[129,97290,211],{"class":188},[129,97292,42248],{"class":139},[129,97294,357],{"class":188},[129,97296,517],{"class":139},[129,97298,331],{"class":188},[129,97300,97301],{"class":139},")]\n",[14,97303,97304],{},"⑥切片，对行进行反向获取",[120,97306,97308],{"className":30379,"code":97307,"language":30381,"meta":42,"style":42},"#切片 对所有行进行反向获取\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",[126,97309,97310,97315,97325,97329,97333,97338,97343,97348,97353,97357,97362,97378,97382,97387,97392,97397,97402],{"__ignoreMap":42},[129,97311,97312],{"class":131,"line":132},[129,97313,97314],{"class":198},"#切片 对所有行进行反向获取\n",[129,97316,97317,97319,97321,97323],{"class":131,"line":51},[129,97318,97252],{"class":139},[129,97320,671],{"class":135},[129,97322,357],{"class":188},[129,97324,33247],{"class":139},[129,97326,97327],{"class":131,"line":1194},[129,97328,93565],{"class":198},[129,97330,97331],{"class":131,"line":1209},[129,97332,93929],{"class":244},[129,97334,97335],{"class":131,"line":1215},[129,97336,97337],{"class":244},"array([[19, 20, 21, 22, 23, 24],\n",[129,97339,97340],{"class":131,"line":1229},[129,97341,97342],{"class":244},"       [13, 14, 15, 16, 17, 18],\n",[129,97344,97345],{"class":131,"line":1235},[129,97346,97347],{"class":244},"       [ 7,  8,  9, 10, 11, 12],\n",[129,97349,97350],{"class":131,"line":1326},[129,97351,97352],{"class":244},"       [ 1,  2,  3,  4,  5,  6]])\n",[129,97354,97355],{"class":131,"line":1332},[129,97356,93929],{"class":244},[129,97358,97359],{"class":131,"line":1344},[129,97360,97361],{"class":198},"#对行列都进行反向切片获取\n",[129,97363,97364,97366,97368,97370,97372,97374,97376],{"class":131,"line":1626},[129,97365,97252],{"class":139},[129,97367,671],{"class":135},[129,97369,357],{"class":188},[129,97371,97257],{"class":139},[129,97373,671],{"class":135},[129,97375,357],{"class":188},[129,97377,33247],{"class":139},[129,97379,97380],{"class":131,"line":1631},[129,97381,93929],{"class":244},[129,97383,97384],{"class":131,"line":1637},[129,97385,97386],{"class":244},"array([[24, 23, 22, 21, 20, 19],\n",[129,97388,97389],{"class":131,"line":1642},[129,97390,97391],{"class":244},"       [18, 17, 16, 15, 14, 13],\n",[129,97393,97394],{"class":131,"line":1656},[129,97395,97396],{"class":244},"       [12, 11, 10,  9,  8,  7],\n",[129,97398,97399],{"class":131,"line":1661},[129,97400,97401],{"class":244},"       [ 6,  5,  4,  3,  2,  1]])\n",[129,97403,97404],{"class":131,"line":1667},[129,97405,93929],{"class":244},[14,97407,97408],{},"⑦修改元素",[120,97410,97412],{"className":30379,"code":97411,"language":30381,"meta":42,"style":42},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[126,97413,97414,97419,97437,97442],{"__ignoreMap":42},[129,97415,97416],{"class":131,"line":132},[129,97417,97418],{"class":198},"#获取前两行和前两列\n",[129,97420,97421,97424,97426,97428,97430,97433,97435],{"class":131,"line":51},[129,97422,97423],{"class":139},"sub_a",[129,97425,185],{"class":135},[129,97427,97171],{"class":139},[129,97429,217],{"class":188},[129,97431,97432],{"class":139},",:",[129,97434,217],{"class":188},[129,97436,33247],{"class":139},[129,97438,97439],{"class":131,"line":1194},[129,97440,97441],{"class":198},"#修改sub_a第一个元素的值\n",[129,97443,97444,97447,97449,97451,97453,97455,97457],{"class":131,"line":1209},[129,97445,97446],{"class":139},"sub_a[",[129,97448,331],{"class":188},[129,97450,517],{"class":139},[129,97452,331],{"class":188},[129,97454,1079],{"class":139},[129,97456,185],{"class":135},[129,97458,97459],{"class":188},"100\n",[14,97461,97462],{},"⑧数组复制copy()",[120,97464,97466],{"className":30379,"code":97465,"language":30381,"meta":42,"style":42},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[126,97467,97468,97473,97483,97488],{"__ignoreMap":42},[129,97469,97470],{"class":131,"line":132},[129,97471,97472],{"class":198},"#数组复制\n",[129,97474,97475,97478,97480],{"class":131,"line":51},[129,97476,97477],{"class":139},"copy_a",[129,97479,185],{"class":135},[129,97481,97482],{"class":139},"np.copy(sub_a)\n",[129,97484,97485],{"class":131,"line":1194},[129,97486,97487],{"class":198},"#修改copy_a后不影响原数组\n",[129,97489,97490,97493,97495,97497,97499,97501,97503],{"class":131,"line":1209},[129,97491,97492],{"class":139},"copy_a[",[129,97494,331],{"class":188},[129,97496,517],{"class":139},[129,97498,331],{"class":188},[129,97500,1079],{"class":139},[129,97502,185],{"class":135},[129,97504,97459],{"class":188},[14,97506,97507],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5141,97509,97510],{},"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":42,"searchDepth":51,"depth":51,"links":97512},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97029,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97519,"title":97520,"body":97521,"description":53,"extension":54,"meta":98013,"navigation":56,"path":98014,"seo":98015,"stem":98016,"__hash__":98017},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97522,"toc":98005},[97523,97526,97530,97533,97536,97589,97592,97617,97620,97639,97659,97662,97678,97682,97728,97732,97774,97778,97781,97784,97787,97790,97793,97855,97915,97919,97922,97979,97983,97988,97997,98002],[10,97524,97520],{"id":97525},"_5改变数组的维度",[71,97527,97529],{"id":97528},"_51-使用reshape","5.1 使用reshape()",[14,97531,97532],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97534,97535],{},"①一维数组转换为二维数组",[120,97537,97539],{"className":30379,"code":97538,"language":30381,"meta":42,"style":42},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[126,97540,97541,97557,97562,97567,97572],{"__ignoreMap":42},[129,97542,97543,97545,97547,97549,97551,97553,97555],{"class":131,"line":132},[129,97544,20],{"class":139},[129,97546,185],{"class":135},[129,97548,93003],{"class":139},[129,97550,357],{"class":188},[129,97552,517],{"class":139},[129,97554,662],{"class":188},[129,97556,146],{"class":139},[129,97558,97559],{"class":131,"line":51},[129,97560,97561],{"class":198},"#将一维数组进行转换\n",[129,97563,97564],{"class":131,"line":1194},[129,97565,97566],{"class":198},"#注意点：元素个数不可以变\n",[129,97568,97569],{"class":131,"line":1209},[129,97570,97571],{"class":198},"#转换维度要保持一致，不一致就异常！！！\n",[129,97573,97574,97576,97578,97581,97583,97585,97587],{"class":131,"line":1215},[129,97575,93307],{"class":139},[129,97577,185],{"class":135},[129,97579,97580],{"class":139},"a.reshape(",[129,97582,217],{"class":188},[129,97584,517],{"class":139},[129,97586,483],{"class":188},[129,97588,146],{"class":139},[14,97590,97591],{},"②一维数组转换为三维数组",[120,97593,97595],{"className":30379,"code":97594,"language":30381,"meta":42,"style":42},"aaa=a.reshape(2,3,2)\n",[126,97596,97597],{"__ignoreMap":42},[129,97598,97599,97601,97603,97605,97607,97609,97611,97613,97615],{"class":131,"line":132},[129,97600,95522],{"class":139},[129,97602,185],{"class":135},[129,97604,97580],{"class":139},[129,97606,217],{"class":188},[129,97608,517],{"class":139},[129,97610,211],{"class":188},[129,97612,517],{"class":139},[129,97614,217],{"class":188},[129,97616,146],{"class":139},[14,97618,97619],{},"③二维数组转化为一维数组",[120,97621,97623],{"className":30379,"code":97622,"language":30381,"meta":42,"style":42},"#知道元素个数：\naa.reshape(12)\n",[126,97624,97625,97630],{"__ignoreMap":42},[129,97626,97627],{"class":131,"line":132},[129,97628,97629],{"class":198},"#知道元素个数：\n",[129,97631,97632,97635,97637],{"class":131,"line":51},[129,97633,97634],{"class":139},"aa.reshape(",[129,97636,637],{"class":188},[129,97638,146],{"class":139},[120,97640,97642],{"className":30379,"code":97641,"language":30381,"meta":42,"style":42},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[126,97643,97644,97649],{"__ignoreMap":42},[129,97645,97646],{"class":131,"line":132},[129,97647,97648],{"class":198},"#不知道元素个数，参数传递-1\n",[129,97650,97651,97653,97655,97657],{"class":131,"line":51},[129,97652,97634],{"class":139},[129,97654,671],{"class":135},[129,97656,357],{"class":188},[129,97658,146],{"class":139},[14,97660,97661],{},"④三维数组转换为一维数组",[120,97663,97665],{"className":30379,"code":97664,"language":30381,"meta":42,"style":42},"aaa.reshape(-1)\n",[126,97666,97667],{"__ignoreMap":42},[129,97668,97669,97672,97674,97676],{"class":131,"line":132},[129,97670,97671],{"class":139},"aaa.reshape(",[129,97673,671],{"class":135},[129,97675,357],{"class":188},[129,97677,146],{"class":139},[71,97679,97681],{"id":97680},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[120,97683,97685],{"className":30379,"code":97684,"language":30381,"meta":42,"style":42},"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",[126,97686,97687,97714,97719,97723],{"__ignoreMap":42},[129,97688,97689,97691,97693,97695,97697,97699,97701,97703,97705,97707,97709,97711],{"class":131,"line":132},[129,97690,93307],{"class":139},[129,97692,185],{"class":135},[129,97694,93003],{"class":139},[129,97696,357],{"class":188},[129,97698,517],{"class":139},[129,97700,662],{"class":188},[129,97702,93008],{"class":139},[129,97704,217],{"class":188},[129,97706,517],{"class":139},[129,97708,483],{"class":188},[129,97710,568],{"class":139},[129,97712,97713],{"class":198},"#转换为2行6列的数组\n",[129,97715,97716],{"class":131,"line":51},[129,97717,97718],{"class":139},"aa.revel()\n",[129,97720,97721],{"class":131,"line":1194},[129,97722,93565],{"class":198},[129,97724,97725],{"class":131,"line":1209},[129,97726,97727],{"class":198},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[71,97729,97731],{"id":97730},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[120,97733,97735],{"className":30379,"code":97734,"language":30381,"meta":42,"style":42},"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",[126,97736,97737,97761,97766,97770],{"__ignoreMap":42},[129,97738,97739,97741,97743,97745,97747,97749,97751,97753,97755,97757,97759],{"class":131,"line":132},[129,97740,93307],{"class":139},[129,97742,185],{"class":135},[129,97744,93003],{"class":139},[129,97746,357],{"class":188},[129,97748,517],{"class":139},[129,97750,662],{"class":188},[129,97752,93008],{"class":139},[129,97754,217],{"class":188},[129,97756,517],{"class":139},[129,97758,483],{"class":188},[129,97760,146],{"class":139},[129,97762,97763],{"class":131,"line":51},[129,97764,97765],{"class":139},"aa.flatten()\n",[129,97767,97768],{"class":131,"line":1194},[129,97769,93565],{"class":198},[129,97771,97772],{"class":131,"line":1209},[129,97773,97727],{"class":198},[71,97775,97777],{"id":97776},"_54-使用resize","5.4 使用resize()",[14,97779,97780],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97782,97783],{},"通过resize方法可以改变数组的维度",[14,97785,97786],{},"#resize修改数组维度",[14,97788,97789],{},"#以元组的形式指定形状",[14,97791,97792],{},"#改变的是原数组",[120,97794,97796],{"className":30379,"code":97795,"language":30381,"meta":42,"style":42},"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",[126,97797,97798,97814,97834,97847,97851],{"__ignoreMap":42},[129,97799,97800,97802,97804,97806,97808,97810,97812],{"class":131,"line":132},[129,97801,20],{"class":139},[129,97803,185],{"class":135},[129,97805,93003],{"class":139},[129,97807,357],{"class":188},[129,97809,517],{"class":139},[129,97811,662],{"class":188},[129,97813,146],{"class":139},[129,97815,97816,97819,97821,97823,97825,97827,97829,97831],{"class":131,"line":51},[129,97817,97818],{"class":139},"a.shape",[129,97820,185],{"class":135},[129,97822,140],{"class":139},[129,97824,217],{"class":188},[129,97826,517],{"class":139},[129,97828,483],{"class":188},[129,97830,568],{"class":139},[129,97832,97833],{"class":198},"#改变了原数组\n",[129,97835,97836,97838,97840,97843,97845],{"class":131,"line":1194},[129,97837,20],{"class":139},[129,97839,185],{"class":135},[129,97841,97842],{"class":139},"resize((",[129,97844,637],{"class":188},[129,97846,30498],{"class":139},[129,97848,97849],{"class":131,"line":1209},[129,97850,93565],{"class":198},[129,97852,97853],{"class":131,"line":1215},[129,97854,97727],{"class":198},[120,97856,97858],{"className":30379,"code":97857,"language":30381,"meta":42,"style":42},"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",[126,97859,97860,97873,97877,97881,97886,97891,97896,97901,97906,97911],{"__ignoreMap":42},[129,97861,97862,97865,97867,97869,97871],{"class":131,"line":132},[129,97863,97864],{"class":139},"a.resize((",[129,97866,483],{"class":188},[129,97868,517],{"class":139},[129,97870,217],{"class":188},[129,97872,30498],{"class":139},[129,97874,97875],{"class":131,"line":51},[129,97876,93565],{"class":198},[129,97878,97879],{"class":131,"line":1194},[129,97880,93929],{"class":244},[129,97882,97883],{"class":131,"line":1209},[129,97884,97885],{"class":244},"array([[ 1,  2],\n",[129,97887,97888],{"class":131,"line":1215},[129,97889,97890],{"class":244},"       [ 3,  4],\n",[129,97892,97893],{"class":131,"line":1229},[129,97894,97895],{"class":244},"       [ 5,  6],\n",[129,97897,97898],{"class":131,"line":1235},[129,97899,97900],{"class":244},"       [ 7,  8],\n",[129,97902,97903],{"class":131,"line":1326},[129,97904,97905],{"class":244},"       [ 9, 10],\n",[129,97907,97908],{"class":131,"line":1332},[129,97909,97910],{"class":244},"       [11, 12]])\n",[129,97912,97913],{"class":131,"line":1344},[129,97914,93929],{"class":244},[71,97916,97918],{"id":97917},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97920,97921],{},"改变了原数组",[120,97923,97925],{"className":30379,"code":97924,"language":30381,"meta":42,"style":42},"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",[126,97926,97927,97943,97959,97963,97967,97971,97975],{"__ignoreMap":42},[129,97928,97929,97931,97933,97935,97937,97939,97941],{"class":131,"line":132},[129,97930,20],{"class":139},[129,97932,185],{"class":135},[129,97934,93003],{"class":139},[129,97936,357],{"class":188},[129,97938,517],{"class":139},[129,97940,662],{"class":188},[129,97942,146],{"class":139},[129,97944,97945,97947,97949,97951,97953,97955,97957],{"class":131,"line":51},[129,97946,97818],{"class":139},[129,97948,185],{"class":135},[129,97950,140],{"class":139},[129,97952,217],{"class":188},[129,97954,517],{"class":139},[129,97956,483],{"class":188},[129,97958,146],{"class":139},[129,97960,97961],{"class":131,"line":1194},[129,97962,93565],{"class":198},[129,97964,97965],{"class":131,"line":1209},[129,97966,93929],{"class":244},[129,97968,97969],{"class":131,"line":1215},[129,97970,97189],{"class":244},[129,97972,97973],{"class":131,"line":1229},[129,97974,97194],{"class":244},[129,97976,97977],{"class":131,"line":1235},[129,97978,93929],{"class":244},[71,97980,97982],{"id":97981},"_56-重要比较","5.6 重要比较：",[14,97984,97985],{},[40,97986],{"alt":42,"src":97987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,97989,97990,97991,97993,97994,97996],{},"口诀：NumPy 函数要么用 ",[126,97992,95964],{},"，要么用 ",[126,97995,31497],{},"，创建结构用 shape，造数据用 size",[14,97998,97999],{},[40,98000],{"alt":42,"src":98001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5141,98003,98004],{},"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":42,"searchDepth":51,"depth":51,"links":98006},[98007,98008,98009,98010,98011,98012],{"id":97528,"depth":51,"text":97529},{"id":97680,"depth":51,"text":97681},{"id":97730,"depth":51,"text":97731},{"id":97776,"depth":51,"text":97777},{"id":97917,"depth":51,"text":97918},{"id":97981,"depth":51,"text":97982},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97520,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98019,"title":98020,"body":98021,"description":53,"extension":54,"meta":99093,"navigation":56,"path":99094,"seo":99095,"stem":99096,"__hash__":99097},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98022,"toc":99087},[98023,98026,98030,98033,98036,98039,98104,98107,98147,98150,98232,98235,98240,98262,98264,98269,98274,98277,98280,98435,98438,98640,98644,98647,98650,98718,98720,98725,98728,98731,98811,98815,98818,98820,98893,98895,98900,98902,98982,98986,98989,98992,98995,98998,99001,99004,99084],[10,98024,98020],{"id":98025},"_6数组的拼接",[71,98027,98029],{"id":98028},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98031,98032],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98034,98035],{},"函数内部传两个数列构成的数列或者元组",[14,98037,98038],{},"①一维数组的拼接",[120,98040,98042],{"className":30379,"code":98041,"language":30381,"meta":42,"style":42},"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",[126,98043,98044,98064,98084,98089,98094,98099],{"__ignoreMap":42},[129,98045,98046,98048,98050,98052,98054,98056,98058,98060,98062],{"class":131,"line":132},[129,98047,20],{"class":139},[129,98049,185],{"class":135},[129,98051,93025],{"class":139},[129,98053,357],{"class":188},[129,98055,517],{"class":139},[129,98057,217],{"class":188},[129,98059,517],{"class":139},[129,98061,211],{"class":188},[129,98063,4671],{"class":139},[129,98065,98066,98068,98070,98072,98074,98076,98078,98080,98082],{"class":131,"line":51},[129,98067,402],{"class":139},[129,98069,185],{"class":135},[129,98071,93025],{"class":139},[129,98073,432],{"class":188},[129,98075,517],{"class":139},[129,98077,458],{"class":188},[129,98079,517],{"class":139},[129,98081,483],{"class":188},[129,98083,4671],{"class":139},[129,98085,98086],{"class":131,"line":1194},[129,98087,98088],{"class":198},"#调用concatenate进行数组拼接\n",[129,98090,98091],{"class":131,"line":1209},[129,98092,98093],{"class":139},"np.concatenate((a,b))\n",[129,98095,98096],{"class":131,"line":1215},[129,98097,98098],{"class":198},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[129,98100,98101],{"class":131,"line":1229},[129,98102,98103],{"class":198},"#np.concatenate([a,b])\n",[14,98105,98106],{},"②一维多个数组拼接",[120,98108,98110],{"className":30379,"code":98109,"language":30381,"meta":42,"style":42},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[126,98111,98112,98117,98137,98142],{"__ignoreMap":42},[129,98113,98114],{"class":131,"line":132},[129,98115,98116],{"class":198},"#也可以多个数组进行拼接\n",[129,98118,98119,98121,98123,98125,98127,98129,98131,98133,98135],{"class":131,"line":51},[129,98120,427],{"class":139},[129,98122,185],{"class":135},[129,98124,93025],{"class":139},[129,98126,585],{"class":188},[129,98128,517],{"class":139},[129,98130,611],{"class":188},[129,98132,517],{"class":139},[129,98134,662],{"class":188},[129,98136,4671],{"class":139},[129,98138,98139],{"class":131,"line":1194},[129,98140,98141],{"class":139},"c\n",[129,98143,98144],{"class":131,"line":1209},[129,98145,98146],{"class":139},"np.concatenate((a,b,c))\n",[14,98148,98149],{},"③二维数组拼接",[120,98151,98153],{"className":30379,"code":98152,"language":30381,"meta":42,"style":42},"#二维数组使用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",[126,98154,98155,98160,98184,98209,98214,98219],{"__ignoreMap":42},[129,98156,98157],{"class":131,"line":132},[129,98158,98159],{"class":198},"#二维数组使用concatenate进行拼接\n",[129,98161,98162,98164,98166,98168,98170,98172,98174,98176,98178,98180,98182],{"class":131,"line":51},[129,98163,93307],{"class":139},[129,98165,185],{"class":135},[129,98167,93003],{"class":139},[129,98169,357],{"class":188},[129,98171,517],{"class":139},[129,98173,662],{"class":188},[129,98175,93008],{"class":139},[129,98177,211],{"class":188},[129,98179,517],{"class":139},[129,98181,432],{"class":188},[129,98183,146],{"class":139},[129,98185,98186,98189,98191,98193,98195,98197,98199,98201,98203,98205,98207],{"class":131,"line":1194},[129,98187,98188],{"class":139},"bb",[129,98190,185],{"class":135},[129,98192,93003],{"class":139},[129,98194,476],{"class":188},[129,98196,517],{"class":139},[129,98198,781],{"class":188},[129,98200,93008],{"class":139},[129,98202,211],{"class":188},[129,98204,517],{"class":139},[129,98206,432],{"class":188},[129,98208,146],{"class":139},[129,98210,98211],{"class":131,"line":1209},[129,98212,98213],{"class":198},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[129,98215,98216],{"class":131,"line":1215},[129,98217,98218],{"class":198},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[129,98220,98221,98224,98226,98228,98230],{"class":131,"line":1229},[129,98222,98223],{"class":139},"np.concatenate((aa,bb),",[129,98225,47515],{"class":5231},[129,98227,185],{"class":135},[129,98229,331],{"class":188},[129,98231,146],{"class":139},[14,98233,98234],{},"结果：",[14,98236,98237],{},[40,98238],{"alt":42,"src":98239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[120,98241,98243],{"className":30379,"code":98242,"language":30381,"meta":42,"style":42},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[126,98244,98245,98250],{"__ignoreMap":42},[129,98246,98247],{"class":131,"line":132},[129,98248,98249],{"class":198},"#指定axis为1进行拼接\n",[129,98251,98252,98254,98256,98258,98260],{"class":131,"line":51},[129,98253,98223],{"class":139},[129,98255,47515],{"class":5231},[129,98257,185],{"class":135},[129,98259,357],{"class":188},[129,98261,146],{"class":139},[14,98263,98234],{},[14,98265,98266],{},[40,98267],{"alt":42,"src":98268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98270,98271],{},[289,98272,98273],{},"二维数组总结：0竖着方向，1横着方向",[14,98275,98276],{},"④三维数组拼接",[14,98278,98279],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[120,98281,98283],{"className":30379,"code":98282,"language":30381,"meta":42,"style":42},"#两个三行六列\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",[126,98284,98285,98290,98318,98348,98353,98370,98375,98380,98385,98402,98407,98412,98417,98430],{"__ignoreMap":42},[129,98286,98287],{"class":131,"line":132},[129,98288,98289],{"class":198},"#两个三行六列\n",[129,98291,98292,98294,98296,98298,98300,98302,98304,98306,98308,98310,98312,98314,98316],{"class":131,"line":51},[129,98293,95522],{"class":139},[129,98295,185],{"class":135},[129,98297,93003],{"class":139},[129,98299,357],{"class":188},[129,98301,517],{"class":139},[129,98303,464],{"class":188},[129,98305,93008],{"class":139},[129,98307,217],{"class":188},[129,98309,517],{"class":139},[129,98311,211],{"class":188},[129,98313,517],{"class":139},[129,98315,483],{"class":188},[129,98317,146],{"class":139},[129,98319,98320,98323,98325,98327,98329,98331,98334,98336,98338,98340,98342,98344,98346],{"class":131,"line":1194},[129,98321,98322],{"class":139},"bbb",[129,98324,185],{"class":135},[129,98326,93003],{"class":139},[129,98328,476],{"class":188},[129,98330,517],{"class":139},[129,98332,98333],{"class":188},"137",[129,98335,93008],{"class":139},[129,98337,217],{"class":188},[129,98339,517],{"class":139},[129,98341,211],{"class":188},[129,98343,517],{"class":139},[129,98345,483],{"class":188},[129,98347,146],{"class":139},[129,98349,98350],{"class":131,"line":1209},[129,98351,98352],{"class":198},"#axis=0\n",[129,98354,98355,98357,98359,98362,98364,98366,98368],{"class":131,"line":1215},[129,98356,834],{"class":139},[129,98358,185],{"class":135},[129,98360,98361],{"class":139},"np.concatenate((aaa,bbb),",[129,98363,47515],{"class":5231},[129,98365,185],{"class":135},[129,98367,331],{"class":188},[129,98369,146],{"class":139},[129,98371,98372],{"class":131,"line":1229},[129,98373,98374],{"class":139},"s.shape\n",[129,98376,98377],{"class":131,"line":1235},[129,98378,98379],{"class":198},"#输出：(4,3,6)\n",[129,98381,98382],{"class":131,"line":1326},[129,98383,98384],{"class":198},"#axis=1\n",[129,98386,98387,98390,98392,98394,98396,98398,98400],{"class":131,"line":1332},[129,98388,98389],{"class":139},"ss",[129,98391,185],{"class":135},[129,98393,98361],{"class":139},[129,98395,47515],{"class":5231},[129,98397,185],{"class":135},[129,98399,357],{"class":188},[129,98401,146],{"class":139},[129,98403,98404],{"class":131,"line":1344},[129,98405,98406],{"class":139},"ss.shape\n",[129,98408,98409],{"class":131,"line":1626},[129,98410,98411],{"class":198},"#输出：(2,6,6)\n",[129,98413,98414],{"class":131,"line":1631},[129,98415,98416],{"class":198},"#axis=2\n",[129,98418,98419,98421,98423,98425,98427],{"class":131,"line":1637},[129,98420,98361],{"class":139},[129,98422,47515],{"class":5231},[129,98424,185],{"class":135},[129,98426,217],{"class":188},[129,98428,98429],{"class":139},").shape\n",[129,98431,98432],{"class":131,"line":1642},[129,98433,98434],{"class":198},"#输出：（2，3，12）\n",[14,98436,98437],{},"⑤四维数组拼接",[120,98439,98441],{"className":30379,"code":98440,"language":30381,"meta":42,"style":42},"#两个三行六列\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",[126,98442,98443,98447,98475,98503,98528,98554,98558,98571,98576,98580,98592,98597,98601,98613,98618,98623,98635],{"__ignoreMap":42},[129,98444,98445],{"class":131,"line":132},[129,98446,98289],{"class":198},[129,98448,98449,98451,98453,98455,98457,98459,98461,98463,98465,98467,98469,98471,98473],{"class":131,"line":51},[129,98450,95522],{"class":139},[129,98452,185],{"class":135},[129,98454,93003],{"class":139},[129,98456,357],{"class":188},[129,98458,517],{"class":139},[129,98460,464],{"class":188},[129,98462,93008],{"class":139},[129,98464,217],{"class":188},[129,98466,517],{"class":139},[129,98468,211],{"class":188},[129,98470,517],{"class":139},[129,98472,483],{"class":188},[129,98474,146],{"class":139},[129,98476,98477,98479,98481,98483,98485,98487,98489,98491,98493,98495,98497,98499,98501],{"class":131,"line":1194},[129,98478,98322],{"class":139},[129,98480,185],{"class":135},[129,98482,93003],{"class":139},[129,98484,476],{"class":188},[129,98486,517],{"class":139},[129,98488,98333],{"class":188},[129,98490,93008],{"class":139},[129,98492,217],{"class":188},[129,98494,517],{"class":139},[129,98496,211],{"class":188},[129,98498,517],{"class":139},[129,98500,483],{"class":188},[129,98502,146],{"class":139},[129,98504,98505,98508,98510,98512,98514,98516,98518,98520,98522,98524,98526],{"class":131,"line":1209},[129,98506,98507],{"class":139},"aaaa",[129,98509,185],{"class":135},[129,98511,97671],{"class":139},[129,98513,217],{"class":188},[129,98515,517],{"class":139},[129,98517,211],{"class":188},[129,98519,517],{"class":139},[129,98521,211],{"class":188},[129,98523,517],{"class":139},[129,98525,217],{"class":188},[129,98527,146],{"class":139},[129,98529,98530,98533,98535,98538,98540,98542,98544,98546,98548,98550,98552],{"class":131,"line":1215},[129,98531,98532],{"class":139},"bbbb",[129,98534,185],{"class":135},[129,98536,98537],{"class":139},"bbb.reshape(",[129,98539,217],{"class":188},[129,98541,517],{"class":139},[129,98543,211],{"class":188},[129,98545,517],{"class":139},[129,98547,211],{"class":188},[129,98549,517],{"class":139},[129,98551,217],{"class":188},[129,98553,146],{"class":139},[129,98555,98556],{"class":131,"line":1229},[129,98557,98352],{"class":198},[129,98559,98560,98563,98565,98567,98569],{"class":131,"line":1235},[129,98561,98562],{"class":139},"np.concatenate((aaaa,bbbb),",[129,98564,47515],{"class":5231},[129,98566,185],{"class":135},[129,98568,331],{"class":188},[129,98570,98429],{"class":139},[129,98572,98573],{"class":131,"line":1326},[129,98574,98575],{"class":198},"#结果：（4，3，3，2）\n",[129,98577,98578],{"class":131,"line":1332},[129,98579,98384],{"class":198},[129,98581,98582,98584,98586,98588,98590],{"class":131,"line":1344},[129,98583,98562],{"class":139},[129,98585,47515],{"class":5231},[129,98587,185],{"class":135},[129,98589,357],{"class":188},[129,98591,98429],{"class":139},[129,98593,98594],{"class":131,"line":1626},[129,98595,98596],{"class":198},"#结果：（2，6，3，2）\n",[129,98598,98599],{"class":131,"line":1631},[129,98600,98416],{"class":198},[129,98602,98603,98605,98607,98609,98611],{"class":131,"line":1637},[129,98604,98562],{"class":139},[129,98606,47515],{"class":5231},[129,98608,185],{"class":135},[129,98610,217],{"class":188},[129,98612,98429],{"class":139},[129,98614,98615],{"class":131,"line":1642},[129,98616,98617],{"class":198},"#结果：（2，3，6，2）\n",[129,98619,98620],{"class":131,"line":1656},[129,98621,98622],{"class":198},"#axis=3\n",[129,98624,98625,98627,98629,98631,98633],{"class":131,"line":1661},[129,98626,98562],{"class":139},[129,98628,47515],{"class":5231},[129,98630,185],{"class":135},[129,98632,211],{"class":188},[129,98634,98429],{"class":139},[129,98636,98637],{"class":131,"line":1667},[129,98638,98639],{"class":198},"#结果：（2，3，3，4）\n",[71,98641,98643],{"id":98642},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98645,98646],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98648,98649],{},"①二维数组",[120,98651,98653],{"className":30379,"code":98652,"language":30381,"meta":42,"style":42},"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",[126,98654,98655,98679,98703,98708,98713],{"__ignoreMap":42},[129,98656,98657,98659,98661,98663,98665,98667,98669,98671,98673,98675,98677],{"class":131,"line":132},[129,98658,93307],{"class":139},[129,98660,185],{"class":135},[129,98662,93003],{"class":139},[129,98664,357],{"class":188},[129,98666,517],{"class":139},[129,98668,662],{"class":188},[129,98670,93008],{"class":139},[129,98672,211],{"class":188},[129,98674,517],{"class":139},[129,98676,432],{"class":188},[129,98678,146],{"class":139},[129,98680,98681,98683,98685,98687,98689,98691,98693,98695,98697,98699,98701],{"class":131,"line":51},[129,98682,98188],{"class":139},[129,98684,185],{"class":135},[129,98686,93003],{"class":139},[129,98688,476],{"class":188},[129,98690,517],{"class":139},[129,98692,781],{"class":188},[129,98694,93008],{"class":139},[129,98696,211],{"class":188},[129,98698,517],{"class":139},[129,98700,432],{"class":188},[129,98702,146],{"class":139},[129,98704,98705],{"class":131,"line":1194},[129,98706,98707],{"class":139},"np.hstack((aa,bb))\n",[129,98709,98710],{"class":131,"line":1209},[129,98711,98712],{"class":198},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[129,98714,98715],{"class":131,"line":1215},[129,98716,98717],{"class":198},"#np.hstack([aa,bb])\n",[14,98719,98234],{},[14,98721,98722],{},[40,98723],{"alt":42,"src":98724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98726,98727],{},"等效于concatenate()函数中axis=1时的情况",[14,98729,98730],{},"②三维数组",[120,98732,98734],{"className":30379,"code":98733,"language":30381,"meta":42,"style":42},"#两个三行六列\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",[126,98735,98736,98740,98768,98796,98801,98806],{"__ignoreMap":42},[129,98737,98738],{"class":131,"line":132},[129,98739,98289],{"class":198},[129,98741,98742,98744,98746,98748,98750,98752,98754,98756,98758,98760,98762,98764,98766],{"class":131,"line":51},[129,98743,95522],{"class":139},[129,98745,185],{"class":135},[129,98747,93003],{"class":139},[129,98749,357],{"class":188},[129,98751,517],{"class":139},[129,98753,464],{"class":188},[129,98755,93008],{"class":139},[129,98757,217],{"class":188},[129,98759,517],{"class":139},[129,98761,211],{"class":188},[129,98763,517],{"class":139},[129,98765,483],{"class":188},[129,98767,146],{"class":139},[129,98769,98770,98772,98774,98776,98778,98780,98782,98784,98786,98788,98790,98792,98794],{"class":131,"line":1194},[129,98771,98322],{"class":139},[129,98773,185],{"class":135},[129,98775,93003],{"class":139},[129,98777,476],{"class":188},[129,98779,517],{"class":139},[129,98781,98333],{"class":188},[129,98783,93008],{"class":139},[129,98785,217],{"class":188},[129,98787,517],{"class":139},[129,98789,211],{"class":188},[129,98791,517],{"class":139},[129,98793,483],{"class":188},[129,98795,146],{"class":139},[129,98797,98798],{"class":131,"line":1209},[129,98799,98800],{"class":198},"#使用hstack\n",[129,98802,98803],{"class":131,"line":1215},[129,98804,98805],{"class":139},"np.hstack((aaa,bbb)).shape\n",[129,98807,98808],{"class":131,"line":1229},[129,98809,98810],{"class":198},"#输出：（2，6，6）\n",[71,98812,98814],{"id":98813},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98816,98817],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98819,98649],{},[120,98821,98823],{"className":30379,"code":98822,"language":30381,"meta":42,"style":42},"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",[126,98824,98825,98849,98873,98878,98883,98888],{"__ignoreMap":42},[129,98826,98827,98829,98831,98833,98835,98837,98839,98841,98843,98845,98847],{"class":131,"line":132},[129,98828,93307],{"class":139},[129,98830,185],{"class":135},[129,98832,93003],{"class":139},[129,98834,357],{"class":188},[129,98836,517],{"class":139},[129,98838,662],{"class":188},[129,98840,93008],{"class":139},[129,98842,211],{"class":188},[129,98844,517],{"class":139},[129,98846,432],{"class":188},[129,98848,146],{"class":139},[129,98850,98851,98853,98855,98857,98859,98861,98863,98865,98867,98869,98871],{"class":131,"line":51},[129,98852,98188],{"class":139},[129,98854,185],{"class":135},[129,98856,93003],{"class":139},[129,98858,476],{"class":188},[129,98860,517],{"class":139},[129,98862,781],{"class":188},[129,98864,93008],{"class":139},[129,98866,211],{"class":188},[129,98868,517],{"class":139},[129,98870,432],{"class":188},[129,98872,146],{"class":139},[129,98874,98875],{"class":131,"line":1194},[129,98876,98877],{"class":198},"#vstack 垂直方向进行堆叠\n",[129,98879,98880],{"class":131,"line":1209},[129,98881,98882],{"class":139},"np.vstack((aa,bb))\n",[129,98884,98885],{"class":131,"line":1215},[129,98886,98887],{"class":198},"#与hstack传的参数类似，等价于：\n",[129,98889,98890],{"class":131,"line":1229},[129,98891,98892],{"class":139},"np.vstack([aa,bb])\n",[14,98894,98234],{},[14,98896,98897],{},[40,98898],{"alt":42,"src":98899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98901,98730],{},[120,98903,98905],{"className":30379,"code":98904,"language":30381,"meta":42,"style":42},"#两个三行六列\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",[126,98906,98907,98911,98939,98967,98972,98977],{"__ignoreMap":42},[129,98908,98909],{"class":131,"line":132},[129,98910,98289],{"class":198},[129,98912,98913,98915,98917,98919,98921,98923,98925,98927,98929,98931,98933,98935,98937],{"class":131,"line":51},[129,98914,95522],{"class":139},[129,98916,185],{"class":135},[129,98918,93003],{"class":139},[129,98920,357],{"class":188},[129,98922,517],{"class":139},[129,98924,464],{"class":188},[129,98926,93008],{"class":139},[129,98928,217],{"class":188},[129,98930,517],{"class":139},[129,98932,211],{"class":188},[129,98934,517],{"class":139},[129,98936,483],{"class":188},[129,98938,146],{"class":139},[129,98940,98941,98943,98945,98947,98949,98951,98953,98955,98957,98959,98961,98963,98965],{"class":131,"line":1194},[129,98942,98322],{"class":139},[129,98944,185],{"class":135},[129,98946,93003],{"class":139},[129,98948,476],{"class":188},[129,98950,517],{"class":139},[129,98952,98333],{"class":188},[129,98954,93008],{"class":139},[129,98956,217],{"class":188},[129,98958,517],{"class":139},[129,98960,211],{"class":188},[129,98962,517],{"class":139},[129,98964,483],{"class":188},[129,98966,146],{"class":139},[129,98968,98969],{"class":131,"line":1209},[129,98970,98971],{"class":198},"#使用vstack\n",[129,98973,98974],{"class":131,"line":1215},[129,98975,98976],{"class":139},"np.vstack((aaa,bbb)).shape\n",[129,98978,98979],{"class":131,"line":1229},[129,98980,98981],{"class":198},"#输出：（4，3，6）\n",[71,98983,98985],{"id":98984},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,98987,98988],{},"该方法是三维数组特有的方法",[14,98990,98991],{},"也就是说",[14,98993,98994],{},"一维数组拼接方法用：concatenate()",[14,98996,98997],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,98999,99000],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99002,99003],{},"四维数组及多维数组只能用concatenate进行拼接",[120,99005,99007],{"className":30379,"code":99006,"language":30381,"meta":42,"style":42},"#两个三行六列\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",[126,99008,99009,99013,99041,99069,99074,99079],{"__ignoreMap":42},[129,99010,99011],{"class":131,"line":132},[129,99012,98289],{"class":198},[129,99014,99015,99017,99019,99021,99023,99025,99027,99029,99031,99033,99035,99037,99039],{"class":131,"line":51},[129,99016,95522],{"class":139},[129,99018,185],{"class":135},[129,99020,93003],{"class":139},[129,99022,357],{"class":188},[129,99024,517],{"class":139},[129,99026,464],{"class":188},[129,99028,93008],{"class":139},[129,99030,217],{"class":188},[129,99032,517],{"class":139},[129,99034,211],{"class":188},[129,99036,517],{"class":139},[129,99038,483],{"class":188},[129,99040,146],{"class":139},[129,99042,99043,99045,99047,99049,99051,99053,99055,99057,99059,99061,99063,99065,99067],{"class":131,"line":1194},[129,99044,98322],{"class":139},[129,99046,185],{"class":135},[129,99048,93003],{"class":139},[129,99050,476],{"class":188},[129,99052,517],{"class":139},[129,99054,98333],{"class":188},[129,99056,93008],{"class":139},[129,99058,217],{"class":188},[129,99060,517],{"class":139},[129,99062,211],{"class":188},[129,99064,517],{"class":139},[129,99066,483],{"class":188},[129,99068,146],{"class":139},[129,99070,99071],{"class":131,"line":1209},[129,99072,99073],{"class":198},"#使用dstack\n",[129,99075,99076],{"class":131,"line":1215},[129,99077,99078],{"class":139},"np.dstack((aaa,bbb)).shape\n",[129,99080,99081],{"class":131,"line":1229},[129,99082,99083],{"class":198},"#结果：（2，3，12）\n",[5141,99085,99086],{},"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":42,"searchDepth":51,"depth":51,"links":99088},[99089,99090,99091,99092],{"id":98028,"depth":51,"text":98029},{"id":98642,"depth":51,"text":98643},{"id":98813,"depth":51,"text":98814},{"id":98984,"depth":51,"text":98985},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98020,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99099,"title":99100,"body":99101,"description":53,"extension":54,"meta":99376,"navigation":56,"path":99377,"seo":99378,"stem":99379,"__hash__":99380},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99102,"toc":99374},[99103,99106,99109,99203,99206,99209,99212,99215,99218,99221,99224,99227,99371],[10,99104,99100],{"id":99105},"_7数组转置",[14,99107,99108],{},"使用transpose()函数",[120,99110,99112],{"className":30379,"code":99111,"language":30381,"meta":42,"style":42},"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",[126,99113,99114,99124,99148,99153,99158,99163,99168,99176,99180,99184,99189,99194,99199],{"__ignoreMap":42},[129,99115,99116,99118,99120,99122],{"class":131,"line":132},[129,99117,30393],{"class":135},[129,99119,31381],{"class":139},[129,99121,31384],{"class":135},[129,99123,31387],{"class":139},[129,99125,99126,99128,99130,99132,99134,99136,99138,99140,99142,99144,99146],{"class":131,"line":51},[129,99127,20],{"class":139},[129,99129,185],{"class":135},[129,99131,31718],{"class":139},[129,99133,357],{"class":188},[129,99135,517],{"class":139},[129,99137,662],{"class":188},[129,99139,93008],{"class":139},[129,99141,432],{"class":188},[129,99143,517],{"class":139},[129,99145,211],{"class":188},[129,99147,146],{"class":139},[129,99149,99150],{"class":131,"line":1194},[129,99151,99152],{"class":198},"#二维数组转置\n",[129,99154,99155],{"class":131,"line":1209},[129,99156,99157],{"class":198},"#调用transpose()函数\n",[129,99159,99160],{"class":131,"line":1215},[129,99161,99162],{"class":139},"a.transpose()\n",[129,99164,99165],{"class":131,"line":1229},[129,99166,99167],{"class":198},"#对于二维数组也可以采用.T来实现\n",[129,99169,99170,99173],{"class":131,"line":1235},[129,99171,99172],{"class":139},"a.T",[129,99174,99175],{"class":198},"#与上述代码一样\n",[129,99177,99178],{"class":131,"line":1326},[129,99179,93565],{"class":198},[129,99181,99182],{"class":131,"line":1332},[129,99183,93929],{"class":244},[129,99185,99186],{"class":131,"line":1344},[129,99187,99188],{"class":244},"array([[ 1,  4,  7, 10],\n",[129,99190,99191],{"class":131,"line":1626},[129,99192,99193],{"class":244},"       [ 2,  5,  8, 11],\n",[129,99195,99196],{"class":131,"line":1631},[129,99197,99198],{"class":244},"       [ 3,  6,  9, 12]])\n",[129,99200,99201],{"class":131,"line":1637},[129,99202,93929],{"class":244},[14,99204,99205],{},"也可以使用np.transpose()的形式",[14,99207,99208],{},"#多维数组进行转置 np.transpose()",[14,99210,99211],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99213,99214],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99216,99217],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99219,99220],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99222,99223],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99225,99226],{},"四维及以上的数组也是一样的道理",[120,99228,99230],{"className":30379,"code":99229,"language":30381,"meta":42,"style":42},"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",[126,99231,99232,99260,99265,99270,99275,99293,99298,99330,99335,99340,99345,99366],{"__ignoreMap":42},[129,99233,99234,99236,99238,99240,99242,99244,99246,99248,99250,99252,99254,99256,99258],{"class":131,"line":132},[129,99235,959],{"class":139},[129,99237,185],{"class":135},[129,99239,93003],{"class":139},[129,99241,357],{"class":188},[129,99243,517],{"class":139},[129,99245,464],{"class":188},[129,99247,93008],{"class":139},[129,99249,211],{"class":188},[129,99251,517],{"class":139},[129,99253,483],{"class":188},[129,99255,517],{"class":139},[129,99257,217],{"class":188},[129,99259,146],{"class":139},[129,99261,99262],{"class":131,"line":51},[129,99263,99264],{"class":139},"x.shape\n",[129,99266,99267],{"class":131,"line":1194},[129,99268,99269],{"class":198},"#结果：（3,6,2）\n",[129,99271,99272],{"class":131,"line":1209},[129,99273,99274],{"class":198},"#使用np.transpose()进行转置 变为(2,6,3)\n",[129,99276,99277,99280,99282,99284,99286,99288,99290],{"class":131,"line":1215},[129,99278,99279],{"class":139},"np.transpose(x,(",[129,99281,217],{"class":188},[129,99283,517],{"class":139},[129,99285,357],{"class":188},[129,99287,517],{"class":139},[129,99289,331],{"class":188},[129,99291,99292],{"class":139},")).shape\n",[129,99294,99295],{"class":131,"line":1229},[129,99296,99297],{"class":198},"#结果：(2,6,3)\n",[129,99299,99300,99302,99304,99306,99308,99310,99312,99314,99316,99318,99320,99322,99324,99326,99328],{"class":131,"line":1235},[129,99301,98507],{"class":139},[129,99303,185],{"class":135},[129,99305,93003],{"class":139},[129,99307,357],{"class":188},[129,99309,517],{"class":139},[129,99311,464],{"class":188},[129,99313,93008],{"class":139},[129,99315,211],{"class":188},[129,99317,517],{"class":139},[129,99319,217],{"class":188},[129,99321,517],{"class":139},[129,99323,357],{"class":188},[129,99325,517],{"class":139},[129,99327,483],{"class":188},[129,99329,146],{"class":139},[129,99331,99332],{"class":131,"line":1326},[129,99333,99334],{"class":139},"aaaa.shape\n",[129,99336,99337],{"class":131,"line":1332},[129,99338,99339],{"class":198},"#结果：（3，2，1，6）\n",[129,99341,99342],{"class":131,"line":1344},[129,99343,99344],{"class":198},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[129,99346,99347,99350,99352,99354,99356,99358,99360,99362,99364],{"class":131,"line":1626},[129,99348,99349],{"class":139},"np.transpose(aaaa,(",[129,99351,357],{"class":188},[129,99353,517],{"class":139},[129,99355,217],{"class":188},[129,99357,517],{"class":139},[129,99359,331],{"class":188},[129,99361,517],{"class":139},[129,99363,211],{"class":188},[129,99365,99292],{"class":139},[129,99367,99368],{"class":131,"line":1631},[129,99369,99370],{"class":198},"#结果：(2,1,3,6)\n",[5141,99372,99373],{},"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":42,"searchDepth":51,"depth":51,"links":99375},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99100,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99382,"title":99383,"body":99384,"description":53,"extension":54,"meta":100118,"navigation":56,"path":100119,"seo":100120,"stem":100121,"__hash__":100122},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99385,"toc":100116},[99386,99389,99392,99395,99398,99401,99404,99407,99410,99519,99522,99525,100113],[10,99387,99383],{"id":99388},"_8数组分割",[14,99390,99391],{},"split分割",[14,99393,99394],{},"numpy.split(ary,indics_or_sections,axis)",[14,99396,99397],{},"解释：",[14,99399,99400],{},"ary:被分割的数组",[14,99402,99403],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99405,99406],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99408,99409],{},"①一维数组的分割",[120,99411,99413],{"className":30379,"code":99412,"language":30381,"meta":42,"style":42},"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",[126,99414,99415,99431,99436,99445,99449,99454,99462,99466,99471,99476,99489,99493,99498,99510,99514],{"__ignoreMap":42},[129,99416,99417,99419,99421,99423,99425,99427,99429],{"class":131,"line":132},[129,99418,20],{"class":139},[129,99420,185],{"class":135},[129,99422,93003],{"class":139},[129,99424,357],{"class":188},[129,99426,517],{"class":139},[129,99428,559],{"class":188},[129,99430,146],{"class":139},[129,99432,99433],{"class":131,"line":51},[129,99434,99435],{"class":198},"#如果传入整数，必须能够平分，否则会报错\n",[129,99437,99438,99441,99443],{"class":131,"line":1194},[129,99439,99440],{"class":139},"np.split(a,",[129,99442,217],{"class":188},[129,99444,146],{"class":139},[129,99446,99447],{"class":131,"line":1209},[129,99448,93565],{"class":198},[129,99450,99451],{"class":131,"line":1215},[129,99452,99453],{"class":198},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[129,99455,99456,99458,99460],{"class":131,"line":1229},[129,99457,99440],{"class":139},[129,99459,432],{"class":188},[129,99461,146],{"class":139},[129,99463,99464],{"class":131,"line":1235},[129,99465,93565],{"class":198},[129,99467,99468],{"class":131,"line":1326},[129,99469,99470],{"class":198},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[129,99472,99473],{"class":131,"line":1332},[129,99474,99475],{"class":198},"#传入数组\n",[129,99477,99478,99481,99483,99485,99487],{"class":131,"line":1344},[129,99479,99480],{"class":139},"np.split(a,[",[129,99482,211],{"class":188},[129,99484,517],{"class":139},[129,99486,458],{"class":188},[129,99488,4671],{"class":139},[129,99490,99491],{"class":131,"line":1626},[129,99492,93565],{"class":198},[129,99494,99495],{"class":131,"line":1631},[129,99496,99497],{"class":198},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[129,99499,99500,99502,99504,99506,99508],{"class":131,"line":1637},[129,99501,99480],{"class":139},[129,99503,458],{"class":188},[129,99505,517],{"class":139},[129,99507,508],{"class":188},[129,99509,4671],{"class":139},[129,99511,99512],{"class":131,"line":1642},[129,99513,93565],{"class":198},[129,99515,99516],{"class":131,"line":1656},[129,99517,99518],{"class":198},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99520,99521],{},"②二维数组的分割",[14,99523,99524],{},"使用split()",[120,99526,99528],{"className":30379,"code":99527,"language":30381,"meta":42,"style":42},"#二维数组分割\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",[126,99529,99530,99535,99559,99564,99573,99577,99581,99586,99591,99596,99601,99606,99611,99616,99620,99633,99637,99641,99645,99649,99653,99658,99663,99668,99672,99677,99693,99697,99701,99706,99711,99716,99721,99726,99731,99736,99741,99746,99751,99756,99761,99766,99771,99776,99781,99786,99791,99795,99799,99819,99823,99827,99832,99837,99842,99847,99852,99857,99862,99867,99872,99877,99882,99887,99892,99897,99902,99907,99912,99917,99921,99926,99935,99939,99943,99947,99951,99955,99959,99963,99967,99971,99980,99984,99988,99992,99996,100000,100004,100008,100012,100016,100020,100024,100028,100032,100036,100040,100044,100048,100052,100056,100060,100064,100077,100081,100085,100089,100093,100097,100101,100105,100109],{"__ignoreMap":42},[129,99531,99532],{"class":131,"line":132},[129,99533,99534],{"class":198},"#二维数组分割\n",[129,99536,99537,99539,99541,99543,99545,99547,99549,99551,99553,99555,99557],{"class":131,"line":51},[129,99538,93307],{"class":139},[129,99540,185],{"class":135},[129,99542,93003],{"class":139},[129,99544,357],{"class":188},[129,99546,517],{"class":139},[129,99548,464],{"class":188},[129,99550,93008],{"class":139},[129,99552,483],{"class":188},[129,99554,517],{"class":139},[129,99556,483],{"class":188},[129,99558,146],{"class":139},[129,99560,99561],{"class":131,"line":1194},[129,99562,99563],{"class":198},"#默认axis=0  传入整数平均分,按行来的\n",[129,99565,99566,99569,99571],{"class":131,"line":1209},[129,99567,99568],{"class":139},"np.split(aa,",[129,99570,211],{"class":188},[129,99572,146],{"class":139},[129,99574,99575],{"class":131,"line":1215},[129,99576,95765],{"class":198},[129,99578,99579],{"class":131,"line":1229},[129,99580,93929],{"class":244},[129,99582,99583],{"class":131,"line":1235},[129,99584,99585],{"class":244},"[array([[ 1,  2,  3,  4,  5,  6],\n",[129,99587,99588],{"class":131,"line":1326},[129,99589,99590],{"class":244},"        [ 7,  8,  9, 10, 11, 12]]),\n",[129,99592,99593],{"class":131,"line":1332},[129,99594,99595],{"class":244}," array([[13, 14, 15, 16, 17, 18],\n",[129,99597,99598],{"class":131,"line":1344},[129,99599,99600],{"class":244},"        [19, 20, 21, 22, 23, 24]]),\n",[129,99602,99603],{"class":131,"line":1626},[129,99604,99605],{"class":244}," array([[25, 26, 27, 28, 29, 30],\n",[129,99607,99608],{"class":131,"line":1631},[129,99609,99610],{"class":244},"        [31, 32, 33, 34, 35, 36]])]\n",[129,99612,99613],{"class":131,"line":1637},[129,99614,99615],{"class":244}," '''\n",[129,99617,99618],{"class":131,"line":1642},[129,99619,99475],{"class":198},[129,99621,99622,99625,99627,99629,99631],{"class":131,"line":1656},[129,99623,99624],{"class":139},"np.split(aa,[",[129,99626,217],{"class":188},[129,99628,517],{"class":139},[129,99630,458],{"class":188},[129,99632,4671],{"class":139},[129,99634,99635],{"class":131,"line":1661},[129,99636,95765],{"class":198},[129,99638,99639],{"class":131,"line":1667},[129,99640,93929],{"class":244},[129,99642,99643],{"class":131,"line":1688},[129,99644,99585],{"class":244},[129,99646,99647],{"class":131,"line":1693},[129,99648,99590],{"class":244},[129,99650,99651],{"class":131,"line":1707},[129,99652,99595],{"class":244},[129,99654,99655],{"class":131,"line":1712},[129,99656,99657],{"class":244},"        [19, 20, 21, 22, 23, 24],\n",[129,99659,99660],{"class":131,"line":1741},[129,99661,99662],{"class":244},"        [25, 26, 27, 28, 29, 30]]),\n",[129,99664,99665],{"class":131,"line":1746},[129,99666,99667],{"class":244}," array([[31, 32, 33, 34, 35, 36]])]\n",[129,99669,99670],{"class":131,"line":1763},[129,99671,93929],{"class":244},[129,99673,99674],{"class":131,"line":1768},[129,99675,99676],{"class":198},"#axis=1 按照列来分\n",[129,99678,99679,99681,99683,99685,99687,99689,99691],{"class":131,"line":1773},[129,99680,99568],{"class":139},[129,99682,211],{"class":188},[129,99684,517],{"class":139},[129,99686,47515],{"class":5231},[129,99688,185],{"class":135},[129,99690,357],{"class":188},[129,99692,146],{"class":139},[129,99694,99695],{"class":131,"line":1778},[129,99696,95765],{"class":198},[129,99698,99699],{"class":131,"line":1792},[129,99700,93929],{"class":244},[129,99702,99703],{"class":131,"line":1797},[129,99704,99705],{"class":244},"[array([[ 1,  2],\n",[129,99707,99708],{"class":131,"line":2591},[129,99709,99710],{"class":244},"        [ 7,  8],\n",[129,99712,99713],{"class":131,"line":2605},[129,99714,99715],{"class":244},"        [13, 14],\n",[129,99717,99718],{"class":131,"line":2613},[129,99719,99720],{"class":244},"        [19, 20],\n",[129,99722,99723],{"class":131,"line":2618},[129,99724,99725],{"class":244},"        [25, 26],\n",[129,99727,99728],{"class":131,"line":2624},[129,99729,99730],{"class":244},"        [31, 32]]),\n",[129,99732,99733],{"class":131,"line":2630},[129,99734,99735],{"class":244}," array([[ 3,  4],\n",[129,99737,99738],{"class":131,"line":2635},[129,99739,99740],{"class":244},"        [ 9, 10],\n",[129,99742,99743],{"class":131,"line":7963},[129,99744,99745],{"class":244},"        [15, 16],\n",[129,99747,99748],{"class":131,"line":7987},[129,99749,99750],{"class":244},"        [21, 22],\n",[129,99752,99753],{"class":131,"line":7992},[129,99754,99755],{"class":244},"        [27, 28],\n",[129,99757,99758],{"class":131,"line":7998},[129,99759,99760],{"class":244},"        [33, 34]]),\n",[129,99762,99763],{"class":131,"line":8025},[129,99764,99765],{"class":244}," array([[ 5,  6],\n",[129,99767,99768],{"class":131,"line":8030},[129,99769,99770],{"class":244},"        [11, 12],\n",[129,99772,99773],{"class":131,"line":8036},[129,99774,99775],{"class":244},"        [17, 18],\n",[129,99777,99778],{"class":131,"line":8048},[129,99779,99780],{"class":244},"        [23, 24],\n",[129,99782,99783],{"class":131,"line":8060},[129,99784,99785],{"class":244},"        [29, 30],\n",[129,99787,99788],{"class":131,"line":8072},[129,99789,99790],{"class":244},"        [35, 36]])]\n",[129,99792,99793],{"class":131,"line":9731},[129,99794,99615],{"class":244},[129,99796,99797],{"class":131,"line":9756},[129,99798,99475],{"class":198},[129,99800,99801,99803,99805,99807,99809,99811,99813,99815,99817],{"class":131,"line":9779},[129,99802,99624],{"class":139},[129,99804,357],{"class":188},[129,99806,517],{"class":139},[129,99808,217],{"class":188},[129,99810,41610],{"class":139},[129,99812,47515],{"class":5231},[129,99814,185],{"class":135},[129,99816,357],{"class":188},[129,99818,146],{"class":139},[129,99820,99821],{"class":131,"line":9803},[129,99822,93565],{"class":198},[129,99824,99825],{"class":131,"line":9808},[129,99826,93929],{"class":244},[129,99828,99829],{"class":131,"line":9813},[129,99830,99831],{"class":244},"[array([[ 1],\n",[129,99833,99834],{"class":131,"line":9818},[129,99835,99836],{"class":244},"        [ 7],\n",[129,99838,99839],{"class":131,"line":9827},[129,99840,99841],{"class":244},"        [13],\n",[129,99843,99844],{"class":131,"line":9832},[129,99845,99846],{"class":244},"        [19],\n",[129,99848,99849],{"class":131,"line":9838},[129,99850,99851],{"class":244},"        [25],\n",[129,99853,99854],{"class":131,"line":9859},[129,99855,99856],{"class":244},"        [31]]),\n",[129,99858,99859],{"class":131,"line":9865},[129,99860,99861],{"class":244}," array([[ 2],\n",[129,99863,99864],{"class":131,"line":9879},[129,99865,99866],{"class":244},"        [ 8],\n",[129,99868,99869],{"class":131,"line":9885},[129,99870,99871],{"class":244},"        [14],\n",[129,99873,99874],{"class":131,"line":9912},[129,99875,99876],{"class":244},"        [20],\n",[129,99878,99879],{"class":131,"line":9921},[129,99880,99881],{"class":244},"        [26],\n",[129,99883,99884],{"class":131,"line":9927},[129,99885,99886],{"class":244},"        [32]]),\n",[129,99888,99889],{"class":131,"line":9935},[129,99890,99891],{"class":244}," array([[ 3,  4,  5,  6],\n",[129,99893,99894],{"class":131,"line":9940},[129,99895,99896],{"class":244},"        [ 9, 10, 11, 12],\n",[129,99898,99899],{"class":131,"line":16619},[129,99900,99901],{"class":244},"        [15, 16, 17, 18],\n",[129,99903,99904],{"class":131,"line":16625},[129,99905,99906],{"class":244},"        [21, 22, 23, 24],\n",[129,99908,99909],{"class":131,"line":16648},[129,99910,99911],{"class":244},"        [27, 28, 29, 30],\n",[129,99913,99914],{"class":131,"line":16654},[129,99915,99916],{"class":244},"        [33, 34, 35, 36]])]\n",[129,99918,99919],{"class":131,"line":16677},[129,99920,93929],{"class":244},[129,99922,99923],{"class":131,"line":16691},[129,99924,99925],{"class":198},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[129,99927,99928,99931,99933],{"class":131,"line":16711},[129,99929,99930],{"class":139},"np.vsplit(aa,",[129,99932,211],{"class":188},[129,99934,146],{"class":139},[129,99936,99937],{"class":131,"line":16717},[129,99938,93565],{"class":198},[129,99940,99941],{"class":131,"line":16728},[129,99942,93929],{"class":244},[129,99944,99945],{"class":131,"line":16751},[129,99946,99585],{"class":244},[129,99948,99949],{"class":131,"line":16773},[129,99950,99590],{"class":244},[129,99952,99953],{"class":131,"line":16778},[129,99954,99595],{"class":244},[129,99956,99957],{"class":131,"line":16784},[129,99958,99600],{"class":244},[129,99960,99961],{"class":131,"line":16798},[129,99962,99605],{"class":244},[129,99964,99965],{"class":131,"line":16811},[129,99966,99610],{"class":244},[129,99968,99969],{"class":131,"line":16816},[129,99970,93929],{"class":244},[129,99972,99973,99976,99978],{"class":131,"line":16830},[129,99974,99975],{"class":139},"np.hsplit(aa,",[129,99977,211],{"class":188},[129,99979,146],{"class":139},[129,99981,99982],{"class":131,"line":16835},[129,99983,93565],{"class":198},[129,99985,99986],{"class":131,"line":16841},[129,99987,93929],{"class":244},[129,99989,99990],{"class":131,"line":16846},[129,99991,99705],{"class":244},[129,99993,99994],{"class":131,"line":16860},[129,99995,99710],{"class":244},[129,99997,99998],{"class":131,"line":16865},[129,99999,99715],{"class":244},[129,100001,100002],{"class":131,"line":16870},[129,100003,99720],{"class":244},[129,100005,100006],{"class":131,"line":16884},[129,100007,99725],{"class":244},[129,100009,100010],{"class":131,"line":16896},[129,100011,99730],{"class":244},[129,100013,100014],{"class":131,"line":16901},[129,100015,99735],{"class":244},[129,100017,100018],{"class":131,"line":16914},[129,100019,99740],{"class":244},[129,100021,100022],{"class":131,"line":16919},[129,100023,99745],{"class":244},[129,100025,100026],{"class":131,"line":16924},[129,100027,99750],{"class":244},[129,100029,100030],{"class":131,"line":16929},[129,100031,99755],{"class":244},[129,100033,100034],{"class":131,"line":16942},[129,100035,99760],{"class":244},[129,100037,100038],{"class":131,"line":16947},[129,100039,99765],{"class":244},[129,100041,100042],{"class":131,"line":32634},[129,100043,99770],{"class":244},[129,100045,100046],{"class":131,"line":32640},[129,100047,99775],{"class":244},[129,100049,100050],{"class":131,"line":32646},[129,100051,99780],{"class":244},[129,100053,100054],{"class":131,"line":32652},[129,100055,99785],{"class":244},[129,100057,100058],{"class":131,"line":32658},[129,100059,99790],{"class":244},[129,100061,100062],{"class":131,"line":32669},[129,100063,93929],{"class":244},[129,100065,100066,100069,100071,100073,100075],{"class":131,"line":32675},[129,100067,100068],{"class":139},"np.vsplit(aa,[",[129,100070,217],{"class":188},[129,100072,517],{"class":139},[129,100074,458],{"class":188},[129,100076,4671],{"class":139},[129,100078,100079],{"class":131,"line":32695},[129,100080,93565],{"class":198},[129,100082,100083],{"class":131,"line":32701},[129,100084,93929],{"class":244},[129,100086,100087],{"class":131,"line":32712},[129,100088,99585],{"class":244},[129,100090,100091],{"class":131,"line":32718},[129,100092,99590],{"class":244},[129,100094,100095],{"class":131,"line":32724},[129,100096,99595],{"class":244},[129,100098,100099],{"class":131,"line":32730},[129,100100,99657],{"class":244},[129,100102,100103],{"class":131,"line":32736},[129,100104,99662],{"class":244},[129,100106,100107],{"class":131,"line":32742},[129,100108,99667],{"class":244},[129,100110,100111],{"class":131,"line":32748},[129,100112,99615],{"class":244},[5141,100114,100115],{},"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":42,"searchDepth":51,"depth":51,"links":100117},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99383,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100124,"title":100125,"body":100126,"description":53,"extension":54,"meta":100620,"navigation":56,"path":100621,"seo":100622,"stem":100623,"__hash__":100624},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100127,"toc":100611},[100128,100131,100134,100159,100163,100222,100274,100278,100280,100316,100370,100372,100410,100481,100485,100490,100494,100497,100530,100533,100537,100540,100543,100546,100549,100554,100558,100561,100564,100567,100570,100575,100579,100584,100587,100608],[10,100129,100125],{"id":100130},"_9数学函数",[14,100132,100133],{},"补充回顾：python的列表推导式",[120,100135,100137],{"className":30379,"code":100136,"language":30381,"meta":42,"style":42},"[1\u002Fi for i in a]\n",[126,100138,100139],{"__ignoreMap":42},[129,100140,100141,100143,100145,100147,100150,100152,100154,100156],{"class":131,"line":132},[129,100142,1029],{"class":139},[129,100144,357],{"class":188},[129,100146,723],{"class":135},[129,100148,100149],{"class":139},"i ",[129,100151,3039],{"class":135},[129,100153,9453],{"class":139},[129,100155,26044],{"class":135},[129,100157,100158],{"class":139}," a]\n",[71,100160,100162],{"id":100161},"_91-求倒数","9.1 求倒数",[120,100164,100166],{"className":30379,"code":100165,"language":30381,"meta":42,"style":42},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[126,100167,100168,100173,100201,100213],{"__ignoreMap":42},[129,100169,100170],{"class":131,"line":132},[129,100171,100172],{"class":198},"#数组求倒数\n",[129,100174,100175,100177,100179,100181,100183,100185,100187,100189,100191,100193,100195,100197,100199],{"class":131,"line":51},[129,100176,20],{"class":139},[129,100178,185],{"class":135},[129,100180,1029],{"class":139},[129,100182,357],{"class":188},[129,100184,517],{"class":139},[129,100186,217],{"class":188},[129,100188,517],{"class":139},[129,100190,211],{"class":188},[129,100192,517],{"class":139},[129,100194,432],{"class":188},[129,100196,517],{"class":139},[129,100198,458],{"class":188},[129,100200,33247],{"class":139},[129,100202,100203,100205,100207,100210],{"class":131,"line":1194},[129,100204,402],{"class":139},[129,100206,185],{"class":135},[129,100208,100209],{"class":139},"np.array(a)",[129,100211,100212],{"class":198},"#将列表转换为数组\n",[129,100214,100215,100217,100219],{"class":131,"line":1209},[129,100216,357],{"class":188},[129,100218,723],{"class":135},[129,100220,100221],{"class":139},"b\n",[120,100223,100225],{"className":30379,"code":100224,"language":30381,"meta":42,"style":42},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[126,100226,100227,100255,100264,100269],{"__ignoreMap":42},[129,100228,100229,100231,100233,100235,100237,100239,100241,100243,100245,100247,100249,100251,100253],{"class":131,"line":132},[129,100230,20],{"class":139},[129,100232,185],{"class":135},[129,100234,1029],{"class":139},[129,100236,357],{"class":188},[129,100238,517],{"class":139},[129,100240,217],{"class":188},[129,100242,517],{"class":139},[129,100244,211],{"class":188},[129,100246,517],{"class":139},[129,100248,432],{"class":188},[129,100250,517],{"class":139},[129,100252,458],{"class":188},[129,100254,33247],{"class":139},[129,100256,100257,100259,100261],{"class":131,"line":51},[129,100258,402],{"class":139},[129,100260,185],{"class":135},[129,100262,100263],{"class":139},"np.array(a)\n",[129,100265,100266],{"class":131,"line":1194},[129,100267,100268],{"class":198},"#调用numpy中的函数reciprocal()\n",[129,100270,100271],{"class":131,"line":1209},[129,100272,100273],{"class":139},"np.reciprocal(b)\n",[71,100275,100277],{"id":100276},"_92-求平方","9.2 求平方",[14,100279,94531],{},[120,100281,100283],{"className":30379,"code":100282,"language":30381,"meta":42,"style":42},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[126,100284,100285,100290,100295,100311],{"__ignoreMap":42},[129,100286,100287],{"class":131,"line":132},[129,100288,100289],{"class":198},"#square()，求平方\n",[129,100291,100292],{"class":131,"line":51},[129,100293,100294],{"class":198},"#一维数组\n",[129,100296,100297,100299,100301,100303,100305,100307,100309],{"class":131,"line":1194},[129,100298,20],{"class":139},[129,100300,185],{"class":135},[129,100302,93003],{"class":139},[129,100304,357],{"class":188},[129,100306,517],{"class":139},[129,100308,585],{"class":188},[129,100310,146],{"class":139},[129,100312,100313],{"class":131,"line":1209},[129,100314,100315],{"class":139},"np.square(a)\n",[120,100317,100319],{"className":30379,"code":100318,"language":30381,"meta":42,"style":42},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[126,100320,100321,100326,100331,100352],{"__ignoreMap":42},[129,100322,100323],{"class":131,"line":132},[129,100324,100325],{"class":198},"#或者通过循环遍历的形式来计算\n",[129,100327,100328],{"class":131,"line":51},[129,100329,100330],{"class":198},"#这是一个列表\n",[129,100332,100333,100336,100338,100340,100342,100344,100346,100349],{"class":131,"line":1194},[129,100334,100335],{"class":139},"[i",[129,100337,594],{"class":135},[129,100339,100149],{"class":139},[129,100341,3039],{"class":135},[129,100343,9453],{"class":139},[129,100345,26044],{"class":135},[129,100347,100348],{"class":139}," a]",[129,100350,100351],{"class":198},"#这个求完之后在数列当中\n",[129,100353,100354,100357,100359,100361,100363,100365,100367],{"class":131,"line":1209},[129,100355,100356],{"class":139},"np.array([i",[129,100358,594],{"class":135},[129,100360,100149],{"class":139},[129,100362,3039],{"class":135},[129,100364,9453],{"class":139},[129,100366,26044],{"class":135},[129,100368,100369],{"class":139}," a])\n",[14,100371,93292],{},[120,100373,100375],{"className":30379,"code":100374,"language":30381,"meta":42,"style":42},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[126,100376,100377,100381,100405],{"__ignoreMap":42},[129,100378,100379],{"class":131,"line":132},[129,100380,93302],{"class":198},[129,100382,100383,100385,100387,100389,100391,100393,100395,100397,100399,100401,100403],{"class":131,"line":51},[129,100384,93307],{"class":139},[129,100386,185],{"class":135},[129,100388,93003],{"class":139},[129,100390,357],{"class":188},[129,100392,517],{"class":139},[129,100394,662],{"class":188},[129,100396,93008],{"class":139},[129,100398,432],{"class":188},[129,100400,517],{"class":139},[129,100402,211],{"class":188},[129,100404,146],{"class":139},[129,100406,100407],{"class":131,"line":1194},[129,100408,100409],{"class":139},"np.square(aa)\n",[120,100411,100413],{"className":30379,"code":100412,"language":30381,"meta":42,"style":42},"#传统的方式\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",[126,100414,100415,100420,100429,100445,100461,100476],{"__ignoreMap":42},[129,100416,100417],{"class":131,"line":132},[129,100418,100419],{"class":198},"#传统的方式\n",[129,100421,100422,100424,100426],{"class":131,"line":51},[129,100423,98188],{"class":139},[129,100425,185],{"class":135},[129,100427,100428],{"class":139},"np.empty_like(aa)\n",[129,100430,100431,100433,100435,100437,100439,100441,100443],{"class":131,"line":1194},[129,100432,3039],{"class":135},[129,100434,9453],{"class":139},[129,100436,26044],{"class":135},[129,100438,32444],{"class":188},[129,100440,140],{"class":139},[129,100442,432],{"class":188},[129,100444,30787],{"class":139},[129,100446,100447,100449,100451,100453,100455,100457,100459],{"class":131,"line":1209},[129,100448,3215],{"class":135},[129,100450,9515],{"class":139},[129,100452,26044],{"class":135},[129,100454,32444],{"class":188},[129,100456,140],{"class":139},[129,100458,211],{"class":188},[129,100460,30787],{"class":139},[129,100462,100463,100466,100468,100471,100473],{"class":131,"line":1215},[129,100464,100465],{"class":139},"        bb[i,j]",[129,100467,185],{"class":135},[129,100469,100470],{"class":139},"aa[i,j]",[129,100472,594],{"class":135},[129,100474,100475],{"class":139},"aa[i,j]\n",[129,100477,100478],{"class":131,"line":1229},[129,100479,100480],{"class":139},"bb\n",[71,100482,100484],{"id":100483},"_93-求各元素的符号","9.3 求各元素的符号",[14,100486,100487],{},[40,100488],{"alt":42,"src":100489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[71,100491,100493],{"id":100492},"_94-modf函数","9.4 modf函数",[14,100495,100496],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[120,100498,100500],{"className":30379,"code":100499,"language":30381,"meta":42,"style":42},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[126,100501,100502,100525],{"__ignoreMap":42},[129,100503,100504,100506,100508,100510,100512,100514,100516,100518,100520,100523],{"class":131,"line":132},[129,100505,20],{"class":139},[129,100507,185],{"class":135},[129,100509,93003],{"class":139},[129,100511,671],{"class":135},[129,100513,585],{"class":188},[129,100515,517],{"class":139},[129,100517,585],{"class":188},[129,100519,517],{"class":139},[129,100521,100522],{"class":188},"0.3",[129,100524,146],{"class":139},[129,100526,100527],{"class":131,"line":51},[129,100528,100529],{"class":139},"np.modf(a)\n",[14,100531,100532],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[71,100534,100536],{"id":100535},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100538,100539],{},"np.cell()",[14,100541,100542],{},"np.floor()",[14,100544,100545],{},"np.rint()",[14,100547,100548],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100550,100551],{},[40,100552],{"alt":42,"src":100553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[71,100555,100557],{"id":100556},"_96-around函数","9.6 around()函数",[14,100559,100560],{},"around()函数也可以实现对数的小数位数进行操作",[14,100562,100563],{},"其中的参数：",[14,100565,100566],{},"1.要传的数组",[14,100568,100569],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100571,100572],{},[40,100573],{"alt":42,"src":100574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[71,100576,100578],{"id":100577},"_97-三角函数","9.7 三角函数",[14,100580,100581],{},[40,100582],{"alt":42,"src":100583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100585,100586],{},"引入图像模块非常重要",[120,100588,100590],{"className":30379,"code":100589,"language":30381,"meta":42,"style":42},"from matplotlib import pyplot as plt\n",[126,100591,100592],{"__ignoreMap":42},[129,100593,100594,100596,100599,100601,100604,100606],{"class":131,"line":132},[129,100595,30738],{"class":135},[129,100597,100598],{"class":139}," matplotlib ",[129,100600,30393],{"class":135},[129,100602,100603],{"class":139}," pyplot ",[129,100605,31384],{"class":135},[129,100607,31438],{"class":139},[5141,100609,100610],{},"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":42,"searchDepth":51,"depth":51,"links":100612},[100613,100614,100615,100616,100617,100618,100619],{"id":100161,"depth":51,"text":100162},{"id":100276,"depth":51,"text":100277},{"id":100483,"depth":51,"text":100484},{"id":100492,"depth":51,"text":100493},{"id":100535,"depth":51,"text":100536},{"id":100556,"depth":51,"text":100557},{"id":100577,"depth":51,"text":100578},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100125,"description":53},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100626,"title":100627,"body":100628,"description":53,"extension":54,"meta":100632,"navigation":56,"path":100633,"seo":100634,"stem":100635,"__hash__":100636},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100629,"toc":100630},[],{"title":42,"searchDepth":51,"depth":51,"links":100631},[],{"category":50421},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100627,"description":53},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100638,"title":100639,"body":100640,"description":42,"extension":54,"meta":102648,"navigation":56,"path":102649,"seo":102650,"stem":102651,"__hash__":102652},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100641,"toc":102624},[100642,100645,100649,100652,100655,100661,100664,100687,100690,100724,100727,100768,100772,100775,100868,100871,100915,100918,100935,100938,100952,100955,100958,101003,101006,101043,101047,101050,101056,101061,101081,101085,101088,101154,101157,101175,101179,101182,101211,101221,101227,101231,101234,101240,101251,101255,101258,101288,101291,101571,101574,101577,101588,101591,101594,101616,101623,101626,101644,101647,101650,101664,101672,101675,101701,101707,101710,101713,101723,101735,101755,101764,101784,101794,101818,101831,101845,101850,101891,101908,101933,101945,101965,101971,102016,102035,102052,102065,102081,102088,102100,102109,102144,102165,102190,102203,102227,102242,102267,102270,102291,102300,102303,102314,102318,102321,102327,102339,102346,102350,102353,102365,102368,102382,102385,102395,102405,102408,102448,102451,102455,102461,102464,102478,102482,102485,102518,102522,102525,102548,102556,102559,102565,102571,102574,102577,102605,102609,102612,102618,102621],[10,100643,100639],{"id":100644},"_1环境安装与第一个-mujoco-程序",[71,100646,100648],{"id":100647},"_1目标说明","1.目标说明",[14,100650,100651],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100653,100654],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[120,100656,100659],{"className":100657,"code":100658,"language":5202,"meta":42},[5200],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[126,100660,100658],{"__ignoreMap":42},[14,100662,100663],{},"需要掌握:",[83,100665,100666,100669,100672,100677,100682],{},[86,100667,100668],{},"Fedora 44 下 MuJoCo 的系统依赖",[86,100670,100671],{},"Python 虚拟环境创建",[86,100673,100674],{},[126,100675,100676],{},"mujoco.MjModel",[86,100678,100679],{},[126,100680,100681],{},"mujoco.MjData",[86,100683,100684],{},[126,100685,100686],{},"mujoco.mj_step(model, data)",[14,100688,100689],{},"MuJoCo 中最重要的两个对象:",[277,100691,100692,100702],{},[280,100693,100694],{},[283,100695,100696,100699],{},[286,100697,100698],{"align":23751},"对象",[286,100700,100701],{"align":23751},"含义",[324,100703,100704,100714],{},[283,100705,100706,100711],{},[329,100707,100708],{"align":23751},[126,100709,100710],{},"MjModel",[329,100712,100713],{"align":23751},"模型结构，来自 XML，基本不随时间变化",[283,100715,100716,100721],{},[329,100717,100718],{"align":23751},[126,100719,100720],{},"MjData",[329,100722,100723],{"align":23751},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100725,100726],{},"可以先用一个类比理解：",[277,100728,100729,100739],{},[280,100730,100731],{},[283,100732,100733,100736],{},[286,100734,100735],{"align":23751},"类比",[286,100737,100738],{"align":23751},"MuJoCo 对象",[324,100740,100741,100750,100759],{},[283,100742,100743,100746],{},[329,100744,100745],{"align":23751},"游戏地图和角色配置",[329,100747,100748],{"align":23751},[126,100749,100710],{},[283,100751,100752,100755],{},[329,100753,100754],{"align":23751},"游戏运行到当前帧的状态",[329,100756,100757],{"align":23751},[126,100758,100720],{},[283,100760,100761,100764],{},[329,100762,100763],{"align":23751},"前进一帧",[329,100765,100766],{"align":23751},[126,100767,100686],{},[71,100769,100771],{"id":100770},"_2环境与依赖安装","2.环境与依赖安装",[14,100773,100774],{},"Fedora 44 系统依赖:",[120,100776,100778],{"className":23837,"code":100777,"language":23839,"meta":42,"style":42},"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",[126,100779,100780,100792,100805,100818,100828,100838,100857],{"__ignoreMap":42},[129,100781,100782,100784,100786,100788,100790],{"class":131,"line":132},[129,100783,24577],{"class":1977},[129,100785,26316],{"class":244},[129,100787,23849],{"class":244},[129,100789,26401],{"class":188},[129,100791,24679],{"class":188},[129,100793,100794,100797,100800,100803],{"class":131,"line":51},[129,100795,100796],{"class":244},"  python3",[129,100798,100799],{"class":244}," python3-pip",[129,100801,100802],{"class":244}," python3-virtualenv",[129,100804,24679],{"class":188},[129,100806,100807,100810,100813,100816],{"class":131,"line":1194},[129,100808,100809],{"class":244},"  mesa-libGL",[129,100811,100812],{"class":244}," mesa-libGLU",[129,100814,100815],{"class":244}," mesa-dri-drivers",[129,100817,24679],{"class":188},[129,100819,100820,100823,100826],{"class":131,"line":1209},[129,100821,100822],{"class":244},"  libglvnd-glx",[129,100824,100825],{"class":244}," libglvnd-opengl",[129,100827,24679],{"class":188},[129,100829,100830,100833,100836],{"class":131,"line":1215},[129,100831,100832],{"class":244},"  glfw",[129,100834,100835],{"class":244}," glfw-devel",[129,100837,24679],{"class":188},[129,100839,100840,100843,100846,100849,100852,100855],{"class":131,"line":1229},[129,100841,100842],{"class":244},"  libX11",[129,100844,100845],{"class":244}," libXcursor",[129,100847,100848],{"class":244}," libXi",[129,100850,100851],{"class":244}," libXinerama",[129,100853,100854],{"class":244}," libXrandr",[129,100856,24679],{"class":188},[129,100858,100859,100862,100865],{"class":131,"line":1235},[129,100860,100861],{"class":244},"  gcc",[129,100863,100864],{"class":244}," gcc-c++",[129,100866,100867],{"class":244}," make\n",[14,100869,100870],{},"创建 Python 环境:",[120,100872,100874],{"className":23837,"code":100873,"language":23839,"meta":42,"style":42},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[126,100875,100876,100890,100898],{"__ignoreMap":42},[129,100877,100878,100881,100884,100887],{"class":131,"line":132},[129,100879,100880],{"class":1977},"python3",[129,100882,100883],{"class":188}," -m",[129,100885,100886],{"class":244}," venv",[129,100888,100889],{"class":244}," .venv\n",[129,100891,100892,100895],{"class":131,"line":51},[129,100893,100894],{"class":188},"source",[129,100896,100897],{"class":244}," .venv\u002Fbin\u002Factivate\n",[129,100899,100900,100902,100904,100907,100909,100912],{"class":131,"line":1194},[129,100901,30381],{"class":1977},[129,100903,100883],{"class":188},[129,100905,100906],{"class":244}," pip",[129,100908,23849],{"class":244},[129,100910,100911],{"class":188}," --upgrade",[129,100913,100914],{"class":244}," pip\n",[14,100916,100917],{},"pip 安装:",[120,100919,100921],{"className":23837,"code":100920,"language":23839,"meta":42,"style":42},"pip install \"mujoco>=2.3\" numpy\n",[126,100922,100923],{"__ignoreMap":42},[129,100924,100925,100927,100929,100932],{"class":131,"line":132},[129,100926,23846],{"class":1977},[129,100928,23849],{"class":244},[129,100930,100931],{"class":244}," \"mujoco>=2.3\"",[129,100933,100934],{"class":244}," numpy\n",[14,100936,100937],{},"安装完成后，先做最小检查：",[120,100939,100941],{"className":23837,"code":100940,"language":23839,"meta":42,"style":42},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[126,100942,100943],{"__ignoreMap":42},[129,100944,100945,100947,100949],{"class":131,"line":132},[129,100946,30381],{"class":1977},[129,100948,30359],{"class":188},[129,100950,100951],{"class":244}," \"import mujoco; print(mujoco.__version__)\"\n",[14,100953,100954],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,100956,100957],{},"conda 安装:",[120,100959,100961],{"className":23837,"code":100960,"language":23839,"meta":42,"style":42},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[126,100962,100963,100983,100993],{"__ignoreMap":42},[129,100964,100965,100967,100969,100971,100974,100977,100980],{"class":131,"line":132},[129,100966,30331],{"class":1977},[129,100968,29177],{"class":244},[129,100970,25116],{"class":188},[129,100972,100973],{"class":244}," mujoco-study",[129,100975,100976],{"class":244}," python=",[129,100978,100979],{"class":188},"3.10",[129,100981,100982],{"class":188}," -y\n",[129,100984,100985,100987,100990],{"class":131,"line":51},[129,100986,30331],{"class":1977},[129,100988,100989],{"class":244}," activate",[129,100991,100992],{"class":244}," mujoco-study\n",[129,100994,100995,100997,100999,101001],{"class":131,"line":1194},[129,100996,23846],{"class":1977},[129,100998,23849],{"class":244},[129,101000,100931],{"class":244},[129,101002,100934],{"class":244},[14,101004,101005],{},"版本冲突说明:",[83,101007,101008,101014,101024,101033],{},[86,101009,101010,101011,28386],{},"不要安装 ",[126,101012,101013],{},"mujoco-py",[86,101015,101016,101017,101019,101020,101023],{},"如果旧项目里同时安装了 ",[126,101018,101013],{}," 和 ",[126,101021,101022],{},"mujoco","，建议新建干净虚拟环境。",[86,101025,101026,101029,101030,28386],{},[126,101027,101028],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[126,101031,101032],{},"~\u002F.mujoco\u002Fmujoco210",[86,101034,101035,101036,82540,101039,101042],{},"离屏渲染可能涉及 OpenGL 后端，",[126,101037,101038],{},"MUJOCO_GL=egl",[126,101040,101041],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[71,101044,101046],{"id":101045},"_3核心概念解释","3.核心概念解释",[14,101048,101049],{},"MuJoCo 的基本执行流程:",[120,101051,101054],{"className":101052,"code":101053,"language":5202,"meta":42},[5200],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[126,101055,101053],{"__ignoreMap":42},[14,101057,101058,101060],{},[126,101059,100710],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101062,101063,101065,101066,352,101069,352,101072,352,101075,352,101078,28386],{},[126,101064,100720],{}," 存放仿真运行时状态，例如 ",[126,101067,101068],{},"data.time",[126,101070,101071],{},"data.qpos",[126,101073,101074],{},"data.qvel",[126,101076,101077],{},"data.ctrl",[126,101079,101080],{},"data.xpos",[100,101082,101084],{"id":101083},"xml-是什么","XML 是什么",[14,101086,101087],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[120,101089,101091],{"className":53068,"code":101090,"language":53070,"meta":42,"style":42},"\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",[126,101092,101093,101115,101146],{"__ignoreMap":42},[129,101094,101095,101097,101099,101101,101103,101105,101108,101110,101113],{"class":131,"line":132},[129,101096,1049],{"class":139},[129,101098,51801],{"class":51301},[129,101100,14935],{"class":1977},[129,101102,185],{"class":139},[129,101104,53492],{"class":244},[129,101106,101107],{"class":1977}," pos",[129,101109,185],{"class":139},[129,101111,101112],{"class":244},"\"0 0 1\"",[129,101114,51308],{"class":139},[129,101116,101117,101119,101122,101124,101126,101129,101131,101133,101135,101138,101140,101143],{"class":131,"line":51},[129,101118,52145],{"class":139},[129,101120,101121],{"class":51301},"geom",[129,101123,14935],{"class":1977},[129,101125,185],{"class":139},[129,101127,101128],{"class":244},"\"box_geom\"",[129,101130,53825],{"class":1977},[129,101132,185],{"class":139},[129,101134,53492],{"class":244},[129,101136,101137],{"class":1977}," size",[129,101139,185],{"class":139},[129,101141,101142],{"class":244},"\"0.1 0.1 0.1\"",[129,101144,101145],{"class":139},"\u002F>\n",[129,101147,101148,101150,101152],{"class":131,"line":1194},[129,101149,51786],{"class":139},[129,101151,51801],{"class":51301},[129,101153,51308],{"class":139},[14,101155,101156],{},"这段意思是：",[83,101158,101159,101165,101172],{},[86,101160,101161,101162,101164],{},"创建一个叫 ",[126,101163,53715],{}," 的刚体。",[86,101166,101167,101168,101171],{},"它初始放在 ",[126,101169,101170],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[86,101173,101174],{},"它里面有一个盒子形状的几何体。",[100,101176,101178],{"id":101177},"timestep-是什么","timestep 是什么",[14,101180,101181],{},"XML 里的：",[120,101183,101185],{"className":53068,"code":101184,"language":53070,"meta":42,"style":42},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[126,101186,101187],{"__ignoreMap":42},[129,101188,101189,101191,101193,101196,101198,101201,101204,101206,101209],{"class":131,"line":132},[129,101190,1049],{"class":139},[129,101192,69167],{"class":51301},[129,101194,101195],{"class":1977}," timestep",[129,101197,185],{"class":139},[129,101199,101200],{"class":244},"\"0.01\"",[129,101202,101203],{"class":1977}," gravity",[129,101205,185],{"class":139},[129,101207,101208],{"class":244},"\"0 0 -9.81\"",[129,101210,101145],{"class":139},[14,101212,101213,101214,101217,101218,101220],{},"表示每调用一次 ",[126,101215,101216],{},"mj_step","，仿真时间前进 ",[126,101219,38987],{}," 秒。循环 100 次，大约就是 1 秒：",[120,101222,101225],{"className":101223,"code":101224,"language":5202,"meta":42},[5200],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[126,101226,101224],{"__ignoreMap":42},[100,101228,101230],{"id":101229},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101232,101233],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[120,101235,101238],{"className":101236,"code":101237,"language":5202,"meta":42},[5200],"x y z qw qx qy qz\n",[126,101239,101237],{"__ignoreMap":42},[14,101241,101242,101243,101246,101247,101250],{},"表示一个自由刚体的位置和姿态。其中 ",[126,101244,101245],{},"x y z"," 是位置，",[126,101248,101249],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[71,101252,101254],{"id":101253},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101256,101257],{},"新建文件:",[120,101259,101261],{"className":23837,"code":101260,"language":23839,"meta":42,"style":42},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[126,101262,101263,101273,101280],{"__ignoreMap":42},[129,101264,101265,101268,101270],{"class":131,"line":132},[129,101266,101267],{"class":1977},"mkdir",[129,101269,29217],{"class":188},[129,101271,101272],{"class":244}," mujoco_tutorial\n",[129,101274,101275,101278],{"class":131,"line":51},[129,101276,101277],{"class":188},"cd",[129,101279,101272],{"class":244},[129,101281,101282,101285],{"class":131,"line":1194},[129,101283,101284],{"class":1977},"touch",[129,101286,101287],{"class":244}," ch1_first_sim.py\n",[14,101289,101290],{},"写入:",[120,101292,101294],{"className":30379,"code":101293,"language":30381,"meta":42,"style":42},"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",[126,101295,101296,101303,101307,101311,101321,101326,101331,101335,101340,101345,101349,101354,101359,101364,101369,101374,101379,101383,101387,101391,101404,101418,101428,101432,101444,101456,101468,101480,101492,101496,101513,101518,101522,101533,101544,101548,101552,101566],{"__ignoreMap":42},[129,101297,101298,101300],{"class":131,"line":132},[129,101299,30393],{"class":135},[129,101301,101302],{"class":139}," mujoco\n",[129,101304,101305],{"class":131,"line":51},[129,101306,2414],{"emptyLinePlaceholder":56},[129,101308,101309],{"class":131,"line":1194},[129,101310,2414],{"emptyLinePlaceholder":56},[129,101312,101313,101316,101318],{"class":131,"line":1209},[129,101314,101315],{"class":188},"XML",[129,101317,13579],{"class":135},[129,101319,101320],{"class":244}," \"\"\"\n",[129,101322,101323],{"class":131,"line":1215},[129,101324,101325],{"class":244},"\u003Cmujoco model=\"first_sim\">\n",[129,101327,101328],{"class":131,"line":1229},[129,101329,101330],{"class":244},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[129,101332,101333],{"class":131,"line":1235},[129,101334,2414],{"emptyLinePlaceholder":56},[129,101336,101337],{"class":131,"line":1326},[129,101338,101339],{"class":244},"  \u003Cworldbody>\n",[129,101341,101342],{"class":131,"line":1332},[129,101343,101344],{"class":244},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[129,101346,101347],{"class":131,"line":1344},[129,101348,2414],{"emptyLinePlaceholder":56},[129,101350,101351],{"class":131,"line":1626},[129,101352,101353],{"class":244},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[129,101355,101356],{"class":131,"line":1631},[129,101357,101358],{"class":244},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[129,101360,101361],{"class":131,"line":1637},[129,101362,101363],{"class":244},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[129,101365,101366],{"class":131,"line":1642},[129,101367,101368],{"class":244},"    \u003C\u002Fbody>\n",[129,101370,101371],{"class":131,"line":1656},[129,101372,101373],{"class":244},"  \u003C\u002Fworldbody>\n",[129,101375,101376],{"class":131,"line":1661},[129,101377,101378],{"class":244},"\u003C\u002Fmujoco>\n",[129,101380,101381],{"class":131,"line":1667},[129,101382,95699],{"class":244},[129,101384,101385],{"class":131,"line":1688},[129,101386,2414],{"emptyLinePlaceholder":56},[129,101388,101389],{"class":131,"line":1693},[129,101390,2414],{"emptyLinePlaceholder":56},[129,101392,101393,101395,101397,101400,101402],{"class":131,"line":1707},[129,101394,31948],{"class":135},[129,101396,1987],{"class":1977},[129,101398,101399],{"class":139},"() -> ",[129,101401,95687],{"class":188},[129,101403,3753],{"class":139},[129,101405,101406,101409,101411,101414,101416],{"class":131,"line":1712},[129,101407,101408],{"class":139},"    model ",[129,101410,185],{"class":135},[129,101412,101413],{"class":139}," mujoco.MjModel.from_xml_string(",[129,101415,101315],{"class":188},[129,101417,146],{"class":139},[129,101419,101420,101423,101425],{"class":131,"line":1741},[129,101421,101422],{"class":139},"    data ",[129,101424,185],{"class":135},[129,101426,101427],{"class":139}," mujoco.MjData(model)\n",[129,101429,101430],{"class":131,"line":1746},[129,101431,2414],{"emptyLinePlaceholder":56},[129,101433,101434,101436,101438,101441],{"class":131,"line":1763},[129,101435,31300],{"class":188},[129,101437,140],{"class":139},[129,101439,101440],{"class":244},"\"nq:\"",[129,101442,101443],{"class":139},", model.nq)\n",[129,101445,101446,101448,101450,101453],{"class":131,"line":1768},[129,101447,31300],{"class":188},[129,101449,140],{"class":139},[129,101451,101452],{"class":244},"\"nv:\"",[129,101454,101455],{"class":139},", model.nv)\n",[129,101457,101458,101460,101462,101465],{"class":131,"line":1773},[129,101459,31300],{"class":188},[129,101461,140],{"class":139},[129,101463,101464],{"class":244},"\"nu:\"",[129,101466,101467],{"class":139},", model.nu)\n",[129,101469,101470,101472,101474,101477],{"class":131,"line":1778},[129,101471,31300],{"class":188},[129,101473,140],{"class":139},[129,101475,101476],{"class":244},"\"initial time:\"",[129,101478,101479],{"class":139},", data.time)\n",[129,101481,101482,101484,101486,101489],{"class":131,"line":1792},[129,101483,31300],{"class":188},[129,101485,140],{"class":139},[129,101487,101488],{"class":244},"\"initial qpos:\"",[129,101490,101491],{"class":139},", data.qpos.copy())\n",[129,101493,101494],{"class":131,"line":1797},[129,101495,2414],{"emptyLinePlaceholder":56},[129,101497,101498,101500,101503,101505,101507,101509,101511],{"class":131,"line":2591},[129,101499,3215],{"class":135},[129,101501,101502],{"class":139}," _ ",[129,101504,26044],{"class":135},[129,101506,32444],{"class":188},[129,101508,140],{"class":139},[129,101510,450],{"class":188},[129,101512,30787],{"class":139},[129,101514,101515],{"class":131,"line":2605},[129,101516,101517],{"class":139},"        mujoco.mj_step(model, data)\n",[129,101519,101520],{"class":131,"line":2613},[129,101521,2414],{"emptyLinePlaceholder":56},[129,101523,101524,101526,101528,101531],{"class":131,"line":2618},[129,101525,31300],{"class":188},[129,101527,140],{"class":139},[129,101529,101530],{"class":244},"\"final time:\"",[129,101532,101479],{"class":139},[129,101534,101535,101537,101539,101542],{"class":131,"line":2624},[129,101536,31300],{"class":188},[129,101538,140],{"class":139},[129,101540,101541],{"class":244},"\"final qpos:\"",[129,101543,101491],{"class":139},[129,101545,101546],{"class":131,"line":2630},[129,101547,2414],{"emptyLinePlaceholder":56},[129,101549,101550],{"class":131,"line":2635},[129,101551,2414],{"emptyLinePlaceholder":56},[129,101553,101554,101556,101558,101561,101564],{"class":131,"line":7963},[129,101555,1545],{"class":135},[129,101557,31221],{"class":188},[129,101559,101560],{"class":135}," ==",[129,101562,101563],{"class":244}," \"__main__\"",[129,101565,3753],{"class":139},[129,101567,101568],{"class":131,"line":7987},[129,101569,101570],{"class":139},"    main()\n",[100,101572,101573],{"id":101573},"代码逐段解释",[14,101575,101576],{},"导入库：",[120,101578,101580],{"className":30379,"code":101579,"language":30381,"meta":42,"style":42},"import mujoco\n",[126,101581,101582],{"__ignoreMap":42},[129,101583,101584,101586],{"class":131,"line":132},[129,101585,30393],{"class":135},[129,101587,101302],{"class":139},[14,101589,101590],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101592,101593],{},"定义 XML：",[120,101595,101597],{"className":30379,"code":101596,"language":30381,"meta":42,"style":42},"XML = \"\"\"\n...\n\"\"\"\n",[126,101598,101599,101607,101612],{"__ignoreMap":42},[129,101600,101601,101603,101605],{"class":131,"line":132},[129,101602,101315],{"class":188},[129,101604,13579],{"class":135},[129,101606,101320],{"class":244},[129,101608,101609],{"class":131,"line":51},[129,101610,101611],{"class":244},"...\n",[129,101613,101614],{"class":131,"line":1194},[129,101615,95699],{"class":244},[14,101617,101618,101619,101622],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[126,101620,101621],{},"freejoint"," 的方块。",[14,101624,101625],{},"编译模型：",[120,101627,101629],{"className":30379,"code":101628,"language":30381,"meta":42,"style":42},"model = mujoco.MjModel.from_xml_string(XML)\n",[126,101630,101631],{"__ignoreMap":42},[129,101632,101633,101636,101638,101640,101642],{"class":131,"line":132},[129,101634,101635],{"class":139},"model ",[129,101637,185],{"class":135},[129,101639,101413],{"class":139},[129,101641,101315],{"class":188},[129,101643,146],{"class":139},[14,101645,101646],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101648,101649],{},"创建数据：",[120,101651,101653],{"className":30379,"code":101652,"language":30381,"meta":42,"style":42},"data = mujoco.MjData(model)\n",[126,101654,101655],{"__ignoreMap":42},[129,101656,101657,101660,101662],{"class":131,"line":132},[129,101658,101659],{"class":139},"data ",[129,101661,185],{"class":135},[129,101663,101427],{"class":139},[14,101665,101666,101668,101669,101671],{},[126,101667,33402],{}," 会保存仿真当前状态。刚创建时，时间是 ",[126,101670,331],{},"，方块还在初始位置。",[14,101673,101674],{},"推进仿真：",[120,101676,101678],{"className":30379,"code":101677,"language":30381,"meta":42,"style":42},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[126,101679,101680,101696],{"__ignoreMap":42},[129,101681,101682,101684,101686,101688,101690,101692,101694],{"class":131,"line":132},[129,101683,3039],{"class":135},[129,101685,101502],{"class":139},[129,101687,26044],{"class":135},[129,101689,32444],{"class":188},[129,101691,140],{"class":139},[129,101693,450],{"class":188},[129,101695,30787],{"class":139},[129,101697,101698],{"class":131,"line":51},[129,101699,101700],{"class":139},"    mujoco.mj_step(model, data)\n",[14,101702,101703,101704,101706],{},"每次 ",[126,101705,101216],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[100,101708,101709],{"id":101709},"代码逐行细讲",[14,101711,101712],{},"下面把完整代码按新手视角拆开讲。",[120,101714,101715],{"className":30379,"code":101579,"language":30381,"meta":42,"style":42},[126,101716,101717],{"__ignoreMap":42},[129,101718,101719,101721],{"class":131,"line":132},[129,101720,30393],{"class":135},[129,101722,101302],{"class":139},[14,101724,101725,101727,101728,352,101730,352,101732,28386],{},[126,101726,30393],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[126,101729,100676],{},[126,101731,100681],{},[126,101733,101734],{},"mujoco.mj_step",[120,101736,101737],{"className":30379,"code":101596,"language":30381,"meta":42,"style":42},[126,101738,101739,101747,101751],{"__ignoreMap":42},[129,101740,101741,101743,101745],{"class":131,"line":132},[129,101742,101315],{"class":188},[129,101744,13579],{"class":135},[129,101746,101320],{"class":244},[129,101748,101749],{"class":131,"line":51},[129,101750,101611],{"class":244},[129,101752,101753],{"class":131,"line":1194},[129,101754,95699],{"class":244},[14,101756,101757,101759,101760,101763],{},[126,101758,101315],{}," 是一个变量名。右边的三引号 ",[126,101761,101762],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[120,101765,101766],{"className":53068,"code":101325,"language":53070,"meta":42,"style":42},[126,101767,101768],{"__ignoreMap":42},[129,101769,101770,101772,101774,101777,101779,101782],{"class":131,"line":132},[129,101771,1049],{"class":139},[129,101773,101022],{"class":51301},[129,101775,101776],{"class":1977}," model",[129,101778,185],{"class":139},[129,101780,101781],{"class":244},"\"first_sim\"",[129,101783,51308],{"class":139},[14,101785,101786,101787,101790,101791,28386],{},"这是 XML 的根标签。",[126,101788,101789],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[126,101792,101793],{},"first_sim",[120,101795,101796],{"className":53068,"code":101184,"language":53070,"meta":42,"style":42},[126,101797,101798],{"__ignoreMap":42},[129,101799,101800,101802,101804,101806,101808,101810,101812,101814,101816],{"class":131,"line":132},[129,101801,1049],{"class":139},[129,101803,69167],{"class":51301},[129,101805,101195],{"class":1977},[129,101807,185],{"class":139},[129,101809,101200],{"class":244},[129,101811,101203],{"class":1977},[129,101813,185],{"class":139},[129,101815,101208],{"class":244},[129,101817,101145],{"class":139},[14,101819,101820,101822,101823,101826,101827,101830],{},[126,101821,69167],{}," 用来设置仿真参数。",[126,101824,101825],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[126,101828,101829],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[120,101832,101834],{"className":53068,"code":101833,"language":53070,"meta":42,"style":42},"\u003Cworldbody>\n",[126,101835,101836],{"__ignoreMap":42},[129,101837,101838,101840,101843],{"class":131,"line":132},[129,101839,1049],{"class":139},[129,101841,101842],{"class":51301},"worldbody",[129,101844,51308],{"class":139},[14,101846,101847,101849],{},[126,101848,101842],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[120,101851,101853],{"className":53068,"code":101852,"language":53070,"meta":42,"style":42},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[126,101854,101855],{"__ignoreMap":42},[129,101856,101857,101859,101861,101863,101865,101868,101870,101872,101875,101877,101879,101882,101884,101886,101889],{"class":131,"line":132},[129,101858,1049],{"class":139},[129,101860,101121],{"class":51301},[129,101862,14935],{"class":1977},[129,101864,185],{"class":139},[129,101866,101867],{"class":244},"\"floor\"",[129,101869,53825],{"class":1977},[129,101871,185],{"class":139},[129,101873,101874],{"class":244},"\"plane\"",[129,101876,101137],{"class":1977},[129,101878,185],{"class":139},[129,101880,101881],{"class":244},"\"2 2 0.1\"",[129,101883,78768],{"class":1977},[129,101885,185],{"class":139},[129,101887,101888],{"class":244},"\"0.8 0.8 0.8 1\"",[129,101890,101145],{"class":139},[14,101892,101893,101894,101896,101897,101900,101901,101904,101905,101907],{},"这行创建地面。",[126,101895,101121],{}," 是几何体。",[126,101898,101899],{},"name=\"floor\""," 是名字。",[126,101902,101903],{},"type=\"plane\""," 表示平面。",[126,101906,55111],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[120,101909,101911],{"className":53068,"code":101910,"language":53070,"meta":42,"style":42},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[126,101912,101913],{"__ignoreMap":42},[129,101914,101915,101917,101919,101921,101923,101925,101927,101929,101931],{"class":131,"line":132},[129,101916,1049],{"class":139},[129,101918,51801],{"class":51301},[129,101920,14935],{"class":1977},[129,101922,185],{"class":139},[129,101924,53492],{"class":244},[129,101926,101107],{"class":1977},[129,101928,185],{"class":139},[129,101930,101112],{"class":244},[129,101932,51308],{"class":139},[14,101934,101935,101936,28386,101938,101941,101942,101944],{},"这行创建一个刚体，名字叫 ",[126,101937,53715],{},[126,101939,101940],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[126,101943,101170],{},"，也就是离地面 1 米高。",[120,101946,101948],{"className":53068,"code":101947,"language":53070,"meta":42,"style":42},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[126,101949,101950],{"__ignoreMap":42},[129,101951,101952,101954,101956,101958,101960,101963],{"class":131,"line":132},[129,101953,1049],{"class":139},[129,101955,101621],{"class":51301},[129,101957,14935],{"class":1977},[129,101959,185],{"class":139},[129,101961,101962],{"class":244},"\"box_free\"",[129,101964,101145],{"class":139},[14,101966,101967,101968,101970],{},"这行很重要。",[126,101969,101621],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[120,101972,101974],{"className":53068,"code":101973,"language":53070,"meta":42,"style":42},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[126,101975,101976],{"__ignoreMap":42},[129,101977,101978,101980,101982,101984,101986,101988,101990,101992,101994,101996,101998,102000,102003,102005,102007,102009,102011,102014],{"class":131,"line":132},[129,101979,1049],{"class":139},[129,101981,101121],{"class":51301},[129,101983,14935],{"class":1977},[129,101985,185],{"class":139},[129,101987,101128],{"class":244},[129,101989,53825],{"class":1977},[129,101991,185],{"class":139},[129,101993,53492],{"class":244},[129,101995,101137],{"class":1977},[129,101997,185],{"class":139},[129,101999,101142],{"class":244},[129,102001,102002],{"class":1977}," mass",[129,102004,185],{"class":139},[129,102006,3692],{"class":244},[129,102008,78768],{"class":1977},[129,102010,185],{"class":139},[129,102012,102013],{"class":244},"\"1 0 0 1\"",[129,102015,101145],{"class":139},[14,102017,102018,102019,102022,102023,102026,102027,102030,102031,102034],{},"这行给 box body 添加一个盒子形状。",[126,102020,102021],{},"type=\"box\""," 表示形状是盒子。",[126,102024,102025],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[126,102028,102029],{},"mass=\"1\""," 表示质量是 1。",[126,102032,102033],{},"rgba=\"1 0 0 1\""," 表示红色。",[120,102036,102038],{"className":30379,"code":102037,"language":30381,"meta":42,"style":42},"def main() -> None:\n",[126,102039,102040],{"__ignoreMap":42},[129,102041,102042,102044,102046,102048,102050],{"class":131,"line":132},[129,102043,31948],{"class":135},[129,102045,1987],{"class":1977},[129,102047,101399],{"class":139},[129,102049,95687],{"class":188},[129,102051,3753],{"class":139},[14,102053,102054,102056,102057,102060,102061,102064],{},[126,102055,31948],{}," 用来定义函数。这里定义了一个叫 ",[126,102058,102059],{},"main"," 的函数。",[126,102062,102063],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[120,102066,102067],{"className":30379,"code":101628,"language":30381,"meta":42,"style":42},[126,102068,102069],{"__ignoreMap":42},[129,102070,102071,102073,102075,102077,102079],{"class":131,"line":132},[129,102072,101635],{"class":139},[129,102074,185],{"class":135},[129,102076,101413],{"class":139},[129,102078,101315],{"class":188},[129,102080,146],{"class":139},[14,102082,102083,102084,102087],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[126,102085,102086],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[120,102089,102090],{"className":30379,"code":101652,"language":30381,"meta":42,"style":42},[126,102091,102092],{"__ignoreMap":42},[129,102093,102094,102096,102098],{"class":131,"line":132},[129,102095,101659],{"class":139},[129,102097,185],{"class":135},[129,102099,101427],{"class":139},[14,102101,102102,102103,102105,102106,102108],{},"这行创建仿真数据。",[126,102104,33402],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[126,102107,33402],{}," 都会变化。",[120,102110,102112],{"className":30379,"code":102111,"language":30381,"meta":42,"style":42},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[126,102113,102114,102124,102134],{"__ignoreMap":42},[129,102115,102116,102118,102120,102122],{"class":131,"line":132},[129,102117,30416],{"class":188},[129,102119,140],{"class":139},[129,102121,101440],{"class":244},[129,102123,101443],{"class":139},[129,102125,102126,102128,102130,102132],{"class":131,"line":51},[129,102127,30416],{"class":188},[129,102129,140],{"class":139},[129,102131,101452],{"class":244},[129,102133,101455],{"class":139},[129,102135,102136,102138,102140,102142],{"class":131,"line":1194},[129,102137,30416],{"class":188},[129,102139,140],{"class":139},[129,102141,101464],{"class":244},[129,102143,101467],{"class":139},[14,102145,102146,102148,102149,102152,102153,102156,102157,102160,102161,102164],{},[126,102147,30416],{}," 用来输出信息。",[126,102150,102151],{},"model.nq"," 是位置变量数量，",[126,102154,102155],{},"model.nv"," 是速度变量数量，",[126,102158,102159],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[126,102162,102163],{},"nu"," 是 0。",[120,102166,102168],{"className":30379,"code":102167,"language":30381,"meta":42,"style":42},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[126,102169,102170,102180],{"__ignoreMap":42},[129,102171,102172,102174,102176,102178],{"class":131,"line":132},[129,102173,30416],{"class":188},[129,102175,140],{"class":139},[129,102177,101476],{"class":244},[129,102179,101479],{"class":139},[129,102181,102182,102184,102186,102188],{"class":131,"line":51},[129,102183,30416],{"class":188},[129,102185,140],{"class":139},[129,102187,101488],{"class":244},[129,102189,101491],{"class":139},[14,102191,102192,102193,102195,102196,102198,102199,102202],{},"这里打印初始时间和初始位置。",[126,102194,101068],{}," 一开始是 0。",[126,102197,101071],{}," 是位置数组。",[126,102200,102201],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[120,102204,102205],{"className":30379,"code":101677,"language":30381,"meta":42,"style":42},[126,102206,102207,102223],{"__ignoreMap":42},[129,102208,102209,102211,102213,102215,102217,102219,102221],{"class":131,"line":132},[129,102210,3039],{"class":135},[129,102212,101502],{"class":139},[129,102214,26044],{"class":135},[129,102216,32444],{"class":188},[129,102218,140],{"class":139},[129,102220,450],{"class":188},[129,102222,30787],{"class":139},[129,102224,102225],{"class":131,"line":51},[129,102226,101700],{"class":139},[14,102228,102229,102231,102232,102235,102236,102238,102239,102241],{},[126,102230,3039],{}," 是循环。",[126,102233,102234],{},"range(100)"," 表示循环 100 次。",[126,102237,1131],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[126,102240,101216],{},"，仿真就前进一步。",[120,102243,102245],{"className":30379,"code":102244,"language":30381,"meta":42,"style":42},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[126,102246,102247,102257],{"__ignoreMap":42},[129,102248,102249,102251,102253,102255],{"class":131,"line":132},[129,102250,30416],{"class":188},[129,102252,140],{"class":139},[129,102254,101530],{"class":244},[129,102256,101479],{"class":139},[129,102258,102259,102261,102263,102265],{"class":131,"line":51},[129,102260,30416],{"class":188},[129,102262,140],{"class":139},[129,102264,101541],{"class":244},[129,102266,101491],{"class":139},[14,102268,102269],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[120,102271,102273],{"className":30379,"code":102272,"language":30381,"meta":42,"style":42},"if __name__ == \"__main__\":\n    main()\n",[126,102274,102275,102287],{"__ignoreMap":42},[129,102276,102277,102279,102281,102283,102285],{"class":131,"line":132},[129,102278,1545],{"class":135},[129,102280,31221],{"class":188},[129,102282,101560],{"class":135},[129,102284,101563],{"class":244},[129,102286,3753],{"class":139},[129,102288,102289],{"class":131,"line":51},[129,102290,101570],{"class":139},[14,102292,102293,102294,102297,102298,28386],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[126,102295,102296],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[126,102299,102296],{},[14,102301,102302],{},"运行:",[120,102304,102306],{"className":23837,"code":102305,"language":23839,"meta":42,"style":42},"python ch1_first_sim.py\n",[126,102307,102308],{"__ignoreMap":42},[129,102309,102310,102312],{"class":131,"line":132},[129,102311,30381],{"class":1977},[129,102313,101287],{"class":244},[71,102315,102317],{"id":102316},"_5运行结果说明","5.运行结果说明",[14,102319,102320],{},"你应该看到类似输出:",[120,102322,102325],{"className":102323,"code":102324,"language":5202,"meta":42},[5200],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[126,102326,102324],{"__ignoreMap":42},[14,102328,102329,102331,102332,102335,102336,28386],{},[126,102330,101621],{}," 有 7 个位置变量: ",[126,102333,102334],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[126,102337,102338],{},"vx vy vz wx wy wz",[14,102340,102341,102342,102345],{},"你还会看到 ",[126,102343,102344],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[71,102347,102349],{"id":102348},"_6验证步骤","6.验证步骤",[14,102351,102352],{},"确认版本:",[120,102354,102355],{"className":23837,"code":100940,"language":23839,"meta":42,"style":42},[126,102356,102357],{"__ignoreMap":42},[129,102358,102359,102361,102363],{"class":131,"line":132},[129,102360,30381],{"class":1977},[129,102362,30359],{"class":188},[129,102364,100951],{"class":244},[14,102366,102367],{},"确认导入的是官方 bindings:",[120,102369,102371],{"className":23837,"code":102370,"language":23839,"meta":42,"style":42},"python -c \"import mujoco; print(mujoco)\"\n",[126,102372,102373],{"__ignoreMap":42},[129,102374,102375,102377,102379],{"class":131,"line":132},[129,102376,30381],{"class":1977},[129,102378,30359],{"class":188},[129,102380,102381],{"class":244}," \"import mujoco; print(mujoco)\"\n",[14,102383,102384],{},"运行程序:",[120,102386,102387],{"className":23837,"code":102305,"language":23839,"meta":42,"style":42},[126,102388,102389],{"__ignoreMap":42},[129,102390,102391,102393],{"class":131,"line":132},[129,102392,30381],{"class":1977},[129,102394,101287],{"class":244},[14,102396,102397,102398,102401,102402,28386],{},"检查 ",[126,102399,102400],{},"final time"," 是否约等于 ",[126,102403,102404],{},"1.0",[14,102406,102407],{},"再做几个小实验：",[83,102409,102410,102420,102428,102441],{},[86,102411,102412,102413,102415,102416,102419],{},"把 ",[126,102414,101940],{}," 改成 ",[126,102417,102418],{},"pos=\"0 0 2\"","，观察初始高度变化。",[86,102421,102412,102422,102415,102424,102427],{},[126,102423,101829],{},[126,102425,102426],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[86,102429,102412,102430,102415,102432,102435,102436,102438,102439,28386],{},[126,102431,101825],{},[126,102433,102434],{},"timestep=\"0.005\"","，观察 100 步后的 ",[126,102437,102400],{}," 是否变成约 ",[126,102440,35330],{},[86,102442,102443,102444,102447],{},"删除 ",[126,102445,102446],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102449,102450],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[71,102452,102454],{"id":102453},"_7常见错误与解决方案","7.常见错误与解决方案",[100,102456,102458],{"id":102457},"modulenotfounderror-no-module-named-mujoco",[126,102459,102460],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102462,102463],{},"解决:",[120,102465,102467],{"className":23837,"code":102466,"language":23839,"meta":42,"style":42},"pip install \"mujoco>=2.3\"\n",[126,102468,102469],{"__ignoreMap":42},[129,102470,102471,102473,102475],{"class":131,"line":132},[129,102472,23846],{"class":1977},[129,102474,23849],{"class":244},[129,102476,102477],{"class":244}," \"mujoco>=2.3\"\n",[100,102479,102481],{"id":102480},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102483,102484],{},"先安装系统依赖:",[120,102486,102488],{"className":23837,"code":102487,"language":23839,"meta":42,"style":42},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[126,102489,102490],{"__ignoreMap":42},[129,102491,102492,102494,102496,102498,102500,102503,102505,102508,102510,102513,102515],{"class":131,"line":132},[129,102493,24577],{"class":1977},[129,102495,26316],{"class":244},[129,102497,23849],{"class":244},[129,102499,26401],{"class":188},[129,102501,102502],{"class":244}," mesa-libGL",[129,102504,100815],{"class":244},[129,102506,102507],{"class":244}," glfw",[129,102509,100835],{"class":244},[129,102511,102512],{"class":244}," libX11",[129,102514,100848],{"class":244},[129,102516,102517],{"class":244}," libXrandr\n",[100,102519,102521],{"id":102520},"xml-解析失败","XML 解析失败",[14,102523,102524],{},"检查:",[83,102526,102527,102530,102533,102539],{},[86,102528,102529],{},"标签是否闭合",[86,102531,102532],{},"属性是否带引号",[86,102534,102535,102536],{},"根节点是否是 ",[126,102537,102538],{},"\u003Cmujoco>",[86,102540,102541,102543,102544,102547],{},[126,102542,51801],{}," 是否放在 ",[126,102545,102546],{},"\u003Cworldbody>"," 内部",[100,102549,102551,102553,102554],{"id":102550},"final-time-不是严格等于-10",[126,102552,102400],{}," 不是严格等于 ",[126,102555,102404],{},[14,102557,102558],{},"这通常不是错误。浮点数计算可能得到：",[120,102560,102563],{"className":102561,"code":102562,"language":5202,"meta":42},[5200],"1.0000000000000007\n",[126,102564,102562],{"__ignoreMap":42},[14,102566,102567,102568,102570],{},"只要接近 ",[126,102569,102404],{}," 就正常。",[100,102572,102573],{"id":102573},"方块没有掉下来",[14,102575,102576],{},"检查：",[83,102578,102579,102585,102591,102596],{},[86,102580,102581,102582],{},"方块 body 里是否有 ",[126,102583,102584],{},"\u003Cfreejoint\u002F>",[86,102586,102587,102588],{},"重力是否是 ",[126,102589,102590],{},"0 0 -9.81",[86,102592,102593,102594],{},"是否真的调用了 ",[126,102595,100686],{},[86,102597,102598,102599,102601,102602],{},"你看的是否是 ",[126,102600,102344],{},"，不是 ",[126,102603,102604],{},"initial qpos",[71,102606,102608],{"id":102607},"_8本章小结","8.本章小结",[14,102610,102611],{},"本章你已经完成了 MuJoCo 的最小闭环：",[120,102613,102616],{"className":102614,"code":102615,"language":5202,"meta":42},[5200],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[126,102617,102615],{"__ignoreMap":42},[14,102619,102620],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5141,102622,102623],{},"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":42,"searchDepth":51,"depth":51,"links":102625},[102626,102627,102628,102633,102637,102638,102639,102647],{"id":100647,"depth":51,"text":100648},{"id":100770,"depth":51,"text":100771},{"id":101045,"depth":51,"text":101046,"children":102629},[102630,102631,102632],{"id":101083,"depth":1194,"text":101084},{"id":101177,"depth":1194,"text":101178},{"id":101229,"depth":1194,"text":101230},{"id":101253,"depth":51,"text":101254,"children":102634},[102635,102636],{"id":101573,"depth":1194,"text":101573},{"id":101709,"depth":1194,"text":101709},{"id":102316,"depth":51,"text":102317},{"id":102348,"depth":51,"text":102349},{"id":102453,"depth":51,"text":102454,"children":102640},[102641,102642,102643,102644,102646],{"id":102457,"depth":1194,"text":102460},{"id":102480,"depth":1194,"text":102481},{"id":102520,"depth":1194,"text":102521},{"id":102550,"depth":1194,"text":102645},"final time 不是严格等于 1.0",{"id":102573,"depth":1194,"text":102573},{"id":102607,"depth":51,"text":102608},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100639,"description":42},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102654,"title":102655,"body":102656,"description":42,"extension":54,"meta":104312,"navigation":56,"path":104313,"seo":104314,"stem":104315,"__hash__":104316},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102657,"toc":104288},[102658,102661,102663,102666,102669,102686,102781,102784,102790,102792,102794,102818,102821,102835,102838,102879,102881,102894,102896,102899,102947,102959,102962,102965,102971,102984,103051,103054,103073,103076,103079,103085,103087,103096,103099,103103,103112,103194,103203,103207,103213,103227,103237,103239,103569,103572,103584,103586,103597,103599,103602,103620,103623,103626,103644,103655,103658,103673,103683,103685,103706,103723,103743,103749,103789,103805,103821,103827,103830,103854,103870,103875,103905,103922,103947,103950,103965,103974,103989,103998,104013,104020,104022,104032,104045,104052,104055,104094,104101,104103,104155,104157,104163,104166,104173,104180,104183,104185,104203,104206,104209,104243,104255,104257,104260,104282,104285],[10,102659,102655],{"id":102660},"_2xml-与-mjcf-物理建模基础",[71,102662,100648],{"id":100647},[14,102664,102665],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102667,102668],{},"本章结束后，你应该能看懂一个简单模型里：",[83,102670,102671,102674,102677,102680,102683],{},[86,102672,102673],{},"地面在哪里。",[86,102675,102676],{},"物体初始位置在哪里。",[86,102678,102679],{},"几何体是什么形状。",[86,102681,102682],{},"哪些 body 可以自由运动。",[86,102684,102685],{},"如何用名字在 Python 里找到 XML 中的对象。",[277,102687,102688,102698],{},[280,102689,102690],{},[283,102691,102692,102695],{},[286,102693,102694],{"align":23751},"标签",[286,102696,102697],{"align":23751},"作用",[324,102699,102700,102709,102719,102728,102738,102748,102761,102771],{},[283,102701,102702,102706],{},[329,102703,102704],{"align":23751},[126,102705,102538],{},[329,102707,102708],{"align":23751},"根节点",[283,102710,102711,102716],{},[329,102712,102713],{"align":23751},[126,102714,102715],{},"\u003Coption>",[329,102717,102718],{"align":23751},"仿真参数",[283,102720,102721,102725],{},[329,102722,102723],{"align":23751},[126,102724,102546],{},[329,102726,102727],{"align":23751},"世界中的物体",[283,102729,102730,102735],{},[329,102731,102732],{"align":23751},[126,102733,102734],{},"\u003Cbody>",[329,102736,102737],{"align":23751},"刚体",[283,102739,102740,102745],{},[329,102741,102742],{"align":23751},[126,102743,102744],{},"\u003Cgeom>",[329,102746,102747],{"align":23751},"几何体、碰撞体、可视体",[283,102749,102750,102758],{},[329,102751,102752,24979,102755],{"align":23751},[126,102753,102754],{},"\u003Cjoint>",[126,102756,102757],{},"\u003Cfreejoint>",[329,102759,102760],{"align":23751},"关节",[283,102762,102763,102768],{},[329,102764,102765],{"align":23751},[126,102766,102767],{},"\u003Csite>",[329,102769,102770],{"align":23751},"标记点",[283,102772,102773,102778],{},[329,102774,102775],{"align":23751},[126,102776,102777],{},"\u003Cactuator>",[329,102779,102780],{"align":23751},"控制器",[14,102782,102783],{},"初学时可以先记住：",[120,102785,102788],{"className":102786,"code":102787,"language":5202,"meta":42},[5200],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[126,102789,102787],{"__ignoreMap":42},[71,102791,100771],{"id":100770},[14,102793,100774],{},[120,102795,102797],{"className":23837,"code":102796,"language":23839,"meta":42,"style":42},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[126,102798,102799],{"__ignoreMap":42},[129,102800,102801,102803,102805,102807,102809,102811,102813,102815],{"class":131,"line":132},[129,102802,24577],{"class":1977},[129,102804,26316],{"class":244},[129,102806,23849],{"class":244},[129,102808,26401],{"class":188},[129,102810,102502],{"class":244},[129,102812,100815],{"class":244},[129,102814,102507],{"class":244},[129,102816,102817],{"class":244}," glfw-devel\n",[14,102819,102820],{},"pip:",[120,102822,102823],{"className":23837,"code":100920,"language":23839,"meta":42,"style":42},[126,102824,102825],{"__ignoreMap":42},[129,102826,102827,102829,102831,102833],{"class":131,"line":132},[129,102828,23846],{"class":1977},[129,102830,23849],{"class":244},[129,102832,100931],{"class":244},[129,102834,100934],{"class":244},[14,102836,102837],{},"conda:",[120,102839,102841],{"className":23837,"code":102840,"language":23839,"meta":42,"style":42},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[126,102842,102843,102860,102869],{"__ignoreMap":42},[129,102844,102845,102847,102849,102851,102854,102856,102858],{"class":131,"line":132},[129,102846,30331],{"class":1977},[129,102848,29177],{"class":244},[129,102850,25116],{"class":188},[129,102852,102853],{"class":244}," mujoco-xml",[129,102855,100976],{"class":244},[129,102857,100979],{"class":188},[129,102859,100982],{"class":188},[129,102861,102862,102864,102866],{"class":131,"line":51},[129,102863,30331],{"class":1977},[129,102865,100989],{"class":244},[129,102867,102868],{"class":244}," mujoco-xml\n",[129,102870,102871,102873,102875,102877],{"class":131,"line":1194},[129,102872,23846],{"class":1977},[129,102874,23849],{"class":244},[129,102876,100931],{"class":244},[129,102878,100934],{"class":244},[14,102880,101005],{},[83,102882,102883,102886,102891],{},[86,102884,102885],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[86,102887,102888,102889,28386],{},"本章使用基础标签，适用于 ",[126,102890,101028],{},[86,102892,102893],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[71,102895,101046],{"id":101045},[14,102897,102898],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[120,102900,102902],{"className":53068,"code":102901,"language":53070,"meta":42,"style":42},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[126,102903,102904,102918,102926,102931,102939],{"__ignoreMap":42},[129,102905,102906,102908,102910,102912,102914,102916],{"class":131,"line":132},[129,102907,1049],{"class":139},[129,102909,101022],{"class":51301},[129,102911,101776],{"class":1977},[129,102913,185],{"class":139},[129,102915,62680],{"class":244},[129,102917,51308],{"class":139},[129,102919,102920,102922,102924],{"class":131,"line":51},[129,102921,52145],{"class":139},[129,102923,101842],{"class":51301},[129,102925,51308],{"class":139},[129,102927,102928],{"class":131,"line":1194},[129,102929,102930],{"class":139},"    ...\n",[129,102932,102933,102935,102937],{"class":131,"line":1209},[129,102934,52418],{"class":139},[129,102936,101842],{"class":51301},[129,102938,51308],{"class":139},[129,102940,102941,102943,102945],{"class":131,"line":1215},[129,102942,51786],{"class":139},[129,102944,101022],{"class":51301},[129,102946,51308],{"class":139},[14,102948,102949,102951,102952,102954,102955,102958],{},[126,102950,51801],{}," 表示刚体。",[126,102953,101121],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[126,102956,102957],{},"joint"," 表示刚体相对父刚体如何运动。",[100,102960,102961],{"id":102961},"层级结构非常重要",[14,102963,102964],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[120,102966,102969],{"className":102967,"code":102968,"language":5202,"meta":42},[5200],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[126,102970,102968],{"__ignoreMap":42},[14,102972,102973,101019,102976,102979,102980,102983],{},[126,102974,102975],{},"red_box_geom",[126,102977,102978],{},"box_center"," 都属于 ",[126,102981,102982],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[120,102985,102987],{"className":53068,"code":102986,"language":53070,"meta":42,"style":42},"\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",[126,102988,102989,103009,103023,103043],{"__ignoreMap":42},[129,102990,102991,102993,102995,102997,102999,103001,103003,103005,103007],{"class":131,"line":132},[129,102992,1049],{"class":139},[129,102994,51801],{"class":51301},[129,102996,14935],{"class":1977},[129,102998,185],{"class":139},[129,103000,53492],{"class":244},[129,103002,101107],{"class":1977},[129,103004,185],{"class":139},[129,103006,101112],{"class":244},[129,103008,51308],{"class":139},[129,103010,103011,103013,103015,103017,103019,103021],{"class":131,"line":51},[129,103012,52145],{"class":139},[129,103014,101621],{"class":51301},[129,103016,14935],{"class":1977},[129,103018,185],{"class":139},[129,103020,101962],{"class":244},[129,103022,101145],{"class":139},[129,103024,103025,103027,103029,103031,103033,103035,103037,103039,103041],{"class":131,"line":1194},[129,103026,52145],{"class":139},[129,103028,101121],{"class":51301},[129,103030,53825],{"class":1977},[129,103032,185],{"class":139},[129,103034,53492],{"class":244},[129,103036,101137],{"class":1977},[129,103038,185],{"class":139},[129,103040,101142],{"class":244},[129,103042,101145],{"class":139},[129,103044,103045,103047,103049],{"class":131,"line":1209},[129,103046,51786],{"class":139},[129,103048,51801],{"class":51301},[129,103050,51308],{"class":139},[14,103052,103053],{},"含义:",[83,103055,103056,103062,103067,103070],{},[86,103057,103058,103059,103061],{},"创建名为 ",[126,103060,53715],{}," 的刚体",[86,103063,103064,103065],{},"初始位置在世界坐标 ",[126,103066,101170],{},[86,103068,103069],{},"它有一个自由关节",[86,103071,103072],{},"它有一个盒子几何体",[100,103074,103075],{"id":103075},"坐标怎么理解",[14,103077,103078],{},"MuJoCo 默认使用三维坐标：",[120,103080,103083],{"className":103081,"code":103082,"language":5202,"meta":42},[5200],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[126,103084,103082],{"__ignoreMap":42},[14,103086,14648],{},[120,103088,103090],{"className":53068,"code":103089,"language":53070,"meta":42,"style":42},"pos=\"0 0 1\"\n",[126,103091,103092],{"__ignoreMap":42},[129,103093,103094],{"class":131,"line":132},[129,103095,103089],{"class":139},[14,103097,103098],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[100,103100,103102],{"id":103101},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103104,103105,103106,82531,103109,103111],{},"不同 ",[126,103107,103108],{},"type",[126,103110,31497],{}," 含义不同：",[277,103113,103114,103129],{},[280,103115,103116],{},[283,103117,103118,103122,103127],{},[286,103119,103120],{"align":23751},[126,103121,103108],{},[286,103123,103124,103126],{"align":23751},[126,103125,31497],{}," 示例",[286,103128,100701],{"align":23751},[324,103130,103131,103145,103160,103179],{},[283,103132,103133,103137,103142],{},[329,103134,103135],{"align":23751},[126,103136,53715],{},[329,103138,103139],{"align":23751},[126,103140,103141],{},"size=\"0.1 0.2 0.3\"",[329,103143,103144],{"align":23751},"x\u002Fy\u002Fz 半边长，不是完整长度",[283,103146,103147,103152,103157],{},[329,103148,103149],{"align":23751},[126,103150,103151],{},"sphere",[329,103153,103154],{"align":23751},[126,103155,103156],{},"size=\"0.1\"",[329,103158,103159],{"align":23751},"球半径",[283,103161,103162,103167,103172],{},[329,103163,103164],{"align":23751},[126,103165,103166],{},"capsule",[329,103168,103169],{"align":23751},[126,103170,103171],{},"size=\"0.03\"",[329,103173,103174,103175,103178],{"align":23751},"胶囊半径，长度常用 ",[126,103176,103177],{},"fromto"," 指定",[283,103180,103181,103186,103191],{},[329,103182,103183],{"align":23751},[126,103184,103185],{},"plane",[329,103187,103188],{"align":23751},[126,103189,103190],{},"size=\"3 3 0.1\"",[329,103192,103193],{"align":23751},"可视平面大小，通常当地面",[14,103195,103196,103197,103199,103200,103202],{},"最容易踩坑的是 box：",[126,103198,102025],{}," 表示边长大约是 ",[126,103201,32038],{},"，因为 MuJoCo 用的是半边长。",[100,103204,103206],{"id":103205},"site-是什么","site 是什么",[14,103208,103209,103212],{},[126,103210,103211],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[83,103214,103215,103218,103221,103224],{},[86,103216,103217],{},"标记机械臂末端。",[86,103219,103220],{},"标记目标位置。",[86,103222,103223],{},"放传感器或相机参考点。",[86,103225,103226],{},"在 Python 中读取某个关键点的世界坐标。",[14,103228,103229,103230,101019,103233,103236],{},"在后面的 Reacher 任务中，",[126,103231,103232],{},"tip",[126,103234,103235],{},"target"," 就会用 site 表示。",[71,103238,101254],{"id":101253},[120,103240,103242],{"className":30379,"code":103241,"language":30381,"meta":42,"style":42},"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",[126,103243,103244,103250,103260,103264,103268,103276,103281,103285,103289,103293,103298,103302,103307,103312,103317,103322,103326,103330,103334,103338,103342,103346,103358,103370,103378,103382,103397,103412,103416,103429,103444,103457,103470,103474,103490,103494,103498,103509,103521,103533,103545,103549,103553,103565],{"__ignoreMap":42},[129,103245,103246,103248],{"class":131,"line":132},[129,103247,30393],{"class":135},[129,103249,101302],{"class":139},[129,103251,103252,103254,103256,103258],{"class":131,"line":51},[129,103253,30393],{"class":135},[129,103255,31381],{"class":139},[129,103257,31384],{"class":135},[129,103259,31387],{"class":139},[129,103261,103262],{"class":131,"line":1194},[129,103263,2414],{"emptyLinePlaceholder":56},[129,103265,103266],{"class":131,"line":1209},[129,103267,2414],{"emptyLinePlaceholder":56},[129,103269,103270,103272,103274],{"class":131,"line":1215},[129,103271,101315],{"class":188},[129,103273,13579],{"class":135},[129,103275,101320],{"class":244},[129,103277,103278],{"class":131,"line":1229},[129,103279,103280],{"class":244},"\u003Cmujoco model=\"xml_basic\">\n",[129,103282,103283],{"class":131,"line":1235},[129,103284,101330],{"class":244},[129,103286,103287],{"class":131,"line":1326},[129,103288,2414],{"emptyLinePlaceholder":56},[129,103290,103291],{"class":131,"line":1332},[129,103292,101339],{"class":244},[129,103294,103295],{"class":131,"line":1344},[129,103296,103297],{"class":244},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[129,103299,103300],{"class":131,"line":1626},[129,103301,2414],{"emptyLinePlaceholder":56},[129,103303,103304],{"class":131,"line":1631},[129,103305,103306],{"class":244},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[129,103308,103309],{"class":131,"line":1637},[129,103310,103311],{"class":244},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[129,103313,103314],{"class":131,"line":1642},[129,103315,103316],{"class":244},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[129,103318,103319],{"class":131,"line":1656},[129,103320,103321],{"class":244},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[129,103323,103324],{"class":131,"line":1661},[129,103325,101368],{"class":244},[129,103327,103328],{"class":131,"line":1667},[129,103329,101373],{"class":244},[129,103331,103332],{"class":131,"line":1688},[129,103333,101378],{"class":244},[129,103335,103336],{"class":131,"line":1693},[129,103337,95699],{"class":244},[129,103339,103340],{"class":131,"line":1707},[129,103341,2414],{"emptyLinePlaceholder":56},[129,103343,103344],{"class":131,"line":1712},[129,103345,2414],{"emptyLinePlaceholder":56},[129,103347,103348,103350,103352,103354,103356],{"class":131,"line":1741},[129,103349,31948],{"class":135},[129,103351,1987],{"class":1977},[129,103353,101399],{"class":139},[129,103355,95687],{"class":188},[129,103357,3753],{"class":139},[129,103359,103360,103362,103364,103366,103368],{"class":131,"line":1746},[129,103361,101408],{"class":139},[129,103363,185],{"class":135},[129,103365,101413],{"class":139},[129,103367,101315],{"class":188},[129,103369,146],{"class":139},[129,103371,103372,103374,103376],{"class":131,"line":1763},[129,103373,101422],{"class":139},[129,103375,185],{"class":135},[129,103377,101427],{"class":139},[129,103379,103380],{"class":131,"line":1768},[129,103381,2414],{"emptyLinePlaceholder":56},[129,103383,103384,103387,103389,103392,103395],{"class":131,"line":1773},[129,103385,103386],{"class":139},"    box_body_id ",[129,103388,185],{"class":135},[129,103390,103391],{"class":139}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[129,103393,103394],{"class":244},"\"red_box\"",[129,103396,146],{"class":139},[129,103398,103399,103402,103404,103407,103410],{"class":131,"line":1778},[129,103400,103401],{"class":139},"    site_id ",[129,103403,185],{"class":135},[129,103405,103406],{"class":139}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[129,103408,103409],{"class":244},"\"box_center\"",[129,103411,146],{"class":139},[129,103413,103414],{"class":131,"line":1792},[129,103415,2414],{"emptyLinePlaceholder":56},[129,103417,103418,103420,103423,103425,103427],{"class":131,"line":1797},[129,103419,3115],{"class":135},[129,103421,103422],{"class":139}," box_body_id ",[129,103424,1049],{"class":135},[129,103426,4107],{"class":188},[129,103428,3753],{"class":139},[129,103430,103431,103434,103437,103439,103442],{"class":131,"line":2591},[129,103432,103433],{"class":135},"        raise",[129,103435,103436],{"class":188}," RuntimeError",[129,103438,140],{"class":139},[129,103440,103441],{"class":244},"\"body red_box not found\"",[129,103443,146],{"class":139},[129,103445,103446,103448,103451,103453,103455],{"class":131,"line":2605},[129,103447,3115],{"class":135},[129,103449,103450],{"class":139}," site_id ",[129,103452,1049],{"class":135},[129,103454,4107],{"class":188},[129,103456,3753],{"class":139},[129,103458,103459,103461,103463,103465,103468],{"class":131,"line":2613},[129,103460,103433],{"class":135},[129,103462,103436],{"class":188},[129,103464,140],{"class":139},[129,103466,103467],{"class":244},"\"site box_center not found\"",[129,103469,146],{"class":139},[129,103471,103472],{"class":131,"line":2618},[129,103473,2414],{"emptyLinePlaceholder":56},[129,103475,103476,103478,103480,103482,103484,103486,103488],{"class":131,"line":2624},[129,103477,3215],{"class":135},[129,103479,101502],{"class":139},[129,103481,26044],{"class":135},[129,103483,32444],{"class":188},[129,103485,140],{"class":139},[129,103487,1736],{"class":188},[129,103489,30787],{"class":139},[129,103491,103492],{"class":131,"line":2630},[129,103493,101517],{"class":139},[129,103495,103496],{"class":131,"line":2635},[129,103497,2414],{"emptyLinePlaceholder":56},[129,103499,103500,103502,103504,103507],{"class":131,"line":7963},[129,103501,31300],{"class":188},[129,103503,140],{"class":139},[129,103505,103506],{"class":244},"\"simulation time:\"",[129,103508,101479],{"class":139},[129,103510,103511,103513,103515,103518],{"class":131,"line":7987},[129,103512,31300],{"class":188},[129,103514,140],{"class":139},[129,103516,103517],{"class":244},"\"box body position:\"",[129,103519,103520],{"class":139},", data.xpos[box_body_id].copy())\n",[129,103522,103523,103525,103527,103530],{"class":131,"line":7992},[129,103524,31300],{"class":188},[129,103526,140],{"class":139},[129,103528,103529],{"class":244},"\"site position:\"",[129,103531,103532],{"class":139},", data.site_xpos[site_id].copy())\n",[129,103534,103535,103537,103539,103542],{"class":131,"line":7998},[129,103536,31300],{"class":188},[129,103538,140],{"class":139},[129,103540,103541],{"class":244},"\"box qpos:\"",[129,103543,103544],{"class":139},", np.array(data.qpos))\n",[129,103546,103547],{"class":131,"line":8025},[129,103548,2414],{"emptyLinePlaceholder":56},[129,103550,103551],{"class":131,"line":8030},[129,103552,2414],{"emptyLinePlaceholder":56},[129,103554,103555,103557,103559,103561,103563],{"class":131,"line":8036},[129,103556,1545],{"class":135},[129,103558,31221],{"class":188},[129,103560,101560],{"class":135},[129,103562,101563],{"class":244},[129,103564,3753],{"class":139},[129,103566,103567],{"class":131,"line":8048},[129,103568,101570],{"class":139},[14,103570,103571],{},"保存为：",[120,103573,103575],{"className":23837,"code":103574,"language":23839,"meta":42,"style":42},"touch ch2_xml_basic.py\n",[126,103576,103577],{"__ignoreMap":42},[129,103578,103579,103581],{"class":131,"line":132},[129,103580,101284],{"class":1977},[129,103582,103583],{"class":244}," ch2_xml_basic.py\n",[14,103585,102302],{},[120,103587,103589],{"className":23837,"code":103588,"language":23839,"meta":42,"style":42},"python ch2_xml_basic.py\n",[126,103590,103591],{"__ignoreMap":42},[129,103592,103593,103595],{"class":131,"line":132},[129,103594,30381],{"class":1977},[129,103596,103583],{"class":244},[100,103598,101573],{"id":101573},[14,103600,103601],{},"用名字查找 body：",[120,103603,103605],{"className":30379,"code":103604,"language":30381,"meta":42,"style":42},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[126,103606,103607],{"__ignoreMap":42},[129,103608,103609,103612,103614,103616,103618],{"class":131,"line":132},[129,103610,103611],{"class":139},"box_body_id ",[129,103613,185],{"class":135},[129,103615,103391],{"class":139},[129,103617,103394],{"class":244},[129,103619,146],{"class":139},[14,103621,103622],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103624,103625],{},"用名字查找 site：",[120,103627,103629],{"className":30379,"code":103628,"language":30381,"meta":42,"style":42},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[126,103630,103631],{"__ignoreMap":42},[129,103632,103633,103636,103638,103640,103642],{"class":131,"line":132},[129,103634,103635],{"class":139},"site_id ",[129,103637,185],{"class":135},[129,103639,103406],{"class":139},[129,103641,103409],{"class":244},[129,103643,146],{"class":139},[14,103645,103646,103647,103650,103651,103654],{},"注意第二个参数是对象类型。查 body 就用 ",[126,103648,103649],{},"mjOBJ_BODY","，查 site 就用 ",[126,103652,103653],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103656,103657],{},"读取世界坐标：",[120,103659,103661],{"className":30379,"code":103660,"language":30381,"meta":42,"style":42},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[126,103662,103663,103668],{"__ignoreMap":42},[129,103664,103665],{"class":131,"line":132},[129,103666,103667],{"class":139},"data.xpos[box_body_id]\n",[129,103669,103670],{"class":131,"line":51},[129,103671,103672],{"class":139},"data.site_xpos[site_id]\n",[14,103674,103675,103678,103679,103682],{},[126,103676,103677],{},"xpos"," 是 body 的世界坐标，",[126,103680,103681],{},"site_xpos"," 是 site 的世界坐标。",[100,103684,101709],{"id":101709},[120,103686,103688],{"className":30379,"code":103687,"language":30381,"meta":42,"style":42},"import mujoco\nimport numpy as np\n",[126,103689,103690,103696],{"__ignoreMap":42},[129,103691,103692,103694],{"class":131,"line":132},[129,103693,30393],{"class":135},[129,103695,101302],{"class":139},[129,103697,103698,103700,103702,103704],{"class":131,"line":51},[129,103699,30393],{"class":135},[129,103701,31381],{"class":139},[129,103703,31384],{"class":135},[129,103705,31387],{"class":139},[14,103707,103708,103709,103712,103713,103716,103717,352,103720,28386],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[126,103710,103711],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[126,103714,103715],{},"as np"," 是习惯写法，后面就可以写 ",[126,103718,103719],{},"np.array(...)",[126,103721,103722],{},"np.round(...)",[120,103724,103725],{"className":30379,"code":101596,"language":30381,"meta":42,"style":42},[126,103726,103727,103735,103739],{"__ignoreMap":42},[129,103728,103729,103731,103733],{"class":131,"line":132},[129,103730,101315],{"class":188},[129,103732,13579],{"class":135},[129,103734,101320],{"class":244},[129,103736,103737],{"class":131,"line":51},[129,103738,101611],{"class":244},[129,103740,103741],{"class":131,"line":1194},[129,103742,95699],{"class":244},[14,103744,103745,103746,28386],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[126,103747,103748],{},"mujoco.MjModel.from_xml_string(XML)",[120,103750,103752],{"className":53068,"code":103751,"language":53070,"meta":42,"style":42},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[126,103753,103754],{"__ignoreMap":42},[129,103755,103756,103758,103760,103762,103764,103766,103768,103770,103773,103775,103777,103780,103782,103784,103787],{"class":131,"line":132},[129,103757,1049],{"class":139},[129,103759,103211],{"class":51301},[129,103761,14935],{"class":1977},[129,103763,185],{"class":139},[129,103765,103409],{"class":244},[129,103767,101107],{"class":1977},[129,103769,185],{"class":139},[129,103771,103772],{"class":244},"\"0 0 0\"",[129,103774,101137],{"class":1977},[129,103776,185],{"class":139},[129,103778,103779],{"class":244},"\"0.03\"",[129,103781,78768],{"class":1977},[129,103783,185],{"class":139},[129,103785,103786],{"class":244},"\"0 1 0 1\"",[129,103788,101145],{"class":139},[14,103790,103791,103793,103794,103797,103798,103800,103801,103804],{},[126,103792,103211],{}," 是标记点。",[126,103795,103796],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[126,103799,103171],{}," 表示显示出来的小球大小。",[126,103802,103803],{},"rgba=\"0 1 0 1\""," 表示绿色。",[120,103806,103807],{"className":30379,"code":103604,"language":30381,"meta":42,"style":42},[126,103808,103809],{"__ignoreMap":42},[129,103810,103811,103813,103815,103817,103819],{"class":131,"line":132},[129,103812,103611],{"class":139},[129,103814,185],{"class":135},[129,103816,103391],{"class":139},[129,103818,103394],{"class":244},[129,103820,146],{"class":139},[14,103822,103823,103824,103826],{},"这行的作用是：根据名字 ",[126,103825,103394],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103828,103829],{},"拆开看：",[83,103831,103832,103838,103843,103849],{},[86,103833,103834,103837],{},[126,103835,103836],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[86,103839,103840,103842],{},[126,103841,102086],{}," 是被查询的模型。",[86,103844,103845,103848],{},[126,103846,103847],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[86,103850,103851,103853],{},[126,103852,103394],{}," 是 XML 里写的名字。",[120,103855,103856],{"className":30379,"code":103628,"language":30381,"meta":42,"style":42},[126,103857,103858],{"__ignoreMap":42},[129,103859,103860,103862,103864,103866,103868],{"class":131,"line":132},[129,103861,103635],{"class":139},[129,103863,185],{"class":135},[129,103865,103406],{"class":139},[129,103867,103409],{"class":244},[129,103869,146],{"class":139},[14,103871,103872,103873,28386],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[126,103874,103409],{},[120,103876,103878],{"className":30379,"code":103877,"language":30381,"meta":42,"style":42},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[126,103879,103880,103892],{"__ignoreMap":42},[129,103881,103882,103884,103886,103888,103890],{"class":131,"line":132},[129,103883,1545],{"class":135},[129,103885,103422],{"class":139},[129,103887,1049],{"class":135},[129,103889,4107],{"class":188},[129,103891,3753],{"class":139},[129,103893,103894,103897,103899,103901,103903],{"class":131,"line":51},[129,103895,103896],{"class":135},"    raise",[129,103898,103436],{"class":188},[129,103900,140],{"class":139},[129,103902,103441],{"class":244},[129,103904,146],{"class":139},[14,103906,103907,103909,103910,103913,103914,103917,103918,103921],{},[126,103908,1545],{}," 是条件判断。",[126,103911,103912],{},"mj_name2id"," 找不到对象时会返回 ",[126,103915,103916],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[126,103919,103920],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[120,103923,103925],{"className":30379,"code":103924,"language":30381,"meta":42,"style":42},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[126,103926,103927,103943],{"__ignoreMap":42},[129,103928,103929,103931,103933,103935,103937,103939,103941],{"class":131,"line":132},[129,103930,3039],{"class":135},[129,103932,101502],{"class":139},[129,103934,26044],{"class":135},[129,103936,32444],{"class":188},[129,103938,140],{"class":139},[129,103940,1736],{"class":188},[129,103942,30787],{"class":139},[129,103944,103945],{"class":131,"line":51},[129,103946,101700],{"class":139},[14,103948,103949],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[120,103951,103953],{"className":30379,"code":103952,"language":30381,"meta":42,"style":42},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[126,103954,103955],{"__ignoreMap":42},[129,103956,103957,103959,103961,103963],{"class":131,"line":132},[129,103958,30416],{"class":188},[129,103960,140],{"class":139},[129,103962,103517],{"class":244},[129,103964,103520],{"class":139},[14,103966,103967,103969,103970,103973],{},[126,103968,101080],{}," 保存所有 body 的世界坐标。",[126,103971,103972],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[120,103975,103977],{"className":30379,"code":103976,"language":30381,"meta":42,"style":42},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[126,103978,103979],{"__ignoreMap":42},[129,103980,103981,103983,103985,103987],{"class":131,"line":132},[129,103982,30416],{"class":188},[129,103984,140],{"class":139},[129,103986,103529],{"class":244},[129,103988,103532],{"class":139},[14,103990,103991,103994,103995,103997],{},[126,103992,103993],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[126,103996,102978],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[120,103999,104001],{"className":30379,"code":104000,"language":30381,"meta":42,"style":42},"print(\"box qpos:\", np.array(data.qpos))\n",[126,104002,104003],{"__ignoreMap":42},[129,104004,104005,104007,104009,104011],{"class":131,"line":132},[129,104006,30416],{"class":188},[129,104008,140],{"class":139},[129,104010,103541],{"class":244},[129,104012,103544],{"class":139},[14,104014,104015,104016,104019],{},"这里打印广义位置数组。",[126,104017,104018],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[71,104021,102317],{"id":102316},[14,104023,104024,104025,104028,104029,28386],{},"程序会输出 ",[126,104026,104027],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[126,104030,104031],{},"qpos",[14,104033,104034,104036,104037,104040,104041,104044],{},[126,104035,103972],{}," 是 body 的世界坐标位置。",[126,104038,104039],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[126,104042,104043],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104046,82223,104047,82531,104049,104051],{},[126,104048,102978],{},[126,104050,103796],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104053,104054],{},"如果你把 site 改成：",[120,104056,104058],{"className":53068,"code":104057,"language":53070,"meta":42,"style":42},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[126,104059,104060],{"__ignoreMap":42},[129,104061,104062,104064,104066,104068,104070,104073,104075,104077,104080,104082,104084,104086,104088,104090,104092],{"class":131,"line":132},[129,104063,1049],{"class":139},[129,104065,103211],{"class":51301},[129,104067,14935],{"class":1977},[129,104069,185],{"class":139},[129,104071,104072],{"class":244},"\"box_top\"",[129,104074,101107],{"class":1977},[129,104076,185],{"class":139},[129,104078,104079],{"class":244},"\"0 0 0.15\"",[129,104081,101137],{"class":1977},[129,104083,185],{"class":139},[129,104085,103779],{"class":244},[129,104087,78768],{"class":1977},[129,104089,185],{"class":139},[129,104091,103786],{"class":244},[129,104093,101145],{"class":139},[14,104095,104096,104097,104100],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[126,104098,104099],{},"site position"," 就会比 body position 的 z 坐标更高。",[71,104102,102349],{"id":102348},[83,104104,104105,104114,104117,104124,104130,104141],{},[86,104106,102412,104107,104109,104110,102415,104112,28386],{},[126,104108,102982],{}," 的初始高度从 ",[126,104111,357],{},[126,104113,217],{},[86,104115,104116],{},"重新运行程序。",[86,104118,104119,104120,104123],{},"观察 ",[126,104121,104122],{},"box qpos"," 和最终位置是否变化。",[86,104125,104126,104127,104129],{},"故意把 ",[126,104128,103211],{}," 名称改错，确认程序能报错。",[86,104131,102412,104132,104134,104135,102415,104137,104140],{},[126,104133,101121],{}," 的颜色 ",[126,104136,102033],{},[126,104138,104139],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[86,104142,102412,104143,82531,104145,102415,104148,104151,104152,104154],{},[126,104144,102978],{},[126,104146,104147],{},"pos",[126,104149,104150],{},"0 0 0.2","，观察 ",[126,104153,104099],{}," 如何变化。",[71,104156,102454],{"id":102453},[100,104158,104160],{"id":104159},"xml-error-schema-violation",[126,104161,104162],{},"XML Error: Schema violation",[14,104164,104165],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[100,104167,104169,81291,104171],{"id":104168},"mj_name2id-返回-1",[126,104170,103912],{},[126,104172,103916],{},[14,104174,104175,104176,104179],{},"说明名字没有找到。检查 XML 中 ",[126,104177,104178],{},"name=\"...\"","，并确认对象类型正确。",[100,104181,104182],{"id":104182},"物体不下落",[14,104184,102524],{},[83,104186,104187,104192,104197],{},[86,104188,104189,104190],{},"body 是否有 ",[126,104191,101621],{},[86,104193,104194,104195],{},"gravity 是否为 ",[126,104196,102590],{},[86,104198,104199,104200,104202],{},"body 是否被固定在 ",[126,104201,101842],{}," 中",[100,104204,104205],{"id":104205},"坐标看起来不符合预期",[14,104207,104208],{},"先区分两种坐标：",[277,104210,104211,104220],{},[280,104212,104213],{},[283,104214,104215,104218],{},[286,104216,104217],{"align":23751},"坐标",[286,104219,100701],{"align":23751},[324,104221,104222,104232],{},[283,104223,104224,104229],{},[329,104225,104226,104227],{"align":23751},"XML 里的 ",[126,104228,104147],{},[329,104230,104231],{"align":23751},"相对父 body 的局部坐标",[283,104233,104234,104240],{},[329,104235,104236,24979,104238],{"align":23751},[126,104237,101080],{},[126,104239,103993],{},[329,104241,104242],{"align":23751},"仿真更新后的世界坐标",[14,104244,104245,104246,104248,104249,82540,104252,104254],{},"如果你修改了 ",[126,104247,101071],{},"，但还没调用 ",[126,104250,104251],{},"mj_forward",[126,104253,101216],{},"，世界坐标可能还没有更新。",[71,104256,102608],{"id":102607},[14,104258,104259],{},"MJCF 建模先掌握四件事：",[83,104261,104262,104267,104272,104277],{},[86,104263,104264,104266],{},[126,104265,51801],{}," 表示刚体层级。",[86,104268,104269,104271],{},[126,104270,101121],{}," 表示形状、碰撞和质量。",[86,104273,104274,104276],{},[126,104275,102957],{}," 决定 body 能不能动、怎么动。",[86,104278,104279,104281],{},[126,104280,103211],{}," 用来标记关键点，方便 Python 读取位置。",[14,104283,104284],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5141,104286,104287],{},"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":42,"searchDepth":51,"depth":51,"links":104289},[104290,104291,104292,104298,104302,104303,104304,104311],{"id":100647,"depth":51,"text":100648},{"id":100770,"depth":51,"text":100771},{"id":101045,"depth":51,"text":101046,"children":104293},[104294,104295,104296,104297],{"id":102961,"depth":1194,"text":102961},{"id":103075,"depth":1194,"text":103075},{"id":103101,"depth":1194,"text":103102},{"id":103205,"depth":1194,"text":103206},{"id":101253,"depth":51,"text":101254,"children":104299},[104300,104301],{"id":101573,"depth":1194,"text":101573},{"id":101709,"depth":1194,"text":101709},{"id":102316,"depth":51,"text":102317},{"id":102348,"depth":51,"text":102349},{"id":102453,"depth":51,"text":102454,"children":104305},[104306,104307,104309,104310],{"id":104159,"depth":1194,"text":104162},{"id":104168,"depth":1194,"text":104308},"mj_name2id 返回 -1",{"id":104182,"depth":1194,"text":104182},{"id":104205,"depth":1194,"text":104205},{"id":102607,"depth":51,"text":102608},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102655,"description":42},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104318,"title":104319,"body":104320,"description":42,"extension":54,"meta":105815,"navigation":56,"path":105816,"seo":105817,"stem":105818,"__hash__":105819},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104321,"toc":105787},[104322,104325,104327,104330,104333,104371,104374,104380,104383,104385,104387,104414,104416,104430,104432,104473,104475,104499,104501,104504,104513,104522,104525,104534,104542,104551,104554,104564,104567,104619,104626,104632,104640,104688,104691,104710,104713,104721,104725,104734,104767,104769,105117,105119,105131,105133,105144,105146,105149,105170,105176,105179,105204,105214,105217,105225,105228,105231,105252,105263,105265,105285,105288,105309,105318,105337,105343,105368,105371,105385,105392,105416,105419,105427,105436,105452,105464,105472,105481,105483,105486,105510,105515,105518,105540,105542,105581,105583,105590,105592,105600,105603,105606,105618,105659,105666,105677,105684,105687,105736,105739,105742,105748,105750,105755,105781,105784],[10,104323,104319],{"id":104324},"_3python-控制接口读取状态与推进仿真",[71,104326,100648],{"id":100647},[14,104328,104329],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104331,104332],{},"你将学习:",[83,104334,104335,104340,104345,104349,104354,104365],{},[86,104336,104337],{},[126,104338,104339],{},"MjModel.from_xml_string",[86,104341,104342],{},[126,104343,104344],{},"MjData(model)",[86,104346,104347],{},[126,104348,101216],{},[86,104350,104351],{},[126,104352,104353],{},"mj_resetData",[86,104355,104356,104357,352,104359,352,104362],{},"读取 ",[126,104358,104031],{},[126,104360,104361],{},"qvel",[126,104363,104364],{},"ctrl",[86,104366,104367,104368],{},"使用 ",[126,104369,104370],{},"model.opt.timestep",[14,104372,104373],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[120,104375,104378],{"className":104376,"code":104377,"language":5202,"meta":42},[5200],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[126,104379,104377],{"__ignoreMap":42},[14,104381,104382],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[71,104384,100771],{"id":100770},[14,104386,100774],{},[120,104388,104390],{"className":23837,"code":104389,"language":23839,"meta":42,"style":42},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[126,104391,104392],{"__ignoreMap":42},[129,104393,104394,104396,104398,104400,104402,104405,104407,104409,104411],{"class":131,"line":132},[129,104395,24577],{"class":1977},[129,104397,26316],{"class":244},[129,104399,23849],{"class":244},[129,104401,26401],{"class":188},[129,104403,104404],{"class":244}," python3",[129,104406,100799],{"class":244},[129,104408,102502],{"class":244},[129,104410,100815],{"class":244},[129,104412,104413],{"class":244}," glfw\n",[14,104415,102820],{},[120,104417,104418],{"className":23837,"code":100920,"language":23839,"meta":42,"style":42},[126,104419,104420],{"__ignoreMap":42},[129,104421,104422,104424,104426,104428],{"class":131,"line":132},[129,104423,23846],{"class":1977},[129,104425,23849],{"class":244},[129,104427,100931],{"class":244},[129,104429,100934],{"class":244},[14,104431,102837],{},[120,104433,104435],{"className":23837,"code":104434,"language":23839,"meta":42,"style":42},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[126,104436,104437,104454,104463],{"__ignoreMap":42},[129,104438,104439,104441,104443,104445,104448,104450,104452],{"class":131,"line":132},[129,104440,30331],{"class":1977},[129,104442,29177],{"class":244},[129,104444,25116],{"class":188},[129,104446,104447],{"class":244}," mujoco-python-api",[129,104449,100976],{"class":244},[129,104451,100979],{"class":188},[129,104453,100982],{"class":188},[129,104455,104456,104458,104460],{"class":131,"line":51},[129,104457,30331],{"class":1977},[129,104459,100989],{"class":244},[129,104461,104462],{"class":244}," mujoco-python-api\n",[129,104464,104465,104467,104469,104471],{"class":131,"line":1194},[129,104466,23846],{"class":1977},[129,104468,23849],{"class":244},[129,104470,100931],{"class":244},[129,104472,100934],{"class":244},[14,104474,101005],{},[83,104476,104477,104484,104493],{},[86,104478,104479,101019,104481,104483],{},[126,104480,100676],{},[126,104482,100681],{}," 是官方 Python bindings 的类名。",[86,104485,104486,104487,104490,104491,28386],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[126,104488,104489],{},"mjModel"," 在 Python 中是 ",[126,104492,100710],{},[86,104494,104495,104496,28386],{},"不要使用 ",[126,104497,104498],{},"sim = mujoco_py.MjSim(...)",[71,104500,101046],{"id":101045},[14,104502,104503],{},"仿真推进核心代码:",[120,104505,104507],{"className":30379,"code":104506,"language":30381,"meta":42,"style":42},"mujoco.mj_step(model, data)\n",[126,104508,104509],{"__ignoreMap":42},[129,104510,104511],{"class":131,"line":132},[129,104512,104506],{"class":139},[14,104514,104515,104516,352,104518,352,104520,28386],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[126,104517,101071],{},[126,104519,101074],{},[126,104521,101068],{},[14,104523,104524],{},"重置仿真:",[120,104526,104528],{"className":30379,"code":104527,"language":30381,"meta":42,"style":42},"mujoco.mj_resetData(model, data)\n",[126,104529,104530],{"__ignoreMap":42},[129,104531,104532],{"class":131,"line":132},[129,104533,104527],{"class":139},[14,104535,104536,104537,82540,104539,104541],{},"如果手动修改了 ",[126,104538,101071],{},[126,104540,101074],{},"，通常应调用:",[120,104543,104545],{"className":30379,"code":104544,"language":30381,"meta":42,"style":42},"mujoco.mj_forward(model, data)\n",[126,104546,104547],{"__ignoreMap":42},[129,104548,104549],{"class":131,"line":132},[129,104550,104544],{"class":139},[14,104552,104553],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[100,104555,104557,352,104559,352,104561,104563],{"id":104556},"qposqvelctrl-是什么",[126,104558,104031],{},[126,104560,104361],{},[126,104562,104364],{}," 是什么",[14,104565,104566],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[277,104568,104569,104581],{},[280,104570,104571],{},[283,104572,104573,104576,104578],{},[286,104574,104575],{"align":23751},"字段",[286,104577,100701],{"align":23751},[286,104579,104580],{"align":23751},"谁来修改",[324,104582,104583,104595,104607],{},[283,104584,104585,104589,104592],{},[329,104586,104587],{"align":23751},[126,104588,101071],{},[329,104590,104591],{"align":23751},"广义位置，例如小车位置、关节角、自由物体位置姿态",[329,104593,104594],{"align":23751},"MuJoCo 更新，也可以手动设置初始状态",[283,104596,104597,104601,104604],{},[329,104598,104599],{"align":23751},[126,104600,101074],{},[329,104602,104603],{"align":23751},"广义速度，例如小车速度、关节角速度",[329,104605,104606],{"align":23751},"MuJoCo 更新，也可以手动清零",[283,104608,104609,104613,104616],{},[329,104610,104611],{"align":23751},[126,104612,101077],{},[329,104614,104615],{"align":23751},"actuator 的控制输入",[329,104617,104618],{"align":23751},"主要由你的控制代码写入",[14,104620,9040,104621,101019,104623,104625],{},[126,104622,104031],{},[126,104624,104361],{}," 不一定同维。自由刚体就是典型例子：",[120,104627,104630],{"className":104628,"code":104629,"language":5202,"meta":42},[5200],"freejoint: qpos 7 维，qvel 6 维\n",[126,104631,104629],{"__ignoreMap":42},[100,104633,104635,101019,104637,104639],{"id":104634},"mj_step-和-mj_forward-的区别",[126,104636,101216],{},[126,104638,104251],{}," 的区别",[277,104641,104642,104655],{},[280,104643,104644],{},[283,104645,104646,104649,104652],{},[286,104647,104648],{"align":23751},"函数",[286,104650,104651],{"align":23751},"是否推进时间",[286,104653,104654],{"align":23751},"什么时候用",[324,104656,104657,104670],{},[283,104658,104659,104664,104667],{},[329,104660,104661],{"align":23751},[126,104662,104663],{},"mj_step(model, data)",[329,104665,104666],{"align":23751},"是",[329,104668,104669],{"align":23751},"正常仿真循环，每调用一次前进一步",[283,104671,104672,104677,104680],{},[329,104673,104674],{"align":23751},[126,104675,104676],{},"mj_forward(model, data)",[329,104678,104679],{"align":23751},"否",[329,104681,104682,104683,352,104685,104687],{"align":23751},"手动改了 ",[126,104684,104031],{},[126,104686,104361],{}," 后，刷新派生量",[14,104689,104690],{},"例如你写：",[120,104692,104694],{"className":30379,"code":104693,"language":30381,"meta":42,"style":42},"data.qpos[2] = 2.0\n",[126,104695,104696],{"__ignoreMap":42},[129,104697,104698,104701,104703,104705,104707],{"class":131,"line":132},[129,104699,104700],{"class":139},"data.qpos[",[129,104702,217],{"class":188},[129,104704,4457],{"class":139},[129,104706,185],{"class":135},[129,104708,104709],{"class":188}," 2.0\n",[14,104711,104712],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[120,104714,104715],{"className":30379,"code":104544,"language":30381,"meta":42,"style":42},[126,104716,104717],{"__ignoreMap":42},[129,104718,104719],{"class":131,"line":132},[129,104720,104544],{"class":139},[100,104722,104724],{"id":104723},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104726,104727,104730,104731,104733],{},[126,104728,104729],{},"mujoco.mj_resetData(model, data)"," 会把 ",[126,104732,33402],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[120,104735,104737],{"className":30379,"code":104736,"language":30381,"meta":42,"style":42},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[126,104738,104739,104743,104753,104763],{"__ignoreMap":42},[129,104740,104741],{"class":131,"line":132},[129,104742,104527],{"class":139},[129,104744,104745,104748,104750],{"class":131,"line":51},[129,104746,104747],{"class":139},"data.qpos[:] ",[129,104749,185],{"class":135},[129,104751,104752],{"class":139}," random_qpos\n",[129,104754,104755,104758,104760],{"class":131,"line":1194},[129,104756,104757],{"class":139},"data.qvel[:] ",[129,104759,185],{"class":135},[129,104761,104762],{"class":188}," 0.0\n",[129,104764,104765],{"class":131,"line":1209},[129,104766,104544],{"class":139},[71,104768,101254],{"id":101253},[120,104770,104772],{"className":30379,"code":104771,"language":30381,"meta":42,"style":42},"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",[126,104773,104774,104780,104790,104794,104798,104806,104811,104815,104819,104823,104828,104832,104837,104842,104847,104851,104855,104859,104863,104867,104871,104890,104897,104909,104920,104936,104952,104956,104960,104972,104984,104992,104996,105007,105011,105027,105031,105035,105044,105048,105053,105062,105066,105079,105084,105093,105097,105101,105113],{"__ignoreMap":42},[129,104775,104776,104778],{"class":131,"line":132},[129,104777,30393],{"class":135},[129,104779,101302],{"class":139},[129,104781,104782,104784,104786,104788],{"class":131,"line":51},[129,104783,30393],{"class":135},[129,104785,31381],{"class":139},[129,104787,31384],{"class":135},[129,104789,31387],{"class":139},[129,104791,104792],{"class":131,"line":1194},[129,104793,2414],{"emptyLinePlaceholder":56},[129,104795,104796],{"class":131,"line":1209},[129,104797,2414],{"emptyLinePlaceholder":56},[129,104799,104800,104802,104804],{"class":131,"line":1215},[129,104801,101315],{"class":188},[129,104803,13579],{"class":135},[129,104805,101320],{"class":244},[129,104807,104808],{"class":131,"line":1229},[129,104809,104810],{"class":244},"\u003Cmujoco model=\"state_api\">\n",[129,104812,104813],{"class":131,"line":1235},[129,104814,101330],{"class":244},[129,104816,104817],{"class":131,"line":1326},[129,104818,2414],{"emptyLinePlaceholder":56},[129,104820,104821],{"class":131,"line":1332},[129,104822,101339],{"class":244},[129,104824,104825],{"class":131,"line":1344},[129,104826,104827],{"class":244},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[129,104829,104830],{"class":131,"line":1626},[129,104831,2414],{"emptyLinePlaceholder":56},[129,104833,104834],{"class":131,"line":1631},[129,104835,104836],{"class":244},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[129,104838,104839],{"class":131,"line":1637},[129,104840,104841],{"class":244},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[129,104843,104844],{"class":131,"line":1642},[129,104845,104846],{"class":244},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[129,104848,104849],{"class":131,"line":1656},[129,104850,101368],{"class":244},[129,104852,104853],{"class":131,"line":1661},[129,104854,101373],{"class":244},[129,104856,104857],{"class":131,"line":1667},[129,104858,101378],{"class":244},[129,104860,104861],{"class":131,"line":1688},[129,104862,95699],{"class":244},[129,104864,104865],{"class":131,"line":1693},[129,104866,2414],{"emptyLinePlaceholder":56},[129,104868,104869],{"class":131,"line":1707},[129,104870,2414],{"emptyLinePlaceholder":56},[129,104872,104873,104875,104878,104881,104883,104886,104888],{"class":131,"line":1712},[129,104874,31948],{"class":135},[129,104876,104877],{"class":1977}," print_state",[129,104879,104880],{"class":139},"(prefix: ",[129,104882,1314],{"class":188},[129,104884,104885],{"class":139},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[129,104887,95687],{"class":188},[129,104889,3753],{"class":139},[129,104891,104892,104894],{"class":131,"line":1741},[129,104893,31300],{"class":188},[129,104895,104896],{"class":139},"(prefix)\n",[129,104898,104899,104901,104903,104906],{"class":131,"line":1746},[129,104900,31300],{"class":188},[129,104902,140],{"class":139},[129,104904,104905],{"class":244},"\"  timestep:\"",[129,104907,104908],{"class":139},", model.opt.timestep)\n",[129,104910,104911,104913,104915,104918],{"class":131,"line":1763},[129,104912,31300],{"class":188},[129,104914,140],{"class":139},[129,104916,104917],{"class":244},"\"  time:\"",[129,104919,101479],{"class":139},[129,104921,104922,104924,104926,104929,104932,104934],{"class":131,"line":1768},[129,104923,31300],{"class":188},[129,104925,140],{"class":139},[129,104927,104928],{"class":244},"\"  qpos:\"",[129,104930,104931],{"class":139},", np.round(data.qpos.copy(), ",[129,104933,432],{"class":188},[129,104935,30498],{"class":139},[129,104937,104938,104940,104942,104945,104948,104950],{"class":131,"line":1773},[129,104939,31300],{"class":188},[129,104941,140],{"class":139},[129,104943,104944],{"class":244},"\"  qvel:\"",[129,104946,104947],{"class":139},", np.round(data.qvel.copy(), ",[129,104949,432],{"class":188},[129,104951,30498],{"class":139},[129,104953,104954],{"class":131,"line":1778},[129,104955,2414],{"emptyLinePlaceholder":56},[129,104957,104958],{"class":131,"line":1792},[129,104959,2414],{"emptyLinePlaceholder":56},[129,104961,104962,104964,104966,104968,104970],{"class":131,"line":1797},[129,104963,31948],{"class":135},[129,104965,1987],{"class":1977},[129,104967,101399],{"class":139},[129,104969,95687],{"class":188},[129,104971,3753],{"class":139},[129,104973,104974,104976,104978,104980,104982],{"class":131,"line":2591},[129,104975,101408],{"class":139},[129,104977,185],{"class":135},[129,104979,101413],{"class":139},[129,104981,101315],{"class":188},[129,104983,146],{"class":139},[129,104985,104986,104988,104990],{"class":131,"line":2605},[129,104987,101422],{"class":139},[129,104989,185],{"class":135},[129,104991,101427],{"class":139},[129,104993,104994],{"class":131,"line":2613},[129,104995,2414],{"emptyLinePlaceholder":56},[129,104997,104998,105001,105004],{"class":131,"line":2618},[129,104999,105000],{"class":139},"    print_state(",[129,105002,105003],{"class":244},"\"initial\"",[129,105005,105006],{"class":139},", model, data)\n",[129,105008,105009],{"class":131,"line":2624},[129,105010,2414],{"emptyLinePlaceholder":56},[129,105012,105013,105015,105017,105019,105021,105023,105025],{"class":131,"line":2630},[129,105014,3215],{"class":135},[129,105016,101502],{"class":139},[129,105018,26044],{"class":135},[129,105020,32444],{"class":188},[129,105022,140],{"class":139},[129,105024,795],{"class":188},[129,105026,30787],{"class":139},[129,105028,105029],{"class":131,"line":2635},[129,105030,101517],{"class":139},[129,105032,105033],{"class":131,"line":7963},[129,105034,2414],{"emptyLinePlaceholder":56},[129,105036,105037,105039,105042],{"class":131,"line":7987},[129,105038,105000],{"class":139},[129,105040,105041],{"class":244},"\"after 50 steps\"",[129,105043,105006],{"class":139},[129,105045,105046],{"class":131,"line":7992},[129,105047,2414],{"emptyLinePlaceholder":56},[129,105049,105050],{"class":131,"line":7998},[129,105051,105052],{"class":139},"    mujoco.mj_resetData(model, data)\n",[129,105054,105055,105057,105060],{"class":131,"line":8025},[129,105056,105000],{"class":139},[129,105058,105059],{"class":244},"\"after reset\"",[129,105061,105006],{"class":139},[129,105063,105064],{"class":131,"line":8030},[129,105065,2414],{"emptyLinePlaceholder":56},[129,105067,105068,105071,105073,105075,105077],{"class":131,"line":8036},[129,105069,105070],{"class":139},"    data.qpos[",[129,105072,217],{"class":188},[129,105074,4457],{"class":139},[129,105076,185],{"class":135},[129,105078,104709],{"class":188},[129,105080,105081],{"class":131,"line":8048},[129,105082,105083],{"class":139},"    mujoco.mj_forward(model, data)\n",[129,105085,105086,105088,105091],{"class":131,"line":8060},[129,105087,105000],{"class":139},[129,105089,105090],{"class":244},"\"after manual qpos edit\"",[129,105092,105006],{"class":139},[129,105094,105095],{"class":131,"line":8072},[129,105096,2414],{"emptyLinePlaceholder":56},[129,105098,105099],{"class":131,"line":9731},[129,105100,2414],{"emptyLinePlaceholder":56},[129,105102,105103,105105,105107,105109,105111],{"class":131,"line":9756},[129,105104,1545],{"class":135},[129,105106,31221],{"class":188},[129,105108,101560],{"class":135},[129,105110,101563],{"class":244},[129,105112,3753],{"class":139},[129,105114,105115],{"class":131,"line":9779},[129,105116,101570],{"class":139},[14,105118,103571],{},[120,105120,105122],{"className":23837,"code":105121,"language":23839,"meta":42,"style":42},"touch ch3_python_state.py\n",[126,105123,105124],{"__ignoreMap":42},[129,105125,105126,105128],{"class":131,"line":132},[129,105127,101284],{"class":1977},[129,105129,105130],{"class":244}," ch3_python_state.py\n",[14,105132,102302],{},[120,105134,105136],{"className":23837,"code":105135,"language":23839,"meta":42,"style":42},"python ch3_python_state.py\n",[126,105137,105138],{"__ignoreMap":42},[129,105139,105140,105142],{"class":131,"line":132},[129,105141,30381],{"class":1977},[129,105143,105130],{"class":244},[100,105145,101573],{"id":101573},[14,105147,105148],{},"打印状态的函数：",[120,105150,105152],{"className":30379,"code":105151,"language":30381,"meta":42,"style":42},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[126,105153,105154],{"__ignoreMap":42},[129,105155,105156,105158,105160,105162,105164,105166,105168],{"class":131,"line":132},[129,105157,31948],{"class":135},[129,105159,104877],{"class":1977},[129,105161,104880],{"class":139},[129,105163,1314],{"class":188},[129,105165,104885],{"class":139},[129,105167,95687],{"class":188},[129,105169,3753],{"class":139},[14,105171,105172,105173,105175],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[126,105174,33402],{}," 里发生了什么。",[14,105177,105178],{},"推进 50 步：",[120,105180,105182],{"className":30379,"code":105181,"language":30381,"meta":42,"style":42},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[126,105183,105184,105200],{"__ignoreMap":42},[129,105185,105186,105188,105190,105192,105194,105196,105198],{"class":131,"line":132},[129,105187,3039],{"class":135},[129,105189,101502],{"class":139},[129,105191,26044],{"class":135},[129,105193,32444],{"class":188},[129,105195,140],{"class":139},[129,105197,795],{"class":188},[129,105199,30787],{"class":139},[129,105201,105202],{"class":131,"line":51},[129,105203,101700],{"class":139},[14,105205,105206,105207,105210,105211,105213],{},"由于 ",[126,105208,105209],{},"timestep=0.01","，所以 50 步后时间约为 ",[126,105212,35330],{}," 秒。",[14,105215,105216],{},"重置：",[120,105218,105219],{"className":30379,"code":104527,"language":30381,"meta":42,"style":42},[126,105220,105221],{"__ignoreMap":42},[129,105222,105223],{"class":131,"line":132},[129,105224,104527],{"class":139},[14,105226,105227],{},"这会把时间、位置、速度恢复到初始状态。",[14,105229,105230],{},"手动改高度：",[120,105232,105234],{"className":30379,"code":105233,"language":30381,"meta":42,"style":42},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[126,105235,105236,105248],{"__ignoreMap":42},[129,105237,105238,105240,105242,105244,105246],{"class":131,"line":132},[129,105239,104700],{"class":139},[129,105241,217],{"class":188},[129,105243,4457],{"class":139},[129,105245,185],{"class":135},[129,105247,104709],{"class":188},[129,105249,105250],{"class":131,"line":51},[129,105251,104544],{"class":139},[14,105253,105254,105255,105258,105259,105262],{},"这个例子里 ",[126,105256,105257],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[126,105260,105261],{},"2.0"," 表示把小球放到更高的位置。",[100,105264,101709],{"id":101709},[120,105266,105267],{"className":30379,"code":105151,"language":30381,"meta":42,"style":42},[126,105268,105269],{"__ignoreMap":42},[129,105270,105271,105273,105275,105277,105279,105281,105283],{"class":131,"line":132},[129,105272,31948],{"class":135},[129,105274,104877],{"class":1977},[129,105276,104880],{"class":139},[129,105278,1314],{"class":188},[129,105280,104885],{"class":139},[129,105282,95687],{"class":188},[129,105284,3753],{"class":139},[14,105286,105287],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[83,105289,105290,105299,105304],{},[86,105291,105292,105295,105296,105298],{},[126,105293,105294],{},"prefix","：一段文字，比如 ",[126,105297,105003],{},"，用来说明现在打印的是哪个阶段。",[86,105300,105301,105303],{},[126,105302,102086],{},"：MuJoCo 模型。",[86,105305,105306,105308],{},[126,105307,33402],{},"：MuJoCo 当前状态。",[14,105310,105311,352,105314,105317],{},[126,105312,105313],{},"prefix: str",[126,105315,105316],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[120,105319,105321],{"className":30379,"code":105320,"language":30381,"meta":42,"style":42},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[126,105322,105323],{"__ignoreMap":42},[129,105324,105325,105327,105329,105331,105333,105335],{"class":131,"line":132},[129,105326,30416],{"class":188},[129,105328,140],{"class":139},[129,105330,104928],{"class":244},[129,105332,104931],{"class":139},[129,105334,432],{"class":188},[129,105336,30498],{"class":139},[14,105338,105339,105342],{},[126,105340,105341],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[120,105344,105346],{"className":30379,"code":105345,"language":30381,"meta":42,"style":42},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[126,105347,105348,105360],{"__ignoreMap":42},[129,105349,105350,105352,105354,105356,105358],{"class":131,"line":132},[129,105351,101635],{"class":139},[129,105353,185],{"class":135},[129,105355,101413],{"class":139},[129,105357,101315],{"class":188},[129,105359,146],{"class":139},[129,105361,105362,105364,105366],{"class":131,"line":51},[129,105363,101659],{"class":139},[129,105365,185],{"class":135},[129,105367,101427],{"class":139},[14,105369,105370],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[120,105372,105374],{"className":30379,"code":105373,"language":30381,"meta":42,"style":42},"print_state(\"initial\", model, data)\n",[126,105375,105376],{"__ignoreMap":42},[129,105377,105378,105381,105383],{"class":131,"line":132},[129,105379,105380],{"class":139},"print_state(",[129,105382,105003],{"class":244},[129,105384,105006],{"class":139},[14,105386,105387,105388,105391],{},"调用刚才定义的 ",[126,105389,105390],{},"print_state"," 函数，打印初始状态。",[120,105393,105394],{"className":30379,"code":105181,"language":30381,"meta":42,"style":42},[126,105395,105396,105412],{"__ignoreMap":42},[129,105397,105398,105400,105402,105404,105406,105408,105410],{"class":131,"line":132},[129,105399,3039],{"class":135},[129,105401,101502],{"class":139},[129,105403,26044],{"class":135},[129,105405,32444],{"class":188},[129,105407,140],{"class":139},[129,105409,795],{"class":188},[129,105411,30787],{"class":139},[129,105413,105414],{"class":131,"line":51},[129,105415,101700],{"class":139},[14,105417,105418],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[120,105420,105421],{"className":30379,"code":104527,"language":30381,"meta":42,"style":42},[126,105422,105423],{"__ignoreMap":42},[129,105424,105425],{"class":131,"line":132},[129,105426,104527],{"class":139},[14,105428,105429,105430,105432,105433,105435],{},"重置 ",[126,105431,33402],{},"。注意它不会重新创建 ",[126,105434,102086],{},"，因为模型结构没有变，只是状态回到初始值。",[120,105437,105438],{"className":30379,"code":104693,"language":30381,"meta":42,"style":42},[126,105439,105440],{"__ignoreMap":42},[129,105441,105442,105444,105446,105448,105450],{"class":131,"line":132},[129,105443,104700],{"class":139},[129,105445,217],{"class":188},[129,105447,4457],{"class":139},[129,105449,185],{"class":135},[129,105451,104709],{"class":188},[14,105453,105454,105455,352,105458,352,105461,105463],{},"这行是“手动改状态”。在 freejoint 中，",[126,105456,105457],{},"qpos[0]",[126,105459,105460],{},"qpos[1]",[126,105462,105257],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[120,105465,105466],{"className":30379,"code":104544,"language":30381,"meta":42,"style":42},[126,105467,105468],{"__ignoreMap":42},[129,105469,105470],{"class":131,"line":132},[129,105471,104544],{"class":139},[14,105473,105474,105475,105477,105478,105480],{},"手动改完 ",[126,105476,104031],{}," 后，调用 ",[126,105479,104251],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[71,105482,102317],{"id":102316},[14,105484,105485],{},"你会看到:",[83,105487,105488,105493,105498,105501],{},[86,105489,105490,105491],{},"初始时间为 ",[126,105492,331],{},[86,105494,105495,105496],{},"50 步后时间约为 ",[126,105497,35330],{},[86,105499,105500],{},"reset 后状态恢复",[86,105502,105503,105504,105507,105508],{},"手动修改 ",[126,105505,105506],{},"data.qpos[2]"," 后，小球高度变为 ",[126,105509,105261],{},[14,105511,105512,105514],{},[126,105513,105257],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105516,105517],{},"输出里可以重点看三件事：",[83,105519,105520,105528,105533],{},[86,105521,105522,105524,105525,105527],{},[126,105523,2401],{}," 是否随着 ",[126,105526,101216],{}," 增加。",[86,105529,105530,105532],{},[126,105531,104031],{}," 的 z 坐标是否因为下落而变化。",[86,105534,105535,105537,105538,28386],{},[126,105536,104353],{}," 后时间是否回到 ",[126,105539,331],{},[71,105541,102349],{"id":102348},[83,105543,105544,105550,105556,105562,105565,105574],{},[86,105545,105546,105547,28386],{},"修改 timestep 为 ",[126,105548,105549],{},"0.005",[86,105551,105552,105553,28386],{},"重新运行，检查 50 步后时间是否约为 ",[126,105554,105555],{},"0.25",[86,105557,105558,105559,28386],{},"修改重力为 ",[126,105560,105561],{},"0 0 -1.0",[86,105563,105564],{},"观察小球下降速度是否变慢。",[86,105566,102412,105567,102415,105570,105573],{},[126,105568,105569],{},"data.qpos[2] = 2.0",[126,105571,105572],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[86,105575,105576,105577,105580],{},"注释掉 ",[126,105578,105579],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[71,105582,102454],{"id":102453},[100,105584,105586,105587,105589],{"id":105585},"修改-dataqpos-后位置没有更新","修改 ",[126,105588,101071],{}," 后位置没有更新",[14,105591,102463],{},[120,105593,105594],{"className":30379,"code":104544,"language":30381,"meta":42,"style":42},[126,105595,105596],{"__ignoreMap":42},[129,105597,105598],{"class":131,"line":132},[129,105599,104544],{"class":139},[100,105601,105602],{"id":105602},"数组维度看不懂",[14,105604,105605],{},"打印模型维度:",[120,105607,105609],{"className":30379,"code":105608,"language":30381,"meta":42,"style":42},"print(model.nq, model.nv, model.nu)\n",[126,105610,105611],{"__ignoreMap":42},[129,105612,105613,105615],{"class":131,"line":132},[129,105614,30416],{"class":188},[129,105616,105617],{"class":139},"(model.nq, model.nv, model.nu)\n",[277,105619,105620,105628],{},[280,105621,105622],{},[283,105623,105624,105626],{},[286,105625,104575],{"align":23751},[286,105627,100701],{"align":23751},[324,105629,105630,105640,105650],{},[283,105631,105632,105637],{},[329,105633,105634],{"align":23751},[126,105635,105636],{},"nq",[329,105638,105639],{"align":23751},"位置变量数量",[283,105641,105642,105647],{},[329,105643,105644],{"align":23751},[126,105645,105646],{},"nv",[329,105648,105649],{"align":23751},"速度变量数量",[283,105651,105652,105656],{},[329,105653,105654],{"align":23751},[126,105655,102163],{},[329,105657,105658],{"align":23751},"控制输入数量",[100,105660,105662,105663,105665],{"id":105661},"误以为-qpos-一定等于关节数","误以为 ",[126,105664,104031],{}," 一定等于关节数",[14,105667,105668,105669,82531,105671,105673,105674,105676],{},"不是。例如 ",[126,105670,101621],{},[126,105672,104031],{}," 是 7 维，但 ",[126,105675,104361],{}," 是 6 维。",[100,105678,105680,105681,105683],{"id":105679},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[126,105682,104031],{}," 的第几位",[14,105685,105686],{},"初学时可以先打印：",[120,105688,105690],{"className":30379,"code":105689,"language":30381,"meta":42,"style":42},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[126,105691,105692,105702,105712,105724],{"__ignoreMap":42},[129,105693,105694,105696,105698,105700],{"class":131,"line":132},[129,105695,30416],{"class":188},[129,105697,140],{"class":139},[129,105699,101440],{"class":244},[129,105701,101443],{"class":139},[129,105703,105704,105706,105708,105710],{"class":131,"line":51},[129,105705,30416],{"class":188},[129,105707,140],{"class":139},[129,105709,101452],{"class":244},[129,105711,101455],{"class":139},[129,105713,105714,105716,105718,105721],{"class":131,"line":1194},[129,105715,30416],{"class":188},[129,105717,140],{"class":139},[129,105719,105720],{"class":244},"\"qpos:\"",[129,105722,105723],{"class":139},", data.qpos)\n",[129,105725,105726,105728,105730,105733],{"class":131,"line":1209},[129,105727,30416],{"class":188},[129,105729,140],{"class":139},[129,105731,105732],{"class":244},"\"qvel:\"",[129,105734,105735],{"class":139},", data.qvel)\n",[14,105737,105738],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[100,105740,105741],{"id":105741},"仿真结果每次都一样",[14,105743,105744,105745,105747],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[126,105746,104031],{},"、目标点或控制输入。",[71,105749,102608],{"id":102607},[14,105751,105752,105753,24619],{},"Python 控制 MuJoCo 的核心就是读写 ",[126,105754,33402],{},[83,105756,105757,105765,105770,105775],{},[86,105758,105759,105760,101019,105762,105764],{},"用 ",[126,105761,101071],{},[126,105763,101074],{}," 读取状态。",[86,105766,105759,105767,105769],{},[126,105768,101077],{}," 写入控制。",[86,105771,105759,105772,105774],{},[126,105773,101216],{}," 推进时间。",[86,105776,105777,105778,105780],{},"手动改状态后用 ",[126,105779,104251],{}," 刷新派生量。",[14,105782,105783],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5141,105785,105786],{},"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":42,"searchDepth":51,"depth":51,"links":105788},[105789,105790,105791,105798,105802,105803,105804,105814],{"id":100647,"depth":51,"text":100648},{"id":100770,"depth":51,"text":100771},{"id":101045,"depth":51,"text":101046,"children":105792},[105793,105795,105797],{"id":104556,"depth":1194,"text":105794},"qpos、qvel、ctrl 是什么",{"id":104634,"depth":1194,"text":105796},"mj_step 和 mj_forward 的区别",{"id":104723,"depth":1194,"text":104724},{"id":101253,"depth":51,"text":101254,"children":105799},[105800,105801],{"id":101573,"depth":1194,"text":101573},{"id":101709,"depth":1194,"text":101709},{"id":102316,"depth":51,"text":102317},{"id":102348,"depth":51,"text":102349},{"id":102453,"depth":51,"text":102454,"children":105805},[105806,105808,105809,105811,105813],{"id":105585,"depth":1194,"text":105807},"修改 data.qpos 后位置没有更新",{"id":105602,"depth":1194,"text":105602},{"id":105661,"depth":1194,"text":105810},"误以为 qpos 一定等于关节数",{"id":105679,"depth":1194,"text":105812},"不知道某个元素在 qpos 的第几位",{"id":105741,"depth":1194,"text":105741},{"id":102607,"depth":51,"text":102608},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104319,"description":42},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105821,"title":105822,"body":105823,"description":42,"extension":54,"meta":107513,"navigation":56,"path":107514,"seo":107515,"stem":107516,"__hash__":107517},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105824,"toc":107489},[105825,105828,105830,105833,105835,105860,105863,105882,105885,105887,105889,105913,105915,105929,105931,105972,105974,105998,106000,106003,106037,106039,106052,106055,106123,106132,106136,106139,106173,106179,106182,106186,106225,106228,106248,106252,106295,106297,106326,106329,106335,106338,106340,106734,106736,106748,106750,106761,106763,106766,106795,106803,106806,106841,106844,106846,106854,106857,106859,106870,106880,106900,106903,106939,106951,106999,107018,107060,107073,107101,107106,107127,107137,107155,107158,107192,107195,107215,107218,107237,107243,107245,107248,107254,107260,107270,107273,107279,107288,107290,107336,107338,107344,107350,107353,107356,107376,107379,107385,107391,107393,107416,107419,107422,107431,107434,107472,107474,107477,107483,107486],[10,105826,105822],{"id":105827},"_4关节actuator-与力控制",[71,105829,100648],{"id":100647},[14,105831,105832],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105834,104332],{},[83,105836,105837,105843,105848,105852,105857],{},[86,105838,105839,105842],{},[126,105840,105841],{},"hinge"," 关节",[86,105844,105845],{},[126,105846,105847],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[86,105849,105850],{},[126,105851,101077],{},[86,105853,105854],{},[126,105855,105856],{},"ctrlrange",[86,105858,105859],{},"读取关节角和角速度",[14,105861,105862],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[120,105864,105866],{"className":30379,"code":105865,"language":30381,"meta":42,"style":42},"data.ctrl[0] = ...\n",[126,105867,105868],{"__ignoreMap":42},[129,105869,105870,105873,105875,105877,105879],{"class":131,"line":132},[129,105871,105872],{"class":139},"data.ctrl[",[129,105874,331],{"class":188},[129,105876,4457],{"class":139},[129,105878,185],{"class":135},[129,105880,105881],{"class":188}," ...\n",[14,105883,105884],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[71,105886,100771],{"id":100770},[14,105888,100774],{},[120,105890,105891],{"className":23837,"code":104389,"language":23839,"meta":42,"style":42},[126,105892,105893],{"__ignoreMap":42},[129,105894,105895,105897,105899,105901,105903,105905,105907,105909,105911],{"class":131,"line":132},[129,105896,24577],{"class":1977},[129,105898,26316],{"class":244},[129,105900,23849],{"class":244},[129,105902,26401],{"class":188},[129,105904,104404],{"class":244},[129,105906,100799],{"class":244},[129,105908,102502],{"class":244},[129,105910,100815],{"class":244},[129,105912,104413],{"class":244},[14,105914,102820],{},[120,105916,105917],{"className":23837,"code":100920,"language":23839,"meta":42,"style":42},[126,105918,105919],{"__ignoreMap":42},[129,105920,105921,105923,105925,105927],{"class":131,"line":132},[129,105922,23846],{"class":1977},[129,105924,23849],{"class":244},[129,105926,100931],{"class":244},[129,105928,100934],{"class":244},[14,105930,102837],{},[120,105932,105934],{"className":23837,"code":105933,"language":23839,"meta":42,"style":42},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[126,105935,105936,105953,105962],{"__ignoreMap":42},[129,105937,105938,105940,105942,105944,105947,105949,105951],{"class":131,"line":132},[129,105939,30331],{"class":1977},[129,105941,29177],{"class":244},[129,105943,25116],{"class":188},[129,105945,105946],{"class":244}," mujoco-control",[129,105948,100976],{"class":244},[129,105950,100979],{"class":188},[129,105952,100982],{"class":188},[129,105954,105955,105957,105959],{"class":131,"line":51},[129,105956,30331],{"class":1977},[129,105958,100989],{"class":244},[129,105960,105961],{"class":244}," mujoco-control\n",[129,105963,105964,105966,105968,105970],{"class":131,"line":1194},[129,105965,23846],{"class":1977},[129,105967,23849],{"class":244},[129,105969,100931],{"class":244},[129,105971,100934],{"class":244},[14,105973,101005],{},[83,105975,105976,105982,105989,105995],{},[86,105977,105978,105981],{},[126,105979,105980],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[86,105983,105984,105986,105987,28386],{},[126,105985,101077],{}," 长度等于 ",[126,105988,102159],{},[86,105990,82223,105991,105994],{},[126,105992,105993],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[86,105996,105997],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[71,105999,101046],{"id":101045},[14,106001,106002],{},"关节决定 body 如何运动:",[120,106004,106006],{"className":53068,"code":106005,"language":53070,"meta":42,"style":42},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[126,106007,106008],{"__ignoreMap":42},[129,106009,106010,106012,106014,106016,106018,106021,106023,106025,106027,106030,106032,106035],{"class":131,"line":132},[129,106011,1049],{"class":139},[129,106013,102957],{"class":51301},[129,106015,14935],{"class":1977},[129,106017,185],{"class":139},[129,106019,106020],{"class":244},"\"hinge\"",[129,106022,53825],{"class":1977},[129,106024,185],{"class":139},[129,106026,106020],{"class":244},[129,106028,106029],{"class":1977}," axis",[129,106031,185],{"class":139},[129,106033,106034],{"class":244},"\"0 1 0\"",[129,106036,101145],{"class":139},[14,106038,103053],{},[83,106040,106041,106046,106049],{},[86,106042,106043,106044],{},"名字是 ",[126,106045,105841],{},[86,106047,106048],{},"类型是旋转关节",[86,106050,106051],{},"绕 y 轴旋转",[14,106053,106054],{},"actuator 决定如何施加控制:",[120,106056,106058],{"className":53068,"code":106057,"language":53070,"meta":42,"style":42},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[126,106059,106060,106069,106115],{"__ignoreMap":42},[129,106061,106062,106064,106067],{"class":131,"line":132},[129,106063,1049],{"class":139},[129,106065,106066],{"class":51301},"actuator",[129,106068,51308],{"class":139},[129,106070,106071,106073,106076,106078,106080,106083,106086,106088,106090,106093,106095,106097,106100,106102,106105,106108,106110,106113],{"class":131,"line":51},[129,106072,52145],{"class":139},[129,106074,106075],{"class":51301},"motor",[129,106077,14935],{"class":1977},[129,106079,185],{"class":139},[129,106081,106082],{"class":244},"\"hinge_motor\"",[129,106084,106085],{"class":1977}," joint",[129,106087,185],{"class":139},[129,106089,106020],{"class":244},[129,106091,106092],{"class":1977}," gear",[129,106094,185],{"class":139},[129,106096,3692],{"class":244},[129,106098,106099],{"class":1977}," ctrlrange",[129,106101,185],{"class":139},[129,106103,106104],{"class":244},"\"-2 2\"",[129,106106,106107],{"class":1977}," ctrllimited",[129,106109,185],{"class":139},[129,106111,106112],{"class":244},"\"true\"",[129,106114,101145],{"class":139},[129,106116,106117,106119,106121],{"class":131,"line":1194},[129,106118,51786],{"class":139},[129,106120,106066],{"class":51301},[129,106122,51308],{"class":139},[14,106124,106125,106128,106129,28386],{},[126,106126,106127],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[126,106130,106131],{},"[-2, 2]",[100,106133,106135],{"id":106134},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106137,106138],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[277,106140,106141,106151],{},[280,106142,106143],{},[283,106144,106145,106147,106149],{},[286,106146,25754],{"align":23751},[286,106148,102697],{"align":23751},[286,106150,100735],{"align":23751},[324,106152,106153,106163],{},[283,106154,106155,106157,106160],{},[329,106156,102957],{"align":23751},[329,106158,106159],{"align":23751},"定义能怎么动",[329,106161,106162],{"align":23751},"门轴允许门旋转",[283,106164,106165,106167,106170],{},[329,106166,106066],{"align":23751},[329,106168,106169],{"align":23751},"定义怎么施力或控制",[329,106171,106172],{"align":23751},"人推门、马达带动门",[14,106174,106175,106176,106178],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[126,106177,101077],{}," 主动控制它。",[14,106180,106181],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[100,106183,106185],{"id":106184},"hinge-joint","hinge joint",[120,106187,106189],{"className":53068,"code":106188,"language":53070,"meta":42,"style":42},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[126,106190,106191],{"__ignoreMap":42},[129,106192,106193,106195,106197,106199,106201,106203,106205,106207,106209,106211,106213,106215,106218,106220,106223],{"class":131,"line":132},[129,106194,1049],{"class":139},[129,106196,102957],{"class":51301},[129,106198,14935],{"class":1977},[129,106200,185],{"class":139},[129,106202,106020],{"class":244},[129,106204,53825],{"class":1977},[129,106206,185],{"class":139},[129,106208,106020],{"class":244},[129,106210,106029],{"class":1977},[129,106212,185],{"class":139},[129,106214,106034],{"class":244},[129,106216,106217],{"class":1977}," damping",[129,106219,185],{"class":139},[129,106221,106222],{"class":244},"\"0.1\"",[129,106224,101145],{"class":139},[14,106226,106227],{},"含义：",[83,106229,106230,106236,106242],{},[86,106231,106232,106235],{},[126,106233,106234],{},"type=\"hinge\"","：只能绕一个轴旋转。",[86,106237,106238,106241],{},[126,106239,106240],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[86,106243,106244,106247],{},[126,106245,106246],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[100,106249,106251],{"id":106250},"motor-actuator","motor actuator",[120,106253,106255],{"className":53068,"code":106254,"language":53070,"meta":42,"style":42},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[126,106256,106257],{"__ignoreMap":42},[129,106258,106259,106261,106263,106265,106267,106269,106271,106273,106275,106277,106279,106281,106283,106285,106287,106289,106291,106293],{"class":131,"line":132},[129,106260,1049],{"class":139},[129,106262,106075],{"class":51301},[129,106264,14935],{"class":1977},[129,106266,185],{"class":139},[129,106268,106082],{"class":244},[129,106270,106085],{"class":1977},[129,106272,185],{"class":139},[129,106274,106020],{"class":244},[129,106276,106092],{"class":1977},[129,106278,185],{"class":139},[129,106280,3692],{"class":244},[129,106282,106099],{"class":1977},[129,106284,185],{"class":139},[129,106286,106104],{"class":244},[129,106288,106107],{"class":1977},[129,106290,185],{"class":139},[129,106292,106112],{"class":244},[129,106294,101145],{"class":139},[14,106296,106227],{},[83,106298,106299,106308,106314,106320],{},[86,106300,106301,106304,106305,106307],{},[126,106302,106303],{},"joint=\"hinge\"","：这个电机作用在名为 ",[126,106306,105841],{}," 的关节上。",[86,106309,106310,106313],{},[126,106311,106312],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[86,106315,106316,106319],{},[126,106317,106318],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[86,106321,106322,106325],{},[126,106323,106324],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106327,106328],{},"简单理解：",[120,106330,106333],{"className":106331,"code":106332,"language":5202,"meta":42},[5200],"实际施加效果 ≈ data.ctrl[0] * gear\n",[126,106334,106332],{"__ignoreMap":42},[14,106336,106337],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[71,106339,101254],{"id":101253},[120,106341,106343],{"className":30379,"code":106342,"language":30381,"meta":42,"style":42},"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",[126,106344,106345,106352,106356,106362,106372,106376,106380,106388,106393,106398,106402,106406,106411,106416,106420,106425,106430,106435,106440,106444,106448,106452,106457,106462,106467,106471,106475,106479,106483,106495,106507,106515,106519,106529,106539,106549,106553,106566,106579,106583,106600,106614,106649,106653,106657,106668,106683,106698,106710,106714,106718,106730],{"__ignoreMap":42},[129,106346,106347,106349],{"class":131,"line":132},[129,106348,30393],{"class":135},[129,106350,106351],{"class":139}," math\n",[129,106353,106354],{"class":131,"line":51},[129,106355,2414],{"emptyLinePlaceholder":56},[129,106357,106358,106360],{"class":131,"line":1194},[129,106359,30393],{"class":135},[129,106361,101302],{"class":139},[129,106363,106364,106366,106368,106370],{"class":131,"line":1209},[129,106365,30393],{"class":135},[129,106367,31381],{"class":139},[129,106369,31384],{"class":135},[129,106371,31387],{"class":139},[129,106373,106374],{"class":131,"line":1215},[129,106375,2414],{"emptyLinePlaceholder":56},[129,106377,106378],{"class":131,"line":1229},[129,106379,2414],{"emptyLinePlaceholder":56},[129,106381,106382,106384,106386],{"class":131,"line":1235},[129,106383,101315],{"class":188},[129,106385,13579],{"class":135},[129,106387,101320],{"class":244},[129,106389,106390],{"class":131,"line":1326},[129,106391,106392],{"class":244},"\u003Cmujoco model=\"one_link_motor\">\n",[129,106394,106395],{"class":131,"line":1332},[129,106396,106397],{"class":244},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[129,106399,106400],{"class":131,"line":1344},[129,106401,2414],{"emptyLinePlaceholder":56},[129,106403,106404],{"class":131,"line":1626},[129,106405,101339],{"class":244},[129,106407,106408],{"class":131,"line":1631},[129,106409,106410],{"class":244},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[129,106412,106413],{"class":131,"line":1637},[129,106414,106415],{"class":244},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[129,106417,106418],{"class":131,"line":1642},[129,106419,2414],{"emptyLinePlaceholder":56},[129,106421,106422],{"class":131,"line":1656},[129,106423,106424],{"class":244},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[129,106426,106427],{"class":131,"line":1661},[129,106428,106429],{"class":244},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[129,106431,106432],{"class":131,"line":1667},[129,106433,106434],{"class":244},"        \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",[129,106436,106437],{"class":131,"line":1688},[129,106438,106439],{"class":244},"      \u003C\u002Fbody>\n",[129,106441,106442],{"class":131,"line":1693},[129,106443,101368],{"class":244},[129,106445,106446],{"class":131,"line":1707},[129,106447,101373],{"class":244},[129,106449,106450],{"class":131,"line":1712},[129,106451,2414],{"emptyLinePlaceholder":56},[129,106453,106454],{"class":131,"line":1741},[129,106455,106456],{"class":244},"  \u003Cactuator>\n",[129,106458,106459],{"class":131,"line":1746},[129,106460,106461],{"class":244},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[129,106463,106464],{"class":131,"line":1763},[129,106465,106466],{"class":244},"  \u003C\u002Factuator>\n",[129,106468,106469],{"class":131,"line":1768},[129,106470,101378],{"class":244},[129,106472,106473],{"class":131,"line":1773},[129,106474,95699],{"class":244},[129,106476,106477],{"class":131,"line":1778},[129,106478,2414],{"emptyLinePlaceholder":56},[129,106480,106481],{"class":131,"line":1792},[129,106482,2414],{"emptyLinePlaceholder":56},[129,106484,106485,106487,106489,106491,106493],{"class":131,"line":1797},[129,106486,31948],{"class":135},[129,106488,1987],{"class":1977},[129,106490,101399],{"class":139},[129,106492,95687],{"class":188},[129,106494,3753],{"class":139},[129,106496,106497,106499,106501,106503,106505],{"class":131,"line":2591},[129,106498,101408],{"class":139},[129,106500,185],{"class":135},[129,106502,101413],{"class":139},[129,106504,101315],{"class":188},[129,106506,146],{"class":139},[129,106508,106509,106511,106513],{"class":131,"line":2605},[129,106510,101422],{"class":139},[129,106512,185],{"class":135},[129,106514,101427],{"class":139},[129,106516,106517],{"class":131,"line":2613},[129,106518,2414],{"emptyLinePlaceholder":56},[129,106520,106521,106523,106525,106527],{"class":131,"line":2618},[129,106522,31300],{"class":188},[129,106524,140],{"class":139},[129,106526,101440],{"class":244},[129,106528,101443],{"class":139},[129,106530,106531,106533,106535,106537],{"class":131,"line":2624},[129,106532,31300],{"class":188},[129,106534,140],{"class":139},[129,106536,101452],{"class":244},[129,106538,101455],{"class":139},[129,106540,106541,106543,106545,106547],{"class":131,"line":2630},[129,106542,31300],{"class":188},[129,106544,140],{"class":139},[129,106546,101464],{"class":244},[129,106548,101467],{"class":139},[129,106550,106551],{"class":131,"line":2635},[129,106552,2414],{"emptyLinePlaceholder":56},[129,106554,106555,106557,106560,106562,106564],{"class":131,"line":7963},[129,106556,3115],{"class":135},[129,106558,106559],{"class":139}," model.nu ",[129,106561,20963],{"class":135},[129,106563,25119],{"class":188},[129,106565,3753],{"class":139},[129,106567,106568,106570,106572,106574,106577],{"class":131,"line":7987},[129,106569,103433],{"class":135},[129,106571,103436],{"class":188},[129,106573,140],{"class":139},[129,106575,106576],{"class":244},"\"expected exactly one actuator\"",[129,106578,146],{"class":139},[129,106580,106581],{"class":131,"line":7992},[129,106582,2414],{"emptyLinePlaceholder":56},[129,106584,106585,106587,106589,106591,106593,106595,106598],{"class":131,"line":7998},[129,106586,3215],{"class":135},[129,106588,31617],{"class":139},[129,106590,26044],{"class":135},[129,106592,32444],{"class":188},[129,106594,140],{"class":139},[129,106596,106597],{"class":188},"2000",[129,106599,30787],{"class":139},[129,106601,106602,106605,106607,106609,106611],{"class":131,"line":8025},[129,106603,106604],{"class":139},"        t ",[129,106606,185],{"class":135},[129,106608,31617],{"class":139},[129,106610,594],{"class":135},[129,106612,106613],{"class":139}," model.opt.timestep\n",[129,106615,106616,106619,106621,106623,106625,106628,106630,106633,106635,106637,106640,106642,106644,106646],{"class":131,"line":8030},[129,106617,106618],{"class":139},"        data.ctrl[",[129,106620,331],{"class":188},[129,106622,4457],{"class":139},[129,106624,185],{"class":135},[129,106626,106627],{"class":188}," 1.5",[129,106629,6533],{"class":135},[129,106631,106632],{"class":139}," math.sin(",[129,106634,105261],{"class":188},[129,106636,6533],{"class":135},[129,106638,106639],{"class":139}," math.pi ",[129,106641,594],{"class":135},[129,106643,61868],{"class":188},[129,106645,6533],{"class":135},[129,106647,106648],{"class":139}," t)\n",[129,106650,106651],{"class":131,"line":8036},[129,106652,101517],{"class":139},[129,106654,106655],{"class":131,"line":8048},[129,106656,2414],{"emptyLinePlaceholder":56},[129,106658,106659,106661,106663,106666],{"class":131,"line":8060},[129,106660,31300],{"class":188},[129,106662,140],{"class":139},[129,106664,106665],{"class":244},"\"time:\"",[129,106667,101479],{"class":139},[129,106669,106670,106672,106674,106677,106679,106681],{"class":131,"line":8072},[129,106671,31300],{"class":188},[129,106673,140],{"class":139},[129,106675,106676],{"class":244},"\"joint qpos:\"",[129,106678,104931],{"class":139},[129,106680,432],{"class":188},[129,106682,30498],{"class":139},[129,106684,106685,106687,106689,106692,106694,106696],{"class":131,"line":9731},[129,106686,31300],{"class":188},[129,106688,140],{"class":139},[129,106690,106691],{"class":244},"\"joint qvel:\"",[129,106693,104947],{"class":139},[129,106695,432],{"class":188},[129,106697,30498],{"class":139},[129,106699,106700,106702,106704,106707],{"class":131,"line":9756},[129,106701,31300],{"class":188},[129,106703,140],{"class":139},[129,106705,106706],{"class":244},"\"last ctrl:\"",[129,106708,106709],{"class":139},", data.ctrl.copy())\n",[129,106711,106712],{"class":131,"line":9779},[129,106713,2414],{"emptyLinePlaceholder":56},[129,106715,106716],{"class":131,"line":9803},[129,106717,2414],{"emptyLinePlaceholder":56},[129,106719,106720,106722,106724,106726,106728],{"class":131,"line":9808},[129,106721,1545],{"class":135},[129,106723,31221],{"class":188},[129,106725,101560],{"class":135},[129,106727,101563],{"class":244},[129,106729,3753],{"class":139},[129,106731,106732],{"class":131,"line":9813},[129,106733,101570],{"class":139},[14,106735,103571],{},[120,106737,106739],{"className":23837,"code":106738,"language":23839,"meta":42,"style":42},"touch ch4_joint_motor.py\n",[126,106740,106741],{"__ignoreMap":42},[129,106742,106743,106745],{"class":131,"line":132},[129,106744,101284],{"class":1977},[129,106746,106747],{"class":244}," ch4_joint_motor.py\n",[14,106749,102302],{},[120,106751,106753],{"className":23837,"code":106752,"language":23839,"meta":42,"style":42},"python ch4_joint_motor.py\n",[126,106754,106755],{"__ignoreMap":42},[129,106756,106757,106759],{"class":131,"line":132},[129,106758,30381],{"class":1977},[129,106760,106747],{"class":244},[100,106762,101573],{"id":101573},[14,106764,106765],{},"检查 actuator 数量：",[120,106767,106769],{"className":30379,"code":106768,"language":30381,"meta":42,"style":42},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[126,106770,106771,106783],{"__ignoreMap":42},[129,106772,106773,106775,106777,106779,106781],{"class":131,"line":132},[129,106774,1545],{"class":135},[129,106776,106559],{"class":139},[129,106778,20963],{"class":135},[129,106780,25119],{"class":188},[129,106782,3753],{"class":139},[129,106784,106785,106787,106789,106791,106793],{"class":131,"line":51},[129,106786,103896],{"class":135},[129,106788,103436],{"class":188},[129,106790,140],{"class":139},[129,106792,106576],{"class":244},[129,106794,146],{"class":139},[14,106796,106797,106799,106800,106802],{},[126,106798,102159],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[126,106801,101077],{}," 长度应该是 1。",[14,106804,106805],{},"产生正弦控制信号：",[120,106807,106809],{"className":30379,"code":106808,"language":30381,"meta":42,"style":42},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[126,106810,106811],{"__ignoreMap":42},[129,106812,106813,106815,106817,106819,106821,106823,106825,106827,106829,106831,106833,106835,106837,106839],{"class":131,"line":132},[129,106814,105872],{"class":139},[129,106816,331],{"class":188},[129,106818,4457],{"class":139},[129,106820,185],{"class":135},[129,106822,106627],{"class":188},[129,106824,6533],{"class":135},[129,106826,106632],{"class":139},[129,106828,105261],{"class":188},[129,106830,6533],{"class":135},[129,106832,106639],{"class":139},[129,106834,594],{"class":135},[129,106836,61868],{"class":188},[129,106838,6533],{"class":135},[129,106840,106648],{"class":139},[14,106842,106843],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106845,101674],{},[120,106847,106848],{"className":30379,"code":104506,"language":30381,"meta":42,"style":42},[126,106849,106850],{"__ignoreMap":42},[129,106851,106852],{"class":131,"line":132},[129,106853,104506],{"class":139},[14,106855,106856],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[100,106858,101709],{"id":101709},[120,106860,106862],{"className":30379,"code":106861,"language":30381,"meta":42,"style":42},"import math\n",[126,106863,106864],{"__ignoreMap":42},[129,106865,106866,106868],{"class":131,"line":132},[129,106867,30393],{"class":135},[129,106869,106351],{"class":139},[14,106871,106872,106873,101019,106876,106879],{},"导入 Python 标准库里的数学模块。后面要用 ",[126,106874,106875],{},"math.sin",[126,106877,106878],{},"math.pi"," 生成周期变化的控制信号。",[120,106881,106882],{"className":30379,"code":103687,"language":30381,"meta":42,"style":42},[126,106883,106884,106890],{"__ignoreMap":42},[129,106885,106886,106888],{"class":131,"line":132},[129,106887,30393],{"class":135},[129,106889,101302],{"class":139},[129,106891,106892,106894,106896,106898],{"class":131,"line":51},[129,106893,30393],{"class":135},[129,106895,31381],{"class":139},[129,106897,31384],{"class":135},[129,106899,31387],{"class":139},[14,106901,106902],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[120,106904,106905],{"className":53068,"code":106188,"language":53070,"meta":42,"style":42},[126,106906,106907],{"__ignoreMap":42},[129,106908,106909,106911,106913,106915,106917,106919,106921,106923,106925,106927,106929,106931,106933,106935,106937],{"class":131,"line":132},[129,106910,1049],{"class":139},[129,106912,102957],{"class":51301},[129,106914,14935],{"class":1977},[129,106916,185],{"class":139},[129,106918,106020],{"class":244},[129,106920,53825],{"class":1977},[129,106922,185],{"class":139},[129,106924,106020],{"class":244},[129,106926,106029],{"class":1977},[129,106928,185],{"class":139},[129,106930,106034],{"class":244},[129,106932,106217],{"class":1977},[129,106934,185],{"class":139},[129,106936,106222],{"class":244},[129,106938,101145],{"class":139},[14,106940,106941,106942,106944,106945,106947,106948,106950],{},"这行定义关节。",[126,106943,105841],{}," 表示旋转关节。",[126,106946,106240],{}," 表示绕 y 轴旋转。",[126,106949,106246],{}," 表示有一点阻尼，运动不会完全无损耗。",[120,106952,106954],{"className":53068,"code":106953,"language":53070,"meta":42,"style":42},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[126,106955,106956],{"__ignoreMap":42},[129,106957,106958,106960,106962,106964,106966,106969,106971,106973,106976,106979,106981,106984,106986,106988,106990,106992,106994,106997],{"class":131,"line":132},[129,106959,1049],{"class":139},[129,106961,101121],{"class":51301},[129,106963,14935],{"class":1977},[129,106965,185],{"class":139},[129,106967,106968],{"class":244},"\"link_geom\"",[129,106970,53825],{"class":1977},[129,106972,185],{"class":139},[129,106974,106975],{"class":244},"\"capsule\"",[129,106977,106978],{"class":1977}," fromto",[129,106980,185],{"class":139},[129,106982,106983],{"class":244},"\"0 0 0 0 0 0.5\"",[129,106985,101137],{"class":1977},[129,106987,185],{"class":139},[129,106989,103779],{"class":244},[129,106991,102002],{"class":1977},[129,106993,185],{"class":139},[129,106995,106996],{"class":244},"\"0.5\"",[129,106998,101145],{"class":139},[14,107000,107001,107002,107004,107005,107007,107008,107011,107012,28386,107015,107017],{},"这行定义摆杆的形状。",[126,107003,103166],{}," 是胶囊体，适合表示杆子。",[126,107006,103177],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[126,107009,107010],{},"(0,0,0)"," 延伸到 ",[126,107013,107014],{},"(0,0,0.5)",[126,107016,103171],{}," 是半径。",[120,107019,107020],{"className":53068,"code":106254,"language":53070,"meta":42,"style":42},[126,107021,107022],{"__ignoreMap":42},[129,107023,107024,107026,107028,107030,107032,107034,107036,107038,107040,107042,107044,107046,107048,107050,107052,107054,107056,107058],{"class":131,"line":132},[129,107025,1049],{"class":139},[129,107027,106075],{"class":51301},[129,107029,14935],{"class":1977},[129,107031,185],{"class":139},[129,107033,106082],{"class":244},[129,107035,106085],{"class":1977},[129,107037,185],{"class":139},[129,107039,106020],{"class":244},[129,107041,106092],{"class":1977},[129,107043,185],{"class":139},[129,107045,3692],{"class":244},[129,107047,106099],{"class":1977},[129,107049,185],{"class":139},[129,107051,106104],{"class":244},[129,107053,106107],{"class":1977},[129,107055,185],{"class":139},[129,107057,106112],{"class":244},[129,107059,101145],{"class":139},[14,107061,107062,107063,107065,107066,107069,107070,107072],{},"这行定义电机。它作用在 ",[126,107064,105841],{}," 关节上。",[126,107067,107068],{},"gear"," 可以理解成放大倍数。",[126,107071,105856],{}," 限制控制输入范围。",[120,107074,107075],{"className":30379,"code":106768,"language":30381,"meta":42,"style":42},[126,107076,107077,107089],{"__ignoreMap":42},[129,107078,107079,107081,107083,107085,107087],{"class":131,"line":132},[129,107080,1545],{"class":135},[129,107082,106559],{"class":139},[129,107084,20963],{"class":135},[129,107086,25119],{"class":188},[129,107088,3753],{"class":139},[129,107090,107091,107093,107095,107097,107099],{"class":131,"line":51},[129,107092,103896],{"class":135},[129,107094,103436],{"class":188},[129,107096,140],{"class":139},[129,107098,106576],{"class":244},[129,107100,146],{"class":139},[14,107102,107103,107105],{},[126,107104,102159],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[120,107107,107109],{"className":30379,"code":107108,"language":30381,"meta":42,"style":42},"for step in range(2000):\n",[126,107110,107111],{"__ignoreMap":42},[129,107112,107113,107115,107117,107119,107121,107123,107125],{"class":131,"line":132},[129,107114,3039],{"class":135},[129,107116,31617],{"class":139},[129,107118,26044],{"class":135},[129,107120,32444],{"class":188},[129,107122,140],{"class":139},[129,107124,106597],{"class":188},[129,107126,30787],{"class":139},[14,107128,107129,107130,107132,107133,107136],{},"循环 2000 步。这里没有用 ",[126,107131,1131],{},"，而是用 ",[126,107134,107135],{},"step","，因为后面要用当前步数计算时间。",[120,107138,107140],{"className":30379,"code":107139,"language":30381,"meta":42,"style":42},"t = step * model.opt.timestep\n",[126,107141,107142],{"__ignoreMap":42},[129,107143,107144,107147,107149,107151,107153],{"class":131,"line":132},[129,107145,107146],{"class":139},"t ",[129,107148,185],{"class":135},[129,107150,31617],{"class":139},[129,107152,594],{"class":135},[129,107154,106613],{"class":139},[14,107156,107157],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[120,107159,107160],{"className":30379,"code":106808,"language":30381,"meta":42,"style":42},[126,107161,107162],{"__ignoreMap":42},[129,107163,107164,107166,107168,107170,107172,107174,107176,107178,107180,107182,107184,107186,107188,107190],{"class":131,"line":132},[129,107165,105872],{"class":139},[129,107167,331],{"class":188},[129,107169,4457],{"class":139},[129,107171,185],{"class":135},[129,107173,106627],{"class":188},[129,107175,6533],{"class":135},[129,107177,106632],{"class":139},[129,107179,105261],{"class":188},[129,107181,6533],{"class":135},[129,107183,106639],{"class":139},[129,107185,594],{"class":135},[129,107187,61868],{"class":188},[129,107189,6533],{"class":135},[129,107191,106648],{"class":139},[14,107193,107194],{},"这行给电机输入一个正弦波。拆开看：",[83,107196,107197,107203,107209],{},[86,107198,107199,107202],{},[126,107200,107201],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[86,107204,107205,107208],{},[126,107206,107207],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[86,107210,107211,107214],{},[126,107212,107213],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107216,107217],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[120,107219,107221],{"className":30379,"code":107220,"language":30381,"meta":42,"style":42},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[126,107222,107223],{"__ignoreMap":42},[129,107224,107225,107227,107229,107231,107233,107235],{"class":131,"line":132},[129,107226,30416],{"class":188},[129,107228,140],{"class":139},[129,107230,106676],{"class":244},[129,107232,104931],{"class":139},[129,107234,432],{"class":188},[129,107236,30498],{"class":139},[14,107238,107239,107240,107242],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[126,107241,101071],{}," 只有一个数。",[71,107244,102317],{"id":102316},[14,107246,107247],{},"输出类似:",[120,107249,107252],{"className":107250,"code":107251,"language":5202,"meta":42},[5200],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[126,107253,107251],{"__ignoreMap":42},[14,107255,107256,107257,107259],{},"这里 ",[126,107258,106127],{}," 是电机输入。",[14,107261,107262,107265,107266,107269],{},[126,107263,107264],{},"joint qpos"," 是关节角度，单位通常是弧度。",[126,107267,107268],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107271,107272],{},"角度单位提示：",[120,107274,107277],{"className":107275,"code":107276,"language":5202,"meta":42},[5200],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[126,107278,107276],{"__ignoreMap":42},[14,107280,107281,107282,107284,107285,107287],{},"如果你看到 ",[126,107283,104031],{}," 是 ",[126,107286,35330],{},"，大约就是 28.6 度。",[71,107289,102349],{"id":102348},[83,107291,107292,107299,107302,107309,107312,107320,107328],{},[86,107293,102412,107294,102415,107296,28386],{},[126,107295,106312],{},[126,107297,107298],{},"gear=\"5\"",[86,107300,107301],{},"重新运行，观察关节运动是否更剧烈。",[86,107303,102412,107304,102415,107306,28386],{},[126,107305,105856],{},[126,107307,107308],{},"-0.2 0.2",[86,107310,107311],{},"重新运行，观察控制能力是否变弱。",[86,107313,107314,107315,107317,107318,28386],{},"去掉 actuator，确认 ",[126,107316,102159],{}," 变成 ",[126,107319,331],{},[86,107321,102412,107322,102415,107324,107327],{},[126,107323,106246],{},[126,107325,107326],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[86,107329,102412,107330,102415,107332,107335],{},[126,107331,106240],{},[126,107333,107334],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[71,107337,102454],{"id":102453},[100,107339,107341],{"id":107340},"indexerror-index-0-is-out-of-bounds",[126,107342,107343],{},"IndexError: index 0 is out of bounds",[14,107345,107346,107347,107349],{},"原因是 ",[126,107348,105993],{},"，没有 actuator。",[100,107351,107352],{"id":107352},"关节几乎不动",[14,107354,107355],{},"可能原因:",[83,107357,107358,107363,107367,107373],{},[86,107359,107360,107362],{},[126,107361,107068],{}," 太小",[86,107364,107365,107362],{},[126,107366,105856],{},[86,107368,107369,107372],{},[126,107370,107371],{},"damping"," 太大",[86,107374,107375],{},"重力方向导致运动不明显",[100,107377,107378],{"id":107378},"模型编译失败",[14,107380,107381,107382,107384],{},"检查 actuator 引用的 ",[126,107383,106303],{}," 是否存在，joint 名称是否拼写一致。",[100,107386,107388,107390],{"id":107387},"datactrl0-写了但没有效果",[126,107389,106127],{}," 写了但没有效果",[14,107392,102576],{},[83,107394,107395,107400,107403,107408,107413],{},[86,107396,107397,107399],{},[126,107398,102159],{}," 是否大于 0。",[86,107401,107402],{},"motor 是否引用了正确 joint。",[86,107404,107405,107407],{},[126,107406,107068],{}," 是否太小。",[86,107409,107410,107412],{},[126,107411,105856],{}," 是否把输入限制得太小。",[86,107414,107415],{},"body 是否真的有可动 joint。",[100,107417,107418],{"id":107418},"控制输入超过范围会怎样",[14,107420,107421],{},"如果设置了：",[120,107423,107425],{"className":53068,"code":107424,"language":53070,"meta":42,"style":42},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[126,107426,107427],{"__ignoreMap":42},[129,107428,107429],{"class":131,"line":132},[129,107430,107424],{"class":139},[14,107432,107433],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[120,107435,107437],{"className":30379,"code":107436,"language":30381,"meta":42,"style":42},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[126,107438,107439,107459],{"__ignoreMap":42},[129,107440,107441,107444,107446,107449,107451,107453,107455,107457],{"class":131,"line":132},[129,107442,107443],{"class":139},"action ",[129,107445,185],{"class":135},[129,107447,107448],{"class":139}," np.clip(action, ",[129,107450,671],{"class":135},[129,107452,105261],{"class":188},[129,107454,12450],{"class":139},[129,107456,105261],{"class":188},[129,107458,146],{"class":139},[129,107460,107461,107463,107465,107467,107469],{"class":131,"line":51},[129,107462,105872],{"class":139},[129,107464,331],{"class":188},[129,107466,4457],{"class":139},[129,107468,185],{"class":135},[129,107470,107471],{"class":139}," action\n",[71,107473,102608],{"id":102607},[14,107475,107476],{},"这一章建立了控制任务的基本形式：",[120,107478,107481],{"className":107479,"code":107480,"language":5202,"meta":42},[5200],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[126,107482,107480],{"__ignoreMap":42},[14,107484,107485],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5141,107487,107488],{},"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":42,"searchDepth":51,"depth":51,"links":107490},[107491,107492,107493,107498,107502,107503,107504,107512],{"id":100647,"depth":51,"text":100648},{"id":100770,"depth":51,"text":100771},{"id":101045,"depth":51,"text":101046,"children":107494},[107495,107496,107497],{"id":106134,"depth":1194,"text":106135},{"id":106184,"depth":1194,"text":106185},{"id":106250,"depth":1194,"text":106251},{"id":101253,"depth":51,"text":101254,"children":107499},[107500,107501],{"id":101573,"depth":1194,"text":101573},{"id":101709,"depth":1194,"text":101709},{"id":102316,"depth":51,"text":102317},{"id":102348,"depth":51,"text":102349},{"id":102453,"depth":51,"text":102454,"children":107505},[107506,107507,107508,107509,107511],{"id":107340,"depth":1194,"text":107343},{"id":107352,"depth":1194,"text":107352},{"id":107378,"depth":1194,"text":107378},{"id":107387,"depth":1194,"text":107510},"data.ctrl[0] 写了但没有效果",{"id":107418,"depth":1194,"text":107418},{"id":102607,"depth":51,"text":102608},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105822,"description":42},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107519,"title":107520,"body":107521,"description":42,"extension":54,"meta":109430,"navigation":56,"path":109431,"seo":109432,"stem":109433,"__hash__":109434},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107522,"toc":109406},[107523,107526,107528,107531,107539,107542,107559,107562,107587,107590,107636,107638,107640,107695,107697,107716,107718,107761,107764,107781,107784,107800,107810,107817,107819,107822,107825,107859,107862,107910,107914,107917,107931,107940,107944,107947,107972,107975,107979,107992,107995,108001,108004,108019,108021,108024,108284,108286,108298,108301,108613,108615,108627,108629,108632,108647,108652,108655,108677,108680,108683,108717,108720,108724,108735,108738,108755,108758,108772,108779,108799,108806,108820,108823,108835,108850,108870,108873,108895,108898,108902,108917,108928,108943,108946,108976,108992,109021,109029,109053,109056,109074,109084,109096,109103,109112,109118,109127,109130,109132,109141,109144,109159,109161,109164,109175,109178,109189,109192,109210,109212,109229,109232,109260,109262,109266,109269,109299,109305,109308,109312,109320,109323,109325,109346,109349,109352,109368,109371,109387,109389,109392,109403],[10,107524,107520],{"id":107525},"_5viewer-可视化与-renderer-离屏渲染",[71,107527,100648],{"id":100647},[14,107529,107530],{},"本章掌握两类可视化方式:",[83,107532,107533,107536],{},[86,107534,107535],{},"交互式 viewer: 适合人工观察仿真",[86,107537,107538],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107540,107541],{},"使用官方接口:",[120,107543,107545],{"className":30379,"code":107544,"language":30381,"meta":42,"style":42},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[126,107546,107547,107554],{"__ignoreMap":42},[129,107548,107549,107551],{"class":131,"line":132},[129,107550,30393],{"class":135},[129,107552,107553],{"class":139}," mujoco.viewer\n",[129,107555,107556],{"class":131,"line":51},[129,107557,107558],{"class":139},"mujoco.viewer.launch_passive(model, data)\n",[14,107560,107561],{},"以及:",[120,107563,107565],{"className":30379,"code":107564,"language":30381,"meta":42,"style":42},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[126,107566,107567,107577],{"__ignoreMap":42},[129,107568,107569,107572,107574],{"class":131,"line":132},[129,107570,107571],{"class":139},"renderer ",[129,107573,185],{"class":135},[129,107575,107576],{"class":139}," mujoco.Renderer(model)\n",[129,107578,107579,107582,107584],{"class":131,"line":51},[129,107580,107581],{"class":139},"image ",[129,107583,185],{"class":135},[129,107585,107586],{"class":139}," renderer.render()\n",[14,107588,107589],{},"新手建议先理解二者区别：",[277,107591,107592,107608],{},[280,107593,107594],{},[283,107595,107596,107599,107602,107605],{},[286,107597,107598],{"align":23751},"工具",[286,107600,107601],{"align":23751},"用途",[286,107603,107604],{"align":23751},"是否打开窗口",[286,107606,107607],{"align":23751},"常见场景",[324,107609,107610,107623],{},[283,107611,107612,107615,107618,107620],{},[329,107613,107614],{"align":23751},"Viewer",[329,107616,107617],{"align":23751},"人眼实时观察仿真",[329,107619,104666],{"align":23751},[329,107621,107622],{"align":23751},"调试模型、看控制效果",[283,107624,107625,107628,107631,107633],{},[329,107626,107627],{"align":23751},"Renderer",[329,107629,107630],{"align":23751},"生成图像数组",[329,107632,104679],{"align":23751},[329,107634,107635],{"align":23751},"保存图片、训练视觉策略、服务器批量采集",[71,107637,100771],{"id":100770},[14,107639,100774],{},[120,107641,107643],{"className":23837,"code":107642,"language":23839,"meta":42,"style":42},"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",[126,107644,107645,107657,107667,107675,107683],{"__ignoreMap":42},[129,107646,107647,107649,107651,107653,107655],{"class":131,"line":132},[129,107648,24577],{"class":1977},[129,107650,26316],{"class":244},[129,107652,23849],{"class":244},[129,107654,26401],{"class":188},[129,107656,24679],{"class":188},[129,107658,107659,107661,107663,107665],{"class":131,"line":51},[129,107660,100809],{"class":244},[129,107662,100812],{"class":244},[129,107664,100815],{"class":244},[129,107666,24679],{"class":188},[129,107668,107669,107671,107673],{"class":131,"line":1194},[129,107670,100822],{"class":244},[129,107672,100825],{"class":244},[129,107674,24679],{"class":188},[129,107676,107677,107679,107681],{"class":131,"line":1209},[129,107678,100832],{"class":244},[129,107680,100835],{"class":244},[129,107682,24679],{"class":188},[129,107684,107685,107687,107689,107691,107693],{"class":131,"line":1215},[129,107686,100842],{"class":244},[129,107688,100845],{"class":244},[129,107690,100848],{"class":244},[129,107692,100851],{"class":244},[129,107694,102517],{"class":244},[14,107696,102820],{},[120,107698,107700],{"className":23837,"code":107699,"language":23839,"meta":42,"style":42},"pip install \"mujoco>=2.3\" numpy pillow\n",[126,107701,107702],{"__ignoreMap":42},[129,107703,107704,107706,107708,107710,107713],{"class":131,"line":132},[129,107705,23846],{"class":1977},[129,107707,23849],{"class":244},[129,107709,100931],{"class":244},[129,107711,107712],{"class":244}," numpy",[129,107714,107715],{"class":244}," pillow\n",[14,107717,102837],{},[120,107719,107721],{"className":23837,"code":107720,"language":23839,"meta":42,"style":42},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[126,107722,107723,107740,107749],{"__ignoreMap":42},[129,107724,107725,107727,107729,107731,107734,107736,107738],{"class":131,"line":132},[129,107726,30331],{"class":1977},[129,107728,29177],{"class":244},[129,107730,25116],{"class":188},[129,107732,107733],{"class":244}," mujoco-render",[129,107735,100976],{"class":244},[129,107737,100979],{"class":188},[129,107739,100982],{"class":188},[129,107741,107742,107744,107746],{"class":131,"line":51},[129,107743,30331],{"class":1977},[129,107745,100989],{"class":244},[129,107747,107748],{"class":244}," mujoco-render\n",[129,107750,107751,107753,107755,107757,107759],{"class":131,"line":1194},[129,107752,23846],{"class":1977},[129,107754,23849],{"class":244},[129,107756,100931],{"class":244},[129,107758,107712],{"class":244},[129,107760,107715],{"class":244},[14,107762,107763],{},"离屏渲染后端:",[120,107765,107767],{"className":23837,"code":107766,"language":23839,"meta":42,"style":42},"export MUJOCO_GL=egl\n",[126,107768,107769],{"__ignoreMap":42},[129,107770,107771,107773,107776,107778],{"class":131,"line":132},[129,107772,25043],{"class":135},[129,107774,107775],{"class":139}," MUJOCO_GL",[129,107777,185],{"class":135},[129,107779,107780],{"class":139},"egl\n",[14,107782,107783],{},"或:",[120,107785,107787],{"className":23837,"code":107786,"language":23839,"meta":42,"style":42},"export MUJOCO_GL=osmesa\n",[126,107788,107789],{"__ignoreMap":42},[129,107790,107791,107793,107795,107797],{"class":131,"line":132},[129,107792,25043],{"class":135},[129,107794,107775],{"class":139},[129,107796,185],{"class":135},[129,107798,107799],{"class":139},"osmesa\n",[14,107801,107802,107803,107806,107807,28386],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[126,107804,107805],{},"egl"," 失败，再尝试 ",[126,107808,107809],{},"osmesa",[14,107811,107812,107813,107816],{},"如果你在本机桌面环境运行，通常先不要设置 ",[126,107814,107815],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[71,107818,101046],{"id":101045},[14,107820,107821],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107823,107824],{},"典型 viewer 流程:",[120,107826,107828],{"className":30379,"code":107827,"language":30381,"meta":42,"style":42},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[126,107829,107830,107843,107850,107854],{"__ignoreMap":42},[129,107831,107832,107835,107838,107840],{"class":131,"line":132},[129,107833,107834],{"class":135},"with",[129,107836,107837],{"class":139}," mujoco.viewer.launch_passive(model, data) ",[129,107839,31384],{"class":135},[129,107841,107842],{"class":139}," viewer:\n",[129,107844,107845,107847],{"class":131,"line":51},[129,107846,2265],{"class":135},[129,107848,107849],{"class":139}," viewer.is_running():\n",[129,107851,107852],{"class":131,"line":1194},[129,107853,101517],{"class":139},[129,107855,107856],{"class":131,"line":1209},[129,107857,107858],{"class":139},"        viewer.sync()\n",[14,107860,107861],{},"典型 renderer 流程:",[120,107863,107865],{"className":30379,"code":107864,"language":30381,"meta":42,"style":42},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[126,107866,107867,107893,107897,107902],{"__ignoreMap":42},[129,107868,107869,107871,107873,107876,107878,107880,107882,107884,107886,107888,107891],{"class":131,"line":132},[129,107870,107571],{"class":139},[129,107872,185],{"class":135},[129,107874,107875],{"class":139}," mujoco.Renderer(model, ",[129,107877,24982],{"class":5231},[129,107879,185],{"class":135},[129,107881,42343],{"class":188},[129,107883,12450],{"class":139},[129,107885,24978],{"class":5231},[129,107887,185],{"class":135},[129,107889,107890],{"class":188},"640",[129,107892,146],{"class":139},[129,107894,107895],{"class":131,"line":51},[129,107896,104506],{"class":139},[129,107898,107899],{"class":131,"line":1194},[129,107900,107901],{"class":139},"renderer.update_scene(data)\n",[129,107903,107904,107906,107908],{"class":131,"line":1209},[129,107905,107581],{"class":139},[129,107907,185],{"class":135},[129,107909,107586],{"class":139},[100,107911,107913],{"id":107912},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107915,107916],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[120,107918,107920],{"className":30379,"code":107919,"language":30381,"meta":42,"style":42},"mujoco.mj_step(model, data)\nviewer.sync()\n",[126,107921,107922,107926],{"__ignoreMap":42},[129,107923,107924],{"class":131,"line":132},[129,107925,104506],{"class":139},[129,107927,107928],{"class":131,"line":51},[129,107929,107930],{"class":139},"viewer.sync()\n",[14,107932,107933,107935,107936,107939],{},[126,107934,101216],{}," 负责算物理，",[126,107937,107938],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[100,107941,107943],{"id":107942},"为什么要-sleep","为什么要 sleep",[14,107945,107946],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[120,107948,107950],{"className":30379,"code":107949,"language":30381,"meta":42,"style":42},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[126,107951,107952],{"__ignoreMap":42},[129,107953,107954,107957,107959,107962,107964,107967,107969],{"class":131,"line":132},[129,107955,107956],{"class":139},"sleep_time ",[129,107958,185],{"class":135},[129,107960,107961],{"class":139}," model.opt.timestep ",[129,107963,671],{"class":135},[129,107965,107966],{"class":139}," (time.time() ",[129,107968,671],{"class":135},[129,107970,107971],{"class":139}," step_start)\n",[14,107973,107974],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[100,107976,107978],{"id":107977},"renderer-输出是什么","renderer 输出是什么",[120,107980,107982],{"className":30379,"code":107981,"language":30381,"meta":42,"style":42},"image = renderer.render()\n",[126,107983,107984],{"__ignoreMap":42},[129,107985,107986,107988,107990],{"class":131,"line":132},[129,107987,107581],{"class":139},[129,107989,185],{"class":135},[129,107991,107586],{"class":139},[14,107993,107994],{},"得到的是 NumPy 数组，形状通常是：",[120,107996,107999],{"className":107997,"code":107998,"language":5202,"meta":42},[5200],"(height, width, 3)\n",[126,108000,107998],{"__ignoreMap":42},[14,108002,108003],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[120,108005,108007],{"className":30379,"code":108006,"language":30381,"meta":42,"style":42},"Image.fromarray(image).save(\"render_output.png\")\n",[126,108008,108009],{"__ignoreMap":42},[129,108010,108011,108014,108017],{"class":131,"line":132},[129,108012,108013],{"class":139},"Image.fromarray(image).save(",[129,108015,108016],{"class":244},"\"render_output.png\"",[129,108018,146],{"class":139},[71,108020,101254],{"id":101253},[14,108022,108023],{},"交互式 Viewer:",[120,108025,108027],{"className":30379,"code":108026,"language":30381,"meta":42,"style":42},"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",[126,108028,108029,108035,108039,108045,108051,108055,108059,108067,108072,108076,108080,108084,108089,108094,108098,108102,108106,108111,108115,108119,108123,108127,108131,108135,108147,108159,108167,108171,108181,108201,108211,108216,108221,108225,108242,108255,108260,108264,108268,108280],{"__ignoreMap":42},[129,108030,108031,108033],{"class":131,"line":132},[129,108032,30393],{"class":135},[129,108034,31830],{"class":139},[129,108036,108037],{"class":131,"line":51},[129,108038,2414],{"emptyLinePlaceholder":56},[129,108040,108041,108043],{"class":131,"line":1194},[129,108042,30393],{"class":135},[129,108044,101302],{"class":139},[129,108046,108047,108049],{"class":131,"line":1209},[129,108048,30393],{"class":135},[129,108050,107553],{"class":139},[129,108052,108053],{"class":131,"line":1215},[129,108054,2414],{"emptyLinePlaceholder":56},[129,108056,108057],{"class":131,"line":1229},[129,108058,2414],{"emptyLinePlaceholder":56},[129,108060,108061,108063,108065],{"class":131,"line":1235},[129,108062,101315],{"class":188},[129,108064,13579],{"class":135},[129,108066,101320],{"class":244},[129,108068,108069],{"class":131,"line":1326},[129,108070,108071],{"class":244},"\u003Cmujoco model=\"viewer_demo\">\n",[129,108073,108074],{"class":131,"line":1332},[129,108075,101330],{"class":244},[129,108077,108078],{"class":131,"line":1344},[129,108079,2414],{"emptyLinePlaceholder":56},[129,108081,108082],{"class":131,"line":1626},[129,108083,101339],{"class":244},[129,108085,108086],{"class":131,"line":1631},[129,108087,108088],{"class":244},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[129,108090,108091],{"class":131,"line":1637},[129,108092,108093],{"class":244},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[129,108095,108096],{"class":131,"line":1642},[129,108097,2414],{"emptyLinePlaceholder":56},[129,108099,108100],{"class":131,"line":1656},[129,108101,101353],{"class":244},[129,108103,108104],{"class":131,"line":1661},[129,108105,101358],{"class":244},[129,108107,108108],{"class":131,"line":1667},[129,108109,108110],{"class":244},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[129,108112,108113],{"class":131,"line":1688},[129,108114,101368],{"class":244},[129,108116,108117],{"class":131,"line":1693},[129,108118,101373],{"class":244},[129,108120,108121],{"class":131,"line":1707},[129,108122,101378],{"class":244},[129,108124,108125],{"class":131,"line":1712},[129,108126,95699],{"class":244},[129,108128,108129],{"class":131,"line":1741},[129,108130,2414],{"emptyLinePlaceholder":56},[129,108132,108133],{"class":131,"line":1746},[129,108134,2414],{"emptyLinePlaceholder":56},[129,108136,108137,108139,108141,108143,108145],{"class":131,"line":1763},[129,108138,31948],{"class":135},[129,108140,1987],{"class":1977},[129,108142,101399],{"class":139},[129,108144,95687],{"class":188},[129,108146,3753],{"class":139},[129,108148,108149,108151,108153,108155,108157],{"class":131,"line":1768},[129,108150,101408],{"class":139},[129,108152,185],{"class":135},[129,108154,101413],{"class":139},[129,108156,101315],{"class":188},[129,108158,146],{"class":139},[129,108160,108161,108163,108165],{"class":131,"line":1773},[129,108162,101422],{"class":139},[129,108164,185],{"class":135},[129,108166,101427],{"class":139},[129,108168,108169],{"class":131,"line":1778},[129,108170,2414],{"emptyLinePlaceholder":56},[129,108172,108173,108175,108177,108179],{"class":131,"line":1792},[129,108174,34179],{"class":135},[129,108176,107837],{"class":139},[129,108178,31384],{"class":135},[129,108180,107842],{"class":139},[129,108182,108183,108186,108189,108191,108194,108196,108199],{"class":131,"line":1797},[129,108184,108185],{"class":135},"        while",[129,108187,108188],{"class":139}," viewer.is_running() ",[129,108190,30463],{"class":135},[129,108192,108193],{"class":139}," data.time ",[129,108195,1049],{"class":135},[129,108197,108198],{"class":188}," 5.0",[129,108200,3753],{"class":139},[129,108202,108203,108206,108208],{"class":131,"line":2591},[129,108204,108205],{"class":139},"            step_start ",[129,108207,185],{"class":135},[129,108209,108210],{"class":139}," time.time()\n",[129,108212,108213],{"class":131,"line":2605},[129,108214,108215],{"class":139},"            mujoco.mj_step(model, data)\n",[129,108217,108218],{"class":131,"line":2613},[129,108219,108220],{"class":139},"            viewer.sync()\n",[129,108222,108223],{"class":131,"line":2618},[129,108224,2414],{"emptyLinePlaceholder":56},[129,108226,108227,108230,108232,108234,108236,108238,108240],{"class":131,"line":2624},[129,108228,108229],{"class":139},"            sleep_time ",[129,108231,185],{"class":135},[129,108233,107961],{"class":139},[129,108235,671],{"class":135},[129,108237,107966],{"class":139},[129,108239,671],{"class":135},[129,108241,107971],{"class":139},[129,108243,108244,108246,108249,108251,108253],{"class":131,"line":2630},[129,108245,4656],{"class":135},[129,108247,108248],{"class":139}," sleep_time ",[129,108250,1099],{"class":135},[129,108252,4107],{"class":188},[129,108254,3753],{"class":139},[129,108256,108257],{"class":131,"line":2635},[129,108258,108259],{"class":139},"                time.sleep(sleep_time)\n",[129,108261,108262],{"class":131,"line":7963},[129,108263,2414],{"emptyLinePlaceholder":56},[129,108265,108266],{"class":131,"line":7987},[129,108267,2414],{"emptyLinePlaceholder":56},[129,108269,108270,108272,108274,108276,108278],{"class":131,"line":7992},[129,108271,1545],{"class":135},[129,108273,31221],{"class":188},[129,108275,101560],{"class":135},[129,108277,101563],{"class":244},[129,108279,3753],{"class":139},[129,108281,108282],{"class":131,"line":7998},[129,108283,101570],{"class":139},[14,108285,103571],{},[120,108287,108289],{"className":23837,"code":108288,"language":23839,"meta":42,"style":42},"touch ch5_viewer.py\n",[126,108290,108291],{"__ignoreMap":42},[129,108292,108293,108295],{"class":131,"line":132},[129,108294,101284],{"class":1977},[129,108296,108297],{"class":244}," ch5_viewer.py\n",[14,108299,108300],{},"离屏 Renderer 保存图片:",[120,108302,108304],{"className":30379,"code":108303,"language":30381,"meta":42,"style":42},"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",[126,108305,108306,108318,108322,108328,108338,108342,108346,108354,108359,108363,108367,108371,108375,108380,108384,108388,108392,108396,108400,108404,108408,108412,108416,108420,108424,108436,108448,108456,108481,108485,108501,108505,108509,108524,108533,108537,108551,108556,108561,108565,108577,108589,108593,108597,108609],{"__ignoreMap":42},[129,108307,108308,108310,108313,108315],{"class":131,"line":132},[129,108309,30738],{"class":135},[129,108311,108312],{"class":139}," pathlib ",[129,108314,30393],{"class":135},[129,108316,108317],{"class":139}," Path\n",[129,108319,108320],{"class":131,"line":51},[129,108321,2414],{"emptyLinePlaceholder":56},[129,108323,108324,108326],{"class":131,"line":1194},[129,108325,30393],{"class":135},[129,108327,101302],{"class":139},[129,108329,108330,108332,108334,108336],{"class":131,"line":1209},[129,108331,30738],{"class":135},[129,108333,47264],{"class":188},[129,108335,47267],{"class":135},[129,108337,47270],{"class":139},[129,108339,108340],{"class":131,"line":1215},[129,108341,2414],{"emptyLinePlaceholder":56},[129,108343,108344],{"class":131,"line":1229},[129,108345,2414],{"emptyLinePlaceholder":56},[129,108347,108348,108350,108352],{"class":131,"line":1235},[129,108349,101315],{"class":188},[129,108351,13579],{"class":135},[129,108353,101320],{"class":244},[129,108355,108356],{"class":131,"line":1326},[129,108357,108358],{"class":244},"\u003Cmujoco model=\"renderer_demo\">\n",[129,108360,108361],{"class":131,"line":1332},[129,108362,101330],{"class":244},[129,108364,108365],{"class":131,"line":1344},[129,108366,2414],{"emptyLinePlaceholder":56},[129,108368,108369],{"class":131,"line":1626},[129,108370,101339],{"class":244},[129,108372,108373],{"class":131,"line":1631},[129,108374,108088],{"class":244},[129,108376,108377],{"class":131,"line":1637},[129,108378,108379],{"class":244},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[129,108381,108382],{"class":131,"line":1642},[129,108383,108093],{"class":244},[129,108385,108386],{"class":131,"line":1656},[129,108387,2414],{"emptyLinePlaceholder":56},[129,108389,108390],{"class":131,"line":1661},[129,108391,101353],{"class":244},[129,108393,108394],{"class":131,"line":1667},[129,108395,101358],{"class":244},[129,108397,108398],{"class":131,"line":1688},[129,108399,108110],{"class":244},[129,108401,108402],{"class":131,"line":1693},[129,108403,101368],{"class":244},[129,108405,108406],{"class":131,"line":1707},[129,108407,101373],{"class":244},[129,108409,108410],{"class":131,"line":1712},[129,108411,101378],{"class":244},[129,108413,108414],{"class":131,"line":1741},[129,108415,95699],{"class":244},[129,108417,108418],{"class":131,"line":1746},[129,108419,2414],{"emptyLinePlaceholder":56},[129,108421,108422],{"class":131,"line":1763},[129,108423,2414],{"emptyLinePlaceholder":56},[129,108425,108426,108428,108430,108432,108434],{"class":131,"line":1768},[129,108427,31948],{"class":135},[129,108429,1987],{"class":1977},[129,108431,101399],{"class":139},[129,108433,95687],{"class":188},[129,108435,3753],{"class":139},[129,108437,108438,108440,108442,108444,108446],{"class":131,"line":1773},[129,108439,101408],{"class":139},[129,108441,185],{"class":135},[129,108443,101413],{"class":139},[129,108445,101315],{"class":188},[129,108447,146],{"class":139},[129,108449,108450,108452,108454],{"class":131,"line":1778},[129,108451,101422],{"class":139},[129,108453,185],{"class":135},[129,108455,101427],{"class":139},[129,108457,108458,108461,108463,108465,108467,108469,108471,108473,108475,108477,108479],{"class":131,"line":1792},[129,108459,108460],{"class":139},"    renderer ",[129,108462,185],{"class":135},[129,108464,107875],{"class":139},[129,108466,24982],{"class":5231},[129,108468,185],{"class":135},[129,108470,42343],{"class":188},[129,108472,12450],{"class":139},[129,108474,24978],{"class":5231},[129,108476,185],{"class":135},[129,108478,107890],{"class":188},[129,108480,146],{"class":139},[129,108482,108483],{"class":131,"line":1797},[129,108484,2414],{"emptyLinePlaceholder":56},[129,108486,108487,108489,108491,108493,108495,108497,108499],{"class":131,"line":2591},[129,108488,3215],{"class":135},[129,108490,101502],{"class":139},[129,108492,26044],{"class":135},[129,108494,32444],{"class":188},[129,108496,140],{"class":139},[129,108498,450],{"class":188},[129,108500,30787],{"class":139},[129,108502,108503],{"class":131,"line":2605},[129,108504,101517],{"class":139},[129,108506,108507],{"class":131,"line":2613},[129,108508,2414],{"emptyLinePlaceholder":56},[129,108510,108511,108514,108517,108519,108522],{"class":131,"line":2618},[129,108512,108513],{"class":139},"    renderer.update_scene(data, ",[129,108515,108516],{"class":5231},"camera",[129,108518,185],{"class":135},[129,108520,108521],{"class":244},"\"fixed_camera\"",[129,108523,146],{"class":139},[129,108525,108526,108529,108531],{"class":131,"line":2624},[129,108527,108528],{"class":139},"    image ",[129,108530,185],{"class":135},[129,108532,107586],{"class":139},[129,108534,108535],{"class":131,"line":2630},[129,108536,2414],{"emptyLinePlaceholder":56},[129,108538,108539,108542,108544,108547,108549],{"class":131,"line":2635},[129,108540,108541],{"class":139},"    output_path ",[129,108543,185],{"class":135},[129,108545,108546],{"class":139}," Path(",[129,108548,108016],{"class":244},[129,108550,146],{"class":139},[129,108552,108553],{"class":131,"line":7963},[129,108554,108555],{"class":139},"    Image.fromarray(image).save(output_path)\n",[129,108557,108558],{"class":131,"line":7987},[129,108559,108560],{"class":139},"    renderer.close()\n",[129,108562,108563],{"class":131,"line":7992},[129,108564,2414],{"emptyLinePlaceholder":56},[129,108566,108567,108569,108571,108574],{"class":131,"line":7998},[129,108568,31300],{"class":188},[129,108570,140],{"class":139},[129,108572,108573],{"class":244},"\"saved:\"",[129,108575,108576],{"class":139},", output_path.resolve())\n",[129,108578,108579,108581,108583,108586],{"class":131,"line":8025},[129,108580,31300],{"class":188},[129,108582,140],{"class":139},[129,108584,108585],{"class":244},"\"image shape:\"",[129,108587,108588],{"class":139},", image.shape)\n",[129,108590,108591],{"class":131,"line":8030},[129,108592,2414],{"emptyLinePlaceholder":56},[129,108594,108595],{"class":131,"line":8036},[129,108596,2414],{"emptyLinePlaceholder":56},[129,108598,108599,108601,108603,108605,108607],{"class":131,"line":8048},[129,108600,1545],{"class":135},[129,108602,31221],{"class":188},[129,108604,101560],{"class":135},[129,108606,101563],{"class":244},[129,108608,3753],{"class":139},[129,108610,108611],{"class":131,"line":8060},[129,108612,101570],{"class":139},[14,108614,103571],{},[120,108616,108618],{"className":23837,"code":108617,"language":23839,"meta":42,"style":42},"touch ch5_renderer.py\n",[126,108619,108620],{"__ignoreMap":42},[129,108621,108622,108624],{"class":131,"line":132},[129,108623,101284],{"class":1977},[129,108625,108626],{"class":244}," ch5_renderer.py\n",[100,108628,101573],{"id":101573},[14,108630,108631],{},"viewer 上下文：",[120,108633,108635],{"className":30379,"code":108634,"language":30381,"meta":42,"style":42},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[126,108636,108637],{"__ignoreMap":42},[129,108638,108639,108641,108643,108645],{"class":131,"line":132},[129,108640,107834],{"class":135},[129,108642,107837],{"class":139},[129,108644,31384],{"class":135},[129,108646,107842],{"class":139},[14,108648,108649,108651],{},[126,108650,107834],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108653,108654],{},"窗口循环：",[120,108656,108658],{"className":30379,"code":108657,"language":30381,"meta":42,"style":42},"while viewer.is_running() and data.time \u003C 5.0:\n",[126,108659,108660],{"__ignoreMap":42},[129,108661,108662,108665,108667,108669,108671,108673,108675],{"class":131,"line":132},[129,108663,108664],{"class":135},"while",[129,108666,108188],{"class":139},[129,108668,30463],{"class":135},[129,108670,108193],{"class":139},[129,108672,1049],{"class":135},[129,108674,108198],{"class":188},[129,108676,3753],{"class":139},[14,108678,108679],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108681,108682],{},"固定相机：",[120,108684,108686],{"className":53068,"code":108685,"language":53070,"meta":42,"style":42},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[126,108687,108688],{"__ignoreMap":42},[129,108689,108690,108692,108694,108696,108698,108700,108702,108704,108707,108710,108712,108715],{"class":131,"line":132},[129,108691,1049],{"class":139},[129,108693,108516],{"class":51301},[129,108695,14935],{"class":1977},[129,108697,185],{"class":139},[129,108699,108521],{"class":244},[129,108701,101107],{"class":1977},[129,108703,185],{"class":139},[129,108705,108706],{"class":244},"\"1.5 -2.0 1.2\"",[129,108708,108709],{"class":1977}," xyaxes",[129,108711,185],{"class":139},[129,108713,108714],{"class":244},"\"1 0.75 0 0 0 1\"",[129,108716,101145],{"class":139},[14,108718,108719],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[100,108721,108723],{"id":108722},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[120,108725,108727],{"className":30379,"code":108726,"language":30381,"meta":42,"style":42},"import time\n",[126,108728,108729],{"__ignoreMap":42},[129,108730,108731,108733],{"class":131,"line":132},[129,108732,30393],{"class":135},[129,108734,31830],{"class":139},[14,108736,108737],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[120,108739,108741],{"className":30379,"code":108740,"language":30381,"meta":42,"style":42},"import mujoco\nimport mujoco.viewer\n",[126,108742,108743,108749],{"__ignoreMap":42},[129,108744,108745,108747],{"class":131,"line":132},[129,108746,30393],{"class":135},[129,108748,101302],{"class":139},[129,108750,108751,108753],{"class":131,"line":51},[129,108752,30393],{"class":135},[129,108754,107553],{"class":139},[14,108756,108757],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[120,108759,108760],{"className":30379,"code":108634,"language":30381,"meta":42,"style":42},[126,108761,108762],{"__ignoreMap":42},[129,108763,108764,108766,108768,108770],{"class":131,"line":132},[129,108765,107834],{"class":135},[129,108767,107837],{"class":139},[129,108769,31384],{"class":135},[129,108771,107842],{"class":139},[14,108773,108774,108775,108778],{},"打开一个 viewer 窗口。",[126,108776,108777],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[120,108780,108781],{"className":30379,"code":108657,"language":30381,"meta":42,"style":42},[126,108782,108783],{"__ignoreMap":42},[129,108784,108785,108787,108789,108791,108793,108795,108797],{"class":131,"line":132},[129,108786,108664],{"class":135},[129,108788,108188],{"class":139},[129,108790,30463],{"class":135},[129,108792,108193],{"class":139},[129,108794,1049],{"class":135},[129,108796,108198],{"class":188},[129,108798,3753],{"class":139},[14,108800,108801,108802,108805],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[126,108803,108804],{},"viewer.is_running()"," 会变成 false，循环结束。",[120,108807,108809],{"className":30379,"code":108808,"language":30381,"meta":42,"style":42},"step_start = time.time()\n",[126,108810,108811],{"__ignoreMap":42},[129,108812,108813,108816,108818],{"class":131,"line":132},[129,108814,108815],{"class":139},"step_start ",[129,108817,185],{"class":135},[129,108819,108210],{"class":139},[14,108821,108822],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[120,108824,108825],{"className":30379,"code":107919,"language":30381,"meta":42,"style":42},[126,108826,108827,108831],{"__ignoreMap":42},[129,108828,108829],{"class":131,"line":132},[129,108830,104506],{"class":139},[129,108832,108833],{"class":131,"line":51},[129,108834,107930],{"class":139},[14,108836,108837,108839,108840,108842,108843,108845,108846,108849],{},[126,108838,101216],{}," 推进物理仿真。",[126,108841,107938],{}," 把最新的 ",[126,108844,33402],{}," 同步到窗口里显示。没有 ",[126,108847,108848],{},"sync()","，窗口可能看不到最新状态。",[120,108851,108852],{"className":30379,"code":107949,"language":30381,"meta":42,"style":42},[126,108853,108854],{"__ignoreMap":42},[129,108855,108856,108858,108860,108862,108864,108866,108868],{"class":131,"line":132},[129,108857,107956],{"class":139},[129,108859,185],{"class":135},[129,108861,107961],{"class":139},[129,108863,671],{"class":135},[129,108865,107966],{"class":139},[129,108867,671],{"class":135},[129,108869,107971],{"class":139},[14,108871,108872],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[120,108874,108876],{"className":30379,"code":108875,"language":30381,"meta":42,"style":42},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[126,108877,108878,108890],{"__ignoreMap":42},[129,108879,108880,108882,108884,108886,108888],{"class":131,"line":132},[129,108881,1545],{"class":135},[129,108883,108248],{"class":139},[129,108885,1099],{"class":135},[129,108887,4107],{"class":188},[129,108889,3753],{"class":139},[129,108891,108892],{"class":131,"line":51},[129,108893,108894],{"class":139},"    time.sleep(sleep_time)\n",[14,108896,108897],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[100,108899,108901],{"id":108900},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[120,108903,108905],{"className":30379,"code":108904,"language":30381,"meta":42,"style":42},"from pathlib import Path\n",[126,108906,108907],{"__ignoreMap":42},[129,108908,108909,108911,108913,108915],{"class":131,"line":132},[129,108910,30738],{"class":135},[129,108912,108312],{"class":139},[129,108914,30393],{"class":135},[129,108916,108317],{"class":139},[14,108918,108919,108920,108923,108924,108927],{},"导入 ",[126,108921,108922],{},"Path","，用来处理文件路径。相比直接写字符串，",[126,108925,108926],{},"Path(\"render_output.png\")"," 更清晰。",[120,108929,108931],{"className":30379,"code":108930,"language":30381,"meta":42,"style":42},"from PIL import Image\n",[126,108932,108933],{"__ignoreMap":42},[129,108934,108935,108937,108939,108941],{"class":131,"line":132},[129,108936,30738],{"class":135},[129,108938,47264],{"class":188},[129,108940,47267],{"class":135},[129,108942,47270],{"class":139},[14,108944,108945],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[120,108947,108948],{"className":53068,"code":108685,"language":53070,"meta":42,"style":42},[126,108949,108950],{"__ignoreMap":42},[129,108951,108952,108954,108956,108958,108960,108962,108964,108966,108968,108970,108972,108974],{"class":131,"line":132},[129,108953,1049],{"class":139},[129,108955,108516],{"class":51301},[129,108957,14935],{"class":1977},[129,108959,185],{"class":139},[129,108961,108521],{"class":244},[129,108963,101107],{"class":1977},[129,108965,185],{"class":139},[129,108967,108706],{"class":244},[129,108969,108709],{"class":1977},[129,108971,185],{"class":139},[129,108973,108714],{"class":244},[129,108975,101145],{"class":139},[14,108977,108978,108979,108981,108982,108984,108985,108988,108989,108991],{},"定义一个相机。",[126,108980,79811],{}," 是相机名字。",[126,108983,104147],{}," 是相机在世界里的位置。",[126,108986,108987],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[126,108990,104147],{}," 来调视角。",[120,108993,108995],{"className":30379,"code":108994,"language":30381,"meta":42,"style":42},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[126,108996,108997],{"__ignoreMap":42},[129,108998,108999,109001,109003,109005,109007,109009,109011,109013,109015,109017,109019],{"class":131,"line":132},[129,109000,107571],{"class":139},[129,109002,185],{"class":135},[129,109004,107875],{"class":139},[129,109006,24982],{"class":5231},[129,109008,185],{"class":135},[129,109010,42343],{"class":188},[129,109012,12450],{"class":139},[129,109014,24978],{"class":5231},[129,109016,185],{"class":135},[129,109018,107890],{"class":188},[129,109020,146],{"class":139},[14,109022,109023,109024,101019,109026,109028],{},"创建离屏渲染器。",[126,109025,24982],{},[126,109027,24978],{}," 决定输出图片大小。",[120,109030,109031],{"className":30379,"code":101677,"language":30381,"meta":42,"style":42},[126,109032,109033,109049],{"__ignoreMap":42},[129,109034,109035,109037,109039,109041,109043,109045,109047],{"class":131,"line":132},[129,109036,3039],{"class":135},[129,109038,101502],{"class":139},[129,109040,26044],{"class":135},[129,109042,32444],{"class":188},[129,109044,140],{"class":139},[129,109046,450],{"class":188},[129,109048,30787],{"class":139},[129,109050,109051],{"class":131,"line":51},[129,109052,101700],{"class":139},[14,109054,109055],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[120,109057,109059],{"className":30379,"code":109058,"language":30381,"meta":42,"style":42},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[126,109060,109061],{"__ignoreMap":42},[129,109062,109063,109066,109068,109070,109072],{"class":131,"line":132},[129,109064,109065],{"class":139},"renderer.update_scene(data, ",[129,109067,108516],{"class":5231},[129,109069,185],{"class":135},[129,109071,108521],{"class":244},[129,109073,146],{"class":139},[14,109075,109076,109077,109079,109080,109083],{},"告诉 renderer：用当前 ",[126,109078,33402],{}," 的状态更新画面，并使用名为 ",[126,109081,109082],{},"fixed_camera"," 的相机视角。",[120,109085,109086],{"className":30379,"code":107981,"language":30381,"meta":42,"style":42},[126,109087,109088],{"__ignoreMap":42},[129,109089,109090,109092,109094],{"class":131,"line":132},[129,109091,107581],{"class":139},[129,109093,185],{"class":135},[129,109095,107586],{"class":139},[14,109097,109098,109099,109102],{},"真正渲染出图像。",[126,109100,109101],{},"image"," 是一个 NumPy 数组，不是文件。",[120,109104,109106],{"className":30379,"code":109105,"language":30381,"meta":42,"style":42},"Image.fromarray(image).save(output_path)\n",[126,109107,109108],{"__ignoreMap":42},[129,109109,109110],{"class":131,"line":132},[129,109111,109105],{"class":139},[14,109113,109114,109115,28386],{},"把数组转换成图片，并保存到 ",[126,109116,109117],{},"render_output.png",[120,109119,109121],{"className":30379,"code":109120,"language":30381,"meta":42,"style":42},"renderer.close()\n",[126,109122,109123],{"__ignoreMap":42},[129,109124,109125],{"class":131,"line":132},[129,109126,109120],{"class":139},[14,109128,109129],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[71,109131,102317],{"id":102316},[14,109133,109134,109135,109137,109138,28386],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[126,109136,109117],{},"，并输出图像数组形状，例如 ",[126,109139,109140],{},"(480, 640, 3)",[14,109142,109143],{},"如果图片里看不到方块，先检查：",[83,109145,109146,109149,109152],{},[86,109147,109148],{},"方块是否掉到相机视野外。",[86,109150,109151],{},"camera 位置是否合理。",[86,109153,109154,109155,109158],{},"是否在 ",[126,109156,109157],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[71,109160,102349],{"id":102348},[14,109162,109163],{},"运行 viewer:",[120,109165,109167],{"className":23837,"code":109166,"language":23839,"meta":42,"style":42},"python ch5_viewer.py\n",[126,109168,109169],{"__ignoreMap":42},[129,109170,109171,109173],{"class":131,"line":132},[129,109172,30381],{"class":1977},[129,109174,108297],{"class":244},[14,109176,109177],{},"运行 renderer:",[120,109179,109181],{"className":23837,"code":109180,"language":23839,"meta":42,"style":42},"python ch5_renderer.py\n",[126,109182,109183],{"__ignoreMap":42},[129,109184,109185,109187],{"class":131,"line":132},[129,109186,30381],{"class":1977},[129,109188,108626],{"class":244},[14,109190,109191],{},"如果在服务器上运行:",[120,109193,109195],{"className":23837,"code":109194,"language":23839,"meta":42,"style":42},"MUJOCO_GL=egl python ch5_renderer.py\n",[126,109196,109197],{"__ignoreMap":42},[129,109198,109199,109201,109203,109205,109208],{"class":131,"line":132},[129,109200,107815],{"class":139},[129,109202,185],{"class":135},[129,109204,107805],{"class":244},[129,109206,109207],{"class":1977}," python",[129,109209,108626],{"class":244},[14,109211,107783],{},[120,109213,109215],{"className":23837,"code":109214,"language":23839,"meta":42,"style":42},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[126,109216,109217],{"__ignoreMap":42},[129,109218,109219,109221,109223,109225,109227],{"class":131,"line":132},[129,109220,107815],{"class":139},[129,109222,185],{"class":135},[129,109224,107809],{"class":244},[129,109226,109207],{"class":1977},[129,109228,108626],{"class":244},[14,109230,109231],{},"再做几个练习：",[83,109233,109234,109241,109244,109250],{},[86,109235,109236,109237,109240],{},"把 renderer 分辨率改成 ",[126,109238,109239],{},"height=240, width=320","，观察输出 shape。",[86,109242,109243],{},"把方块颜色改成蓝色，重新保存图片。",[86,109245,109246,109247,109249],{},"把相机 ",[126,109248,104147],{}," 改远一点，观察画面中物体是否变小。",[86,109251,109252,109253,102415,109256,109259],{},"把 viewer 示例中的 ",[126,109254,109255],{},"data.time \u003C 5.0",[126,109257,109258],{},"data.time \u003C 20.0","，观察更长时间。",[71,109261,102454],{"id":102453},[100,109263,109265],{"id":109264},"viewer-窗口打不开","viewer 窗口打不开",[14,109267,109268],{},"安装:",[120,109270,109272],{"className":23837,"code":109271,"language":23839,"meta":42,"style":42},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[126,109273,109274],{"__ignoreMap":42},[129,109275,109276,109278,109280,109282,109284,109286,109288,109290,109292,109294,109296],{"class":131,"line":132},[129,109277,24577],{"class":1977},[129,109279,26316],{"class":244},[129,109281,23849],{"class":244},[129,109283,26401],{"class":188},[129,109285,102507],{"class":244},[129,109287,100835],{"class":244},[129,109289,102512],{"class":244},[129,109291,100848],{"class":244},[129,109293,100854],{"class":244},[129,109295,100845],{"class":244},[129,109297,109298],{"class":244}," libXinerama\n",[100,109300,109302],{"id":109301},"glfwerror",[126,109303,109304],{},"GLFWError",[14,109306,109307],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[100,109309,109311],{"id":109310},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109313,109314,109315,82540,109317,109319],{},"尝试 ",[126,109316,101038],{},[126,109318,101041],{},"。可能存在版本差异。",[100,109321,109322],{"id":109322},"保存图片是黑的",[14,109324,102576],{},[83,109326,109327,109330,109333,109343],{},[86,109328,109329],{},"XML 里是否有 light。",[86,109331,109332],{},"相机是否对着模型。",[86,109334,109335,109336,109339,109340,28386],{},"是否先 ",[126,109337,109338],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[126,109341,109342],{},"renderer.render()",[86,109344,109345],{},"物体是否已经掉出视野。",[100,109347,109348],{"id":109348},"远程服务器没有显示器",[14,109350,109351],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[120,109353,109354],{"className":23837,"code":109194,"language":23839,"meta":42,"style":42},[126,109355,109356],{"__ignoreMap":42},[129,109357,109358,109360,109362,109364,109366],{"class":131,"line":132},[129,109359,107815],{"class":139},[129,109361,185],{"class":135},[129,109363,107805],{"class":244},[129,109365,109207],{"class":1977},[129,109367,108626],{"class":244},[14,109369,109370],{},"如果 EGL 不可用，再尝试：",[120,109372,109373],{"className":23837,"code":109214,"language":23839,"meta":42,"style":42},[126,109374,109375],{"__ignoreMap":42},[129,109376,109377,109379,109381,109383,109385],{"class":131,"line":132},[129,109378,107815],{"class":139},[129,109380,185],{"class":135},[129,109382,107809],{"class":244},[129,109384,109207],{"class":1977},[129,109386,108626],{"class":244},[71,109388,102608],{"id":102607},[14,109390,109391],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[83,109393,109394,109397,109400],{},[86,109395,109396],{},"先用 viewer 看模型和控制是否正常。",[86,109398,109399],{},"再用 renderer 保存图片或构造视觉观测。",[86,109401,109402],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5141,109404,109405],{},"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":42,"searchDepth":51,"depth":51,"links":109407},[109408,109409,109410,109415,109420,109421,109422,109429],{"id":100647,"depth":51,"text":100648},{"id":100770,"depth":51,"text":100771},{"id":101045,"depth":51,"text":101046,"children":109411},[109412,109413,109414],{"id":107912,"depth":1194,"text":107913},{"id":107942,"depth":1194,"text":107943},{"id":107977,"depth":1194,"text":107978},{"id":101253,"depth":51,"text":101254,"children":109416},[109417,109418,109419],{"id":101573,"depth":1194,"text":101573},{"id":108722,"depth":1194,"text":108723},{"id":108900,"depth":1194,"text":108901},{"id":102316,"depth":51,"text":102317},{"id":102348,"depth":51,"text":102349},{"id":102453,"depth":51,"text":102454,"children":109423},[109424,109425,109426,109427,109428],{"id":109264,"depth":1194,"text":109265},{"id":109301,"depth":1194,"text":109304},{"id":109310,"depth":1194,"text":109311},{"id":109322,"depth":1194,"text":109322},{"id":109348,"depth":1194,"text":109348},{"id":102607,"depth":51,"text":102608},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107520,"description":42},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109436,"title":109437,"body":109438,"description":42,"extension":54,"meta":111349,"navigation":56,"path":111350,"seo":111351,"stem":111352,"__hash__":111353},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109439,"toc":111325},[109440,109443,109445,109448,109450,109469,109472,109478,109481,109483,109485,109509,109511,109525,109527,109568,109570,109581,109583,109586,109592,109595,109629,109632,109664,109667,109699,109703,109706,109746,109749,109755,109758,109764,109768,109771,109777,109780,109784,109787,109827,109829,109842,109845,109847,110429,110431,110443,110446,110457,110459,110462,110481,110493,110496,110517,110520,110523,110566,110569,110572,110592,110599,110601,110619,110634,110637,110643,110646,110652,110669,110676,110707,110718,110752,110763,110780,110789,110797,110802,110816,110819,110840,110846,110860,110865,110895,110905,110930,110938,110961,110964,110980,110983,110991,110997,111019,111032,111053,111062,111101,111112,111114,111117,111123,111126,111129,111135,111138,111158,111161,111163,111202,111204,111207,111215,111218,111221,111248,111251,111261,111267,111270,111276,111278,111284,111288,111291,111293,111296,111320,111323],[10,109441,109437],{"id":109442},"_6控制任务cartpole",[71,109444,100648],{"id":100647},[14,109446,109447],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109449,104332],{},[83,109451,109452,109455,109457,109460,109463,109466],{},[86,109453,109454],{},"slide joint",[86,109456,106185],{},[86,109458,109459],{},"cart force actuator",[86,109461,109462],{},"状态观测",[86,109464,109465],{},"简单控制循环",[86,109467,109468],{},"reward 设计雏形",[14,109470,109471],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[120,109473,109476],{"className":109474,"code":109475,"language":5202,"meta":42},[5200],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[126,109477,109475],{"__ignoreMap":42},[14,109479,109480],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[71,109482,100771],{"id":100770},[14,109484,100774],{},[120,109486,109487],{"className":23837,"code":104389,"language":23839,"meta":42,"style":42},[126,109488,109489],{"__ignoreMap":42},[129,109490,109491,109493,109495,109497,109499,109501,109503,109505,109507],{"class":131,"line":132},[129,109492,24577],{"class":1977},[129,109494,26316],{"class":244},[129,109496,23849],{"class":244},[129,109498,26401],{"class":188},[129,109500,104404],{"class":244},[129,109502,100799],{"class":244},[129,109504,102502],{"class":244},[129,109506,100815],{"class":244},[129,109508,104413],{"class":244},[14,109510,102820],{},[120,109512,109513],{"className":23837,"code":100920,"language":23839,"meta":42,"style":42},[126,109514,109515],{"__ignoreMap":42},[129,109516,109517,109519,109521,109523],{"class":131,"line":132},[129,109518,23846],{"class":1977},[129,109520,23849],{"class":244},[129,109522,100931],{"class":244},[129,109524,100934],{"class":244},[14,109526,102837],{},[120,109528,109530],{"className":23837,"code":109529,"language":23839,"meta":42,"style":42},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[126,109531,109532,109549,109558],{"__ignoreMap":42},[129,109533,109534,109536,109538,109540,109543,109545,109547],{"class":131,"line":132},[129,109535,30331],{"class":1977},[129,109537,29177],{"class":244},[129,109539,25116],{"class":188},[129,109541,109542],{"class":244}," mujoco-cartpole",[129,109544,100976],{"class":244},[129,109546,100979],{"class":188},[129,109548,100982],{"class":188},[129,109550,109551,109553,109555],{"class":131,"line":51},[129,109552,30331],{"class":1977},[129,109554,100989],{"class":244},[129,109556,109557],{"class":244}," mujoco-cartpole\n",[129,109559,109560,109562,109564,109566],{"class":131,"line":1194},[129,109561,23846],{"class":1977},[129,109563,23849],{"class":244},[129,109565,100931],{"class":244},[129,109567,100934],{"class":244},[14,109569,101005],{},[83,109571,109572,109575,109578],{},[86,109573,109574],{},"本章不依赖 Gymnasium。",[86,109576,109577],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[86,109579,109580],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[71,109582,101046],{"id":101045},[14,109584,109585],{},"Cartpole 的模型结构:",[120,109587,109590],{"className":109588,"code":109589,"language":5202,"meta":42},[5200],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[126,109591,109589],{"__ignoreMap":42},[14,109593,109594],{},"小车通过 slide joint 左右移动:",[120,109596,109598],{"className":53068,"code":109597,"language":53070,"meta":42,"style":42},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[126,109599,109600],{"__ignoreMap":42},[129,109601,109602,109604,109606,109608,109610,109613,109615,109617,109620,109622,109624,109627],{"class":131,"line":132},[129,109603,1049],{"class":139},[129,109605,102957],{"class":51301},[129,109607,14935],{"class":1977},[129,109609,185],{"class":139},[129,109611,109612],{"class":244},"\"cart_x\"",[129,109614,53825],{"class":1977},[129,109616,185],{"class":139},[129,109618,109619],{"class":244},"\"slide\"",[129,109621,106029],{"class":1977},[129,109623,185],{"class":139},[129,109625,109626],{"class":244},"\"1 0 0\"",[129,109628,101145],{"class":139},[14,109630,109631],{},"杆子通过 hinge joint 旋转:",[120,109633,109635],{"className":53068,"code":109634,"language":53070,"meta":42,"style":42},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[126,109636,109637],{"__ignoreMap":42},[129,109638,109639,109641,109643,109645,109647,109650,109652,109654,109656,109658,109660,109662],{"class":131,"line":132},[129,109640,1049],{"class":139},[129,109642,102957],{"class":51301},[129,109644,14935],{"class":1977},[129,109646,185],{"class":139},[129,109648,109649],{"class":244},"\"pole_hinge\"",[129,109651,53825],{"class":1977},[129,109653,185],{"class":139},[129,109655,106020],{"class":244},[129,109657,106029],{"class":1977},[129,109659,185],{"class":139},[129,109661,106034],{"class":244},[129,109663,101145],{"class":139},[14,109665,109666],{},"控制力作用在小车 slide joint 上:",[120,109668,109670],{"className":53068,"code":109669,"language":53070,"meta":42,"style":42},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[126,109671,109672],{"__ignoreMap":42},[129,109673,109674,109676,109678,109680,109682,109685,109687,109689,109691,109693,109695,109697],{"class":131,"line":132},[129,109675,1049],{"class":139},[129,109677,106075],{"class":51301},[129,109679,14935],{"class":1977},[129,109681,185],{"class":139},[129,109683,109684],{"class":244},"\"cart_motor\"",[129,109686,106085],{"class":1977},[129,109688,185],{"class":139},[129,109690,109612],{"class":244},[129,109692,106092],{"class":1977},[129,109694,185],{"class":139},[129,109696,54317],{"class":244},[129,109698,101145],{"class":139},[100,109700,109702],{"id":109701},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109704,109705],{},"这个简化模型有两个关节：",[277,109707,109708,109719],{},[280,109709,109710],{},[283,109711,109712,109714,109716],{},[286,109713,102760],{"align":23751},[286,109715,23752],{"align":23751},[286,109717,109718],{"align":23751},"对应状态",[324,109720,109721,109734],{},[283,109722,109723,109728,109731],{},[329,109724,109725],{"align":23751},[126,109726,109727],{},"cart_x",[329,109729,109730],{"align":23751},"slide",[329,109732,109733],{"align":23751},"小车 x 位置",[283,109735,109736,109741,109743],{},[329,109737,109738],{"align":23751},[126,109739,109740],{},"pole_hinge",[329,109742,105841],{"align":23751},[329,109744,109745],{"align":23751},"杆子角度",[14,109747,109748],{},"所以：",[120,109750,109753],{"className":109751,"code":109752,"language":5202,"meta":42},[5200],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[126,109754,109752],{"__ignoreMap":42},[14,109756,109757],{},"把它们拼起来就是观测：",[120,109759,109762],{"className":109760,"code":109761,"language":5202,"meta":42},[5200],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[126,109763,109761],{"__ignoreMap":42},[100,109765,109767],{"id":109766},"action-是什么","action 是什么",[14,109769,109770],{},"本章只有一个 actuator：",[120,109772,109775],{"className":109773,"code":109774,"language":5202,"meta":42},[5200],"data.ctrl[0] = action\n",[126,109776,109774],{"__ignoreMap":42},[14,109778,109779],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[100,109781,109783],{"id":109782},"reward-是什么","reward 是什么",[14,109785,109786],{},"奖励函数：",[120,109788,109790],{"className":30379,"code":109789,"language":30381,"meta":42,"style":42},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[126,109791,109792],{"__ignoreMap":42},[129,109793,109794,109796,109799,109801,109803,109805,109808,109810,109813,109815,109817,109819,109822,109824],{"class":131,"line":132},[129,109795,17061],{"class":135},[129,109797,109798],{"class":188}," float",[129,109800,140],{"class":139},[129,109802,102404],{"class":188},[129,109804,52272],{"class":135},[129,109806,109807],{"class":188}," 0.1",[129,109809,6533],{"class":135},[129,109811,109812],{"class":139}," cart_x ",[129,109814,594],{"class":135},[129,109816,109812],{"class":139},[129,109818,671],{"class":135},[129,109820,109821],{"class":139}," pole_angle ",[129,109823,594],{"class":135},[129,109825,109826],{"class":139}," pole_angle)\n",[14,109828,106227],{},[83,109830,109831,109836,109839],{},[86,109832,109833,109834,28386],{},"基础奖励是 ",[126,109835,102404],{},[86,109837,109838],{},"小车离中心越远，扣分越多。",[86,109840,109841],{},"杆子角度越大，扣分越多。",[14,109843,109844],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[71,109846,101254],{"id":101253},[120,109848,109850],{"className":30379,"code":109849,"language":30381,"meta":42,"style":42},"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",[126,109851,109852,109858,109868,109872,109876,109884,109889,109893,109897,109901,109906,109910,109915,109920,109925,109929,109934,109939,109944,109948,109952,109956,109960,109964,109969,109973,109977,109981,109985,109989,109999,110006,110010,110014,110028,110042,110055,110085,110089,110093,110105,110117,110125,110129,110142,110146,110150,110159,110163,110179,110189,110202,110215,110219,110242,110260,110264,110276,110280,110284,110294,110304,110308,110324,110365,110369,110389,110405,110409,110413,110425],{"__ignoreMap":42},[129,109853,109854,109856],{"class":131,"line":132},[129,109855,30393],{"class":135},[129,109857,101302],{"class":139},[129,109859,109860,109862,109864,109866],{"class":131,"line":51},[129,109861,30393],{"class":135},[129,109863,31381],{"class":139},[129,109865,31384],{"class":135},[129,109867,31387],{"class":139},[129,109869,109870],{"class":131,"line":1194},[129,109871,2414],{"emptyLinePlaceholder":56},[129,109873,109874],{"class":131,"line":1209},[129,109875,2414],{"emptyLinePlaceholder":56},[129,109877,109878,109880,109882],{"class":131,"line":1215},[129,109879,101315],{"class":188},[129,109881,13579],{"class":135},[129,109883,101320],{"class":244},[129,109885,109886],{"class":131,"line":1229},[129,109887,109888],{"class":244},"\u003Cmujoco model=\"cartpole\">\n",[129,109890,109891],{"class":131,"line":1235},[129,109892,101330],{"class":244},[129,109894,109895],{"class":131,"line":1326},[129,109896,2414],{"emptyLinePlaceholder":56},[129,109898,109899],{"class":131,"line":1332},[129,109900,101339],{"class":244},[129,109902,109903],{"class":131,"line":1344},[129,109904,109905],{"class":244},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[129,109907,109908],{"class":131,"line":1626},[129,109909,2414],{"emptyLinePlaceholder":56},[129,109911,109912],{"class":131,"line":1631},[129,109913,109914],{"class":244},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[129,109916,109917],{"class":131,"line":1637},[129,109918,109919],{"class":244},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[129,109921,109922],{"class":131,"line":1642},[129,109923,109924],{"class":244},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[129,109926,109927],{"class":131,"line":1656},[129,109928,2414],{"emptyLinePlaceholder":56},[129,109930,109931],{"class":131,"line":1661},[129,109932,109933],{"class":244},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[129,109935,109936],{"class":131,"line":1667},[129,109937,109938],{"class":244},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[129,109940,109941],{"class":131,"line":1688},[129,109942,109943],{"class":244},"        \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",[129,109945,109946],{"class":131,"line":1693},[129,109947,106439],{"class":244},[129,109949,109950],{"class":131,"line":1707},[129,109951,101368],{"class":244},[129,109953,109954],{"class":131,"line":1712},[129,109955,101373],{"class":244},[129,109957,109958],{"class":131,"line":1741},[129,109959,2414],{"emptyLinePlaceholder":56},[129,109961,109962],{"class":131,"line":1746},[129,109963,106456],{"class":244},[129,109965,109966],{"class":131,"line":1763},[129,109967,109968],{"class":244},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[129,109970,109971],{"class":131,"line":1768},[129,109972,106466],{"class":244},[129,109974,109975],{"class":131,"line":1773},[129,109976,101378],{"class":244},[129,109978,109979],{"class":131,"line":1778},[129,109980,95699],{"class":244},[129,109982,109983],{"class":131,"line":1792},[129,109984,2414],{"emptyLinePlaceholder":56},[129,109986,109987],{"class":131,"line":1797},[129,109988,2414],{"emptyLinePlaceholder":56},[129,109990,109991,109993,109996],{"class":131,"line":2591},[129,109992,31948],{"class":135},[129,109994,109995],{"class":1977}," get_observation",[129,109997,109998],{"class":139},"(data: mujoco.MjData) -> np.ndarray:\n",[129,110000,110001,110003],{"class":131,"line":2605},[129,110002,4104],{"class":135},[129,110004,110005],{"class":139}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[129,110007,110008],{"class":131,"line":2613},[129,110009,2414],{"emptyLinePlaceholder":56},[129,110011,110012],{"class":131,"line":2618},[129,110013,2414],{"emptyLinePlaceholder":56},[129,110015,110016,110018,110021,110024,110026],{"class":131,"line":2624},[129,110017,31948],{"class":135},[129,110019,110020],{"class":1977}," compute_reward",[129,110022,110023],{"class":139},"(obs: np.ndarray) -> ",[129,110025,179],{"class":188},[129,110027,3753],{"class":139},[129,110029,110030,110033,110035,110038,110040],{"class":131,"line":2630},[129,110031,110032],{"class":139},"    cart_x ",[129,110034,185],{"class":135},[129,110036,110037],{"class":139}," obs[",[129,110039,331],{"class":188},[129,110041,33247],{"class":139},[129,110043,110044,110047,110049,110051,110053],{"class":131,"line":2635},[129,110045,110046],{"class":139},"    pole_angle ",[129,110048,185],{"class":135},[129,110050,110037],{"class":139},[129,110052,357],{"class":188},[129,110054,33247],{"class":139},[129,110056,110057,110059,110061,110063,110065,110067,110069,110071,110073,110075,110077,110079,110081,110083],{"class":131,"line":7963},[129,110058,4104],{"class":135},[129,110060,109798],{"class":188},[129,110062,140],{"class":139},[129,110064,102404],{"class":188},[129,110066,52272],{"class":135},[129,110068,109807],{"class":188},[129,110070,6533],{"class":135},[129,110072,109812],{"class":139},[129,110074,594],{"class":135},[129,110076,109812],{"class":139},[129,110078,671],{"class":135},[129,110080,109821],{"class":139},[129,110082,594],{"class":135},[129,110084,109826],{"class":139},[129,110086,110087],{"class":131,"line":7987},[129,110088,2414],{"emptyLinePlaceholder":56},[129,110090,110091],{"class":131,"line":7992},[129,110092,2414],{"emptyLinePlaceholder":56},[129,110094,110095,110097,110099,110101,110103],{"class":131,"line":7998},[129,110096,31948],{"class":135},[129,110098,1987],{"class":1977},[129,110100,101399],{"class":139},[129,110102,95687],{"class":188},[129,110104,3753],{"class":139},[129,110106,110107,110109,110111,110113,110115],{"class":131,"line":8025},[129,110108,101408],{"class":139},[129,110110,185],{"class":135},[129,110112,101413],{"class":139},[129,110114,101315],{"class":188},[129,110116,146],{"class":139},[129,110118,110119,110121,110123],{"class":131,"line":8030},[129,110120,101422],{"class":139},[129,110122,185],{"class":135},[129,110124,101427],{"class":139},[129,110126,110127],{"class":131,"line":8036},[129,110128,2414],{"emptyLinePlaceholder":56},[129,110130,110131,110133,110135,110137,110139],{"class":131,"line":8048},[129,110132,105070],{"class":139},[129,110134,357],{"class":188},[129,110136,4457],{"class":139},[129,110138,185],{"class":135},[129,110140,110141],{"class":188}," 0.1\n",[129,110143,110144],{"class":131,"line":8060},[129,110145,105083],{"class":139},[129,110147,110148],{"class":131,"line":8072},[129,110149,2414],{"emptyLinePlaceholder":56},[129,110151,110152,110155,110157],{"class":131,"line":9731},[129,110153,110154],{"class":139},"    total_reward ",[129,110156,185],{"class":135},[129,110158,104762],{"class":188},[129,110160,110161],{"class":131,"line":9756},[129,110162,2414],{"emptyLinePlaceholder":56},[129,110164,110165,110167,110169,110171,110173,110175,110177],{"class":131,"line":9779},[129,110166,3215],{"class":135},[129,110168,31617],{"class":139},[129,110170,26044],{"class":135},[129,110172,32444],{"class":188},[129,110174,140],{"class":139},[129,110176,6425],{"class":188},[129,110178,30787],{"class":139},[129,110180,110181,110184,110186],{"class":131,"line":9803},[129,110182,110183],{"class":139},"        obs ",[129,110185,185],{"class":135},[129,110187,110188],{"class":139}," get_observation(data)\n",[129,110190,110191,110194,110196,110198,110200],{"class":131,"line":9808},[129,110192,110193],{"class":139},"        pole_angle ",[129,110195,185],{"class":135},[129,110197,110037],{"class":139},[129,110199,357],{"class":188},[129,110201,33247],{"class":139},[129,110203,110204,110207,110209,110211,110213],{"class":131,"line":9813},[129,110205,110206],{"class":139},"        pole_angular_velocity ",[129,110208,185],{"class":135},[129,110210,110037],{"class":139},[129,110212,211],{"class":188},[129,110214,33247],{"class":139},[129,110216,110217],{"class":131,"line":9818},[129,110218,2414],{"emptyLinePlaceholder":56},[129,110220,110221,110224,110226,110229,110231,110233,110235,110237,110239],{"class":131,"line":9827},[129,110222,110223],{"class":139},"        action ",[129,110225,185],{"class":135},[129,110227,110228],{"class":188}," 2.0",[129,110230,6533],{"class":135},[129,110232,109821],{"class":139},[129,110234,620],{"class":135},[129,110236,61868],{"class":188},[129,110238,6533],{"class":135},[129,110240,110241],{"class":139}," pole_angular_velocity\n",[129,110243,110244,110246,110248,110250,110252,110254,110256,110258],{"class":131,"line":9832},[129,110245,110223],{"class":139},[129,110247,185],{"class":135},[129,110249,107448],{"class":139},[129,110251,671],{"class":135},[129,110253,102404],{"class":188},[129,110255,12450],{"class":139},[129,110257,102404],{"class":188},[129,110259,146],{"class":139},[129,110261,110262],{"class":131,"line":9838},[129,110263,2414],{"emptyLinePlaceholder":56},[129,110265,110266,110268,110270,110272,110274],{"class":131,"line":9859},[129,110267,106618],{"class":139},[129,110269,331],{"class":188},[129,110271,4457],{"class":139},[129,110273,185],{"class":135},[129,110275,107471],{"class":139},[129,110277,110278],{"class":131,"line":9865},[129,110279,101517],{"class":139},[129,110281,110282],{"class":131,"line":9879},[129,110283,2414],{"emptyLinePlaceholder":56},[129,110285,110286,110289,110291],{"class":131,"line":9885},[129,110287,110288],{"class":139},"        reward ",[129,110290,185],{"class":135},[129,110292,110293],{"class":139}," compute_reward(get_observation(data))\n",[129,110295,110296,110299,110301],{"class":131,"line":9912},[129,110297,110298],{"class":139},"        total_reward ",[129,110300,9492],{"class":135},[129,110302,110303],{"class":139}," reward\n",[129,110305,110306],{"class":131,"line":9921},[129,110307,2414],{"emptyLinePlaceholder":56},[129,110309,110310,110312,110314,110316,110318,110320,110322],{"class":131,"line":9927},[129,110311,2511],{"class":135},[129,110313,31617],{"class":139},[129,110315,467],{"class":135},[129,110317,5769],{"class":188},[129,110319,101560],{"class":135},[129,110321,4107],{"class":188},[129,110323,3753],{"class":139},[129,110325,110326,110328,110330,110333,110336,110339,110342,110344,110347,110350,110352,110354,110356,110358,110361,110363],{"class":131,"line":9935},[129,110327,34651],{"class":188},[129,110329,140],{"class":139},[129,110331,110332],{"class":244},"\"step:\"",[129,110334,110335],{"class":139},", step, ",[129,110337,110338],{"class":244},"\"obs:\"",[129,110340,110341],{"class":139},", np.round(obs, ",[129,110343,211],{"class":188},[129,110345,110346],{"class":139},"), ",[129,110348,110349],{"class":244},"\"action:\"",[129,110351,12450],{"class":139},[129,110353,32019],{"class":188},[129,110355,140],{"class":139},[129,110357,179],{"class":188},[129,110359,110360],{"class":139},"(action), ",[129,110362,211],{"class":188},[129,110364,30498],{"class":139},[129,110366,110367],{"class":131,"line":9940},[129,110368,2414],{"emptyLinePlaceholder":56},[129,110370,110371,110373,110375,110378,110380,110382,110385,110387],{"class":131,"line":16619},[129,110372,31300],{"class":188},[129,110374,140],{"class":139},[129,110376,110377],{"class":244},"\"total_reward:\"",[129,110379,12450],{"class":139},[129,110381,32019],{"class":188},[129,110383,110384],{"class":139},"(total_reward, ",[129,110386,211],{"class":188},[129,110388,30498],{"class":139},[129,110390,110391,110393,110395,110398,110401,110403],{"class":131,"line":16625},[129,110392,31300],{"class":188},[129,110394,140],{"class":139},[129,110396,110397],{"class":244},"\"final obs:\"",[129,110399,110400],{"class":139},", np.round(get_observation(data), ",[129,110402,211],{"class":188},[129,110404,30498],{"class":139},[129,110406,110407],{"class":131,"line":16648},[129,110408,2414],{"emptyLinePlaceholder":56},[129,110410,110411],{"class":131,"line":16654},[129,110412,2414],{"emptyLinePlaceholder":56},[129,110414,110415,110417,110419,110421,110423],{"class":131,"line":16677},[129,110416,1545],{"class":135},[129,110418,31221],{"class":188},[129,110420,101560],{"class":135},[129,110422,101563],{"class":244},[129,110424,3753],{"class":139},[129,110426,110427],{"class":131,"line":16691},[129,110428,101570],{"class":139},[14,110430,103571],{},[120,110432,110434],{"className":23837,"code":110433,"language":23839,"meta":42,"style":42},"touch ch6_cartpole.py\n",[126,110435,110436],{"__ignoreMap":42},[129,110437,110438,110440],{"class":131,"line":132},[129,110439,101284],{"class":1977},[129,110441,110442],{"class":244}," ch6_cartpole.py\n",[14,110444,110445],{},"运行：",[120,110447,110449],{"className":23837,"code":110448,"language":23839,"meta":42,"style":42},"python ch6_cartpole.py\n",[126,110450,110451],{"__ignoreMap":42},[129,110452,110453,110455],{"class":131,"line":132},[129,110454,30381],{"class":1977},[129,110456,110442],{"class":244},[100,110458,101573],{"id":101573},[14,110460,110461],{},"构造观测：",[120,110463,110465],{"className":30379,"code":110464,"language":30381,"meta":42,"style":42},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[126,110466,110467,110475],{"__ignoreMap":42},[129,110468,110469,110471,110473],{"class":131,"line":132},[129,110470,31948],{"class":135},[129,110472,109995],{"class":1977},[129,110474,109998],{"class":139},[129,110476,110477,110479],{"class":131,"line":51},[129,110478,4104],{"class":135},[129,110480,110005],{"class":139},[14,110482,110483,110486,110487,110489,110490,110492],{},[126,110484,110485],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[126,110488,104031],{}," 2 维，",[126,110491,104361],{}," 2 维，所以 obs 是 4 维。",[14,110494,110495],{},"设置初始角度：",[120,110497,110499],{"className":30379,"code":110498,"language":30381,"meta":42,"style":42},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[126,110500,110501,110513],{"__ignoreMap":42},[129,110502,110503,110505,110507,110509,110511],{"class":131,"line":132},[129,110504,104700],{"class":139},[129,110506,357],{"class":188},[129,110508,4457],{"class":139},[129,110510,185],{"class":135},[129,110512,110141],{"class":188},[129,110514,110515],{"class":131,"line":51},[129,110516,104544],{"class":139},[14,110518,110519],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110521,110522],{},"简单反馈控制：",[120,110524,110526],{"className":30379,"code":110525,"language":30381,"meta":42,"style":42},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[126,110527,110528,110548],{"__ignoreMap":42},[129,110529,110530,110532,110534,110536,110538,110540,110542,110544,110546],{"class":131,"line":132},[129,110531,107443],{"class":139},[129,110533,185],{"class":135},[129,110535,110228],{"class":188},[129,110537,6533],{"class":135},[129,110539,109821],{"class":139},[129,110541,620],{"class":135},[129,110543,61868],{"class":188},[129,110545,6533],{"class":135},[129,110547,110241],{"class":139},[129,110549,110550,110552,110554,110556,110558,110560,110562,110564],{"class":131,"line":51},[129,110551,107443],{"class":139},[129,110553,185],{"class":135},[129,110555,107448],{"class":139},[129,110557,671],{"class":135},[129,110559,102404],{"class":188},[129,110561,12450],{"class":139},[129,110563,102404],{"class":188},[129,110565,146],{"class":139},[14,110567,110568],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110570,110571],{},"限制动作：",[120,110573,110575],{"className":30379,"code":110574,"language":30381,"meta":42,"style":42},"np.clip(action, -1.0, 1.0)\n",[126,110576,110577],{"__ignoreMap":42},[129,110578,110579,110582,110584,110586,110588,110590],{"class":131,"line":132},[129,110580,110581],{"class":139},"np.clip(action, ",[129,110583,671],{"class":135},[129,110585,102404],{"class":188},[129,110587,12450],{"class":139},[129,110589,102404],{"class":188},[129,110591,146],{"class":139},[14,110593,110594,110595,110598],{},"因为 XML 里 ",[126,110596,110597],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[100,110600,101709],{"id":101709},[120,110602,110603],{"className":30379,"code":110464,"language":30381,"meta":42,"style":42},[126,110604,110605,110613],{"__ignoreMap":42},[129,110606,110607,110609,110611],{"class":131,"line":132},[129,110608,31948],{"class":135},[129,110610,109995],{"class":1977},[129,110612,109998],{"class":139},[129,110614,110615,110617],{"class":131,"line":51},[129,110616,4104],{"class":135},[129,110618,110005],{"class":139},[14,110620,110621,110622,110625,110626,110629,110630,110633],{},"这段定义了一个函数，用来获取当前观测。",[126,110623,110624],{},"data.qpos.copy()"," 是位置数组副本，",[126,110627,110628],{},"data.qvel.copy()"," 是速度数组副本。",[126,110631,110632],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110635,110636],{},"在本章模型里：",[120,110638,110641],{"className":110639,"code":110640,"language":5202,"meta":42},[5200],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[126,110642,110640],{"__ignoreMap":42},[14,110644,110645],{},"所以返回的 obs 是：",[120,110647,110650],{"className":110648,"code":110649,"language":5202,"meta":42},[5200],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[126,110651,110649],{"__ignoreMap":42},[120,110653,110655],{"className":30379,"code":110654,"language":30381,"meta":42,"style":42},"def compute_reward(obs: np.ndarray) -> float:\n",[126,110656,110657],{"__ignoreMap":42},[129,110658,110659,110661,110663,110665,110667],{"class":131,"line":132},[129,110660,31948],{"class":135},[129,110662,110020],{"class":1977},[129,110664,110023],{"class":139},[129,110666,179],{"class":188},[129,110668,3753],{"class":139},[14,110670,110671,110672,110675],{},"这行定义奖励函数。输入是观测 ",[126,110673,110674],{},"obs","，输出是一个浮点数奖励。",[120,110677,110679],{"className":30379,"code":110678,"language":30381,"meta":42,"style":42},"cart_x = obs[0]\npole_angle = obs[1]\n",[126,110680,110681,110694],{"__ignoreMap":42},[129,110682,110683,110686,110688,110690,110692],{"class":131,"line":132},[129,110684,110685],{"class":139},"cart_x ",[129,110687,185],{"class":135},[129,110689,110037],{"class":139},[129,110691,331],{"class":188},[129,110693,33247],{"class":139},[129,110695,110696,110699,110701,110703,110705],{"class":131,"line":51},[129,110697,110698],{"class":139},"pole_angle ",[129,110700,185],{"class":135},[129,110702,110037],{"class":139},[129,110704,357],{"class":188},[129,110706,33247],{"class":139},[14,110708,110709,110710,110713,110714,110717],{},"数组索引从 0 开始。",[126,110711,110712],{},"obs[0]"," 是第一个元素，也就是小车位置。",[126,110715,110716],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[120,110719,110720],{"className":30379,"code":109789,"language":30381,"meta":42,"style":42},[126,110721,110722],{"__ignoreMap":42},[129,110723,110724,110726,110728,110730,110732,110734,110736,110738,110740,110742,110744,110746,110748,110750],{"class":131,"line":132},[129,110725,17061],{"class":135},[129,110727,109798],{"class":188},[129,110729,140],{"class":139},[129,110731,102404],{"class":188},[129,110733,52272],{"class":135},[129,110735,109807],{"class":188},[129,110737,6533],{"class":135},[129,110739,109812],{"class":139},[129,110741,594],{"class":135},[129,110743,109812],{"class":139},[129,110745,671],{"class":135},[129,110747,109821],{"class":139},[129,110749,594],{"class":135},[129,110751,109826],{"class":139},[14,110753,110754,110755,110758,110759,110762],{},"这行计算奖励。",[126,110756,110757],{},"cart_x * cart_x"," 是小车位置的平方，",[126,110760,110761],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[120,110764,110766],{"className":30379,"code":110765,"language":30381,"meta":42,"style":42},"data.qpos[1] = 0.1\n",[126,110767,110768],{"__ignoreMap":42},[129,110769,110770,110772,110774,110776,110778],{"class":131,"line":132},[129,110771,104700],{"class":139},[129,110773,357],{"class":188},[129,110775,4457],{"class":139},[129,110777,185],{"class":135},[129,110779,110141],{"class":188},[14,110781,110782,110783,110785,110786,110788],{},"手动设置杆子的初始角度。因为 ",[126,110784,105457],{}," 是小车位置，",[126,110787,105460],{}," 是杆子角度，所以这里改的是杆子。",[120,110790,110791],{"className":30379,"code":104544,"language":30381,"meta":42,"style":42},[126,110792,110793],{"__ignoreMap":42},[129,110794,110795],{"class":131,"line":132},[129,110796,104544],{"class":139},[14,110798,105503,110799,110801],{},[126,110800,104031],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[120,110803,110805],{"className":30379,"code":110804,"language":30381,"meta":42,"style":42},"total_reward = 0.0\n",[126,110806,110807],{"__ignoreMap":42},[129,110808,110809,110812,110814],{"class":131,"line":132},[129,110810,110811],{"class":139},"total_reward ",[129,110813,185],{"class":135},[129,110815,104762],{"class":188},[14,110817,110818],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[120,110820,110822],{"className":30379,"code":110821,"language":30381,"meta":42,"style":42},"for step in range(1000):\n",[126,110823,110824],{"__ignoreMap":42},[129,110825,110826,110828,110830,110832,110834,110836,110838],{"class":131,"line":132},[129,110827,3039],{"class":135},[129,110829,31617],{"class":139},[129,110831,26044],{"class":135},[129,110833,32444],{"class":188},[129,110835,140],{"class":139},[129,110837,6425],{"class":188},[129,110839,30787],{"class":139},[14,110841,110842,110843,110845],{},"循环 1000 步。",[126,110844,107135],{}," 是当前步数，从 0 到 999。",[120,110847,110849],{"className":30379,"code":110848,"language":30381,"meta":42,"style":42},"obs = get_observation(data)\n",[126,110850,110851],{"__ignoreMap":42},[129,110852,110853,110856,110858],{"class":131,"line":132},[129,110854,110855],{"class":139},"obs ",[129,110857,185],{"class":135},[129,110859,110188],{"class":139},[14,110861,110862,110863,28386],{},"读取当前状态，保存到 ",[126,110864,110674],{},[120,110866,110868],{"className":30379,"code":110867,"language":30381,"meta":42,"style":42},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[126,110869,110870,110882],{"__ignoreMap":42},[129,110871,110872,110874,110876,110878,110880],{"class":131,"line":132},[129,110873,110698],{"class":139},[129,110875,185],{"class":135},[129,110877,110037],{"class":139},[129,110879,357],{"class":188},[129,110881,33247],{"class":139},[129,110883,110884,110887,110889,110891,110893],{"class":131,"line":51},[129,110885,110886],{"class":139},"pole_angular_velocity ",[129,110888,185],{"class":135},[129,110890,110037],{"class":139},[129,110892,211],{"class":188},[129,110894,33247],{"class":139},[14,110896,110897,110898,110901,110902,28386],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[126,110899,110900],{},"obs[3]","？因为 obs 的顺序是 ",[126,110903,110904],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[120,110906,110908],{"className":30379,"code":110907,"language":30381,"meta":42,"style":42},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[126,110909,110910],{"__ignoreMap":42},[129,110911,110912,110914,110916,110918,110920,110922,110924,110926,110928],{"class":131,"line":132},[129,110913,107443],{"class":139},[129,110915,185],{"class":135},[129,110917,110228],{"class":188},[129,110919,6533],{"class":135},[129,110921,109821],{"class":139},[129,110923,620],{"class":135},[129,110925,61868],{"class":188},[129,110927,6533],{"class":135},[129,110929,110241],{"class":139},[14,110931,110932,110933,101019,110935,110937],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[126,110934,105261],{},[126,110936,35330],{}," 是人为设置的系数，不是固定公式。",[120,110939,110941],{"className":30379,"code":110940,"language":30381,"meta":42,"style":42},"action = np.clip(action, -1.0, 1.0)\n",[126,110942,110943],{"__ignoreMap":42},[129,110944,110945,110947,110949,110951,110953,110955,110957,110959],{"class":131,"line":132},[129,110946,107443],{"class":139},[129,110948,185],{"class":135},[129,110950,107448],{"class":139},[129,110952,671],{"class":135},[129,110954,102404],{"class":188},[129,110956,12450],{"class":139},[129,110958,102404],{"class":188},[129,110960,146],{"class":139},[14,110962,110963],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[120,110965,110966],{"className":30379,"code":109774,"language":30381,"meta":42,"style":42},[126,110967,110968],{"__ignoreMap":42},[129,110969,110970,110972,110974,110976,110978],{"class":131,"line":132},[129,110971,105872],{"class":139},[129,110973,331],{"class":188},[129,110975,4457],{"class":139},[129,110977,185],{"class":135},[129,110979,107471],{"class":139},[14,110981,110982],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[120,110984,110985],{"className":30379,"code":104506,"language":30381,"meta":42,"style":42},[126,110986,110987],{"__ignoreMap":42},[129,110988,110989],{"class":131,"line":132},[129,110990,104506],{"class":139},[14,110992,110993,110994,110996],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[126,110995,106127],{}," 计算小车和杆子的下一刻状态。",[120,110998,111000],{"className":30379,"code":110999,"language":30381,"meta":42,"style":42},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[126,111001,111002,111011],{"__ignoreMap":42},[129,111003,111004,111007,111009],{"class":131,"line":132},[129,111005,111006],{"class":139},"reward ",[129,111008,185],{"class":135},[129,111010,110293],{"class":139},[129,111012,111013,111015,111017],{"class":131,"line":51},[129,111014,110811],{"class":139},[129,111016,9492],{"class":135},[129,111018,110303],{"class":139},[14,111020,111021,111022,111024,111025,111028,111029,28386],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[126,111023,9492],{}," 是简写，",[126,111026,111027],{},"total_reward += reward"," 等价于 ",[126,111030,111031],{},"total_reward = total_reward + reward",[120,111033,111035],{"className":30379,"code":111034,"language":30381,"meta":42,"style":42},"if step % 100 == 0:\n",[126,111036,111037],{"__ignoreMap":42},[129,111038,111039,111041,111043,111045,111047,111049,111051],{"class":131,"line":132},[129,111040,1545],{"class":135},[129,111042,31617],{"class":139},[129,111044,467],{"class":135},[129,111046,5769],{"class":188},[129,111048,101560],{"class":135},[129,111050,4107],{"class":188},[129,111052,3753],{"class":139},[14,111054,111055,111057,111058,111061],{},[126,111056,467],{}," 是取余数。",[126,111059,111060],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[120,111063,111065],{"className":30379,"code":111064,"language":30381,"meta":42,"style":42},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[126,111066,111067],{"__ignoreMap":42},[129,111068,111069,111071,111073,111075,111077,111079,111081,111083,111085,111087,111089,111091,111093,111095,111097,111099],{"class":131,"line":132},[129,111070,30416],{"class":188},[129,111072,140],{"class":139},[129,111074,110332],{"class":244},[129,111076,110335],{"class":139},[129,111078,110338],{"class":244},[129,111080,110341],{"class":139},[129,111082,211],{"class":188},[129,111084,110346],{"class":139},[129,111086,110349],{"class":244},[129,111088,12450],{"class":139},[129,111090,32019],{"class":188},[129,111092,140],{"class":139},[129,111094,179],{"class":188},[129,111096,110360],{"class":139},[129,111098,211],{"class":188},[129,111100,30498],{"class":139},[14,111102,111103,111104,111107,111108,111111],{},"打印当前步数、观测和动作。",[126,111105,111106],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[126,111109,111110],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[71,111113,102317],{"id":102316},[14,111115,111116],{},"观测向量:",[120,111118,111121],{"className":111119,"code":111120,"language":5202,"meta":42},[5200],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[126,111122,111120],{"__ignoreMap":42},[14,111124,111125],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111127,111128],{},"每隔 100 步会打印一次：",[120,111130,111133],{"className":111131,"code":111132,"language":5202,"meta":42},[5200],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[126,111134,111132],{"__ignoreMap":42},[14,111136,111137],{},"重点观察：",[83,111139,111140,111146,111151],{},[86,111141,111142,111145],{},[126,111143,111144],{},"pole_angle"," 是否越来越大。",[86,111147,111148,111150],{},[126,111149,109727],{}," 是否跑得太远。",[86,111152,111153,111154,82540,111156,28386],{},"action 是否经常被 clip 到 ",[126,111155,103916],{},[126,111157,357],{},[14,111159,111160],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[71,111162,102349],{"id":102348},[83,111164,111165,111171,111174,111180,111190,111196,111199],{},[86,111166,111167,111168,28386],{},"把初始角度改为 ",[126,111169,111170],{},"data.qpos[1] = 0.3",[86,111172,111173],{},"重新运行，观察控制是否变差。",[86,111175,111176,111177,111179],{},"把 actuator ",[126,111178,107068],{}," 改小。",[86,111181,111182,111183,111186,111187,28386],{},"打印 ",[126,111184,111185],{},"model.nq, model.nv, model.nu","，应为 ",[126,111188,111189],{},"2 2 1",[86,111191,111192,111193,111195],{},"把 reward 里的 ",[126,111194,110761],{}," 系数改大，观察总奖励变化。",[86,111197,111198],{},"把控制器改成反号，观察杆子是否更容易倒。",[86,111200,111201],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[71,111203,102454],{"id":102453},[100,111205,111206],{"id":111206},"杆子方向和预期不一致",[14,111208,102397,111209,111211,111212,111214],{},[126,111210,106240],{}," 和 capsule 的 ",[126,111213,103177],{},"，必要时用 viewer 可视化确认。",[100,111216,111217],{"id":111217},"控制器越控越倒",[14,111219,111220],{},"说明反馈符号可能反了，尝试:",[120,111222,111224],{"className":30379,"code":111223,"language":30381,"meta":42,"style":42},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[126,111225,111226],{"__ignoreMap":42},[129,111227,111228,111230,111232,111234,111236,111238,111240,111242,111244,111246],{"class":131,"line":132},[129,111229,107443],{"class":139},[129,111231,185],{"class":135},[129,111233,52272],{"class":135},[129,111235,105261],{"class":188},[129,111237,6533],{"class":135},[129,111239,109821],{"class":139},[129,111241,671],{"class":135},[129,111243,61868],{"class":188},[129,111245,6533],{"class":135},[129,111247,110241],{"class":139},[100,111249,111250],{"id":111250},"小车飞走",[14,111252,111253,111254,111256,111257,111260],{},"降低 ",[126,111255,107068],{}," 或缩小 ",[126,111258,111259],{},"action"," 的 clip 范围。",[100,111262,111264,111266],{"id":111263},"obs3-为什么是杆子角速度",[126,111265,110900],{}," 为什么是杆子角速度",[14,111268,111269],{},"因为这个模型里：",[120,111271,111274],{"className":111272,"code":111273,"language":5202,"meta":42},[5200],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[126,111275,111273],{"__ignoreMap":42},[14,111277,109748],{},[120,111279,111282],{"className":111280,"code":111281,"language":5202,"meta":42},[5200],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[126,111283,111281],{"__ignoreMap":42},[100,111285,111287],{"id":111286},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111289,111290],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[71,111292,102608],{"id":102607},[14,111294,111295],{},"一个控制任务通常包含：",[83,111297,111298,111301,111309,111314,111317],{},[86,111299,111300],{},"模型：Cartpole 的 body、joint、actuator。",[86,111302,111303,111304,352,111306,111308],{},"观测：从 ",[126,111305,104031],{},[126,111307,104361],{}," 里取状态。",[86,111310,111311,111312,28386],{},"动作：写入 ",[126,111313,101077],{},[86,111315,111316],{},"奖励：根据任务目标打分。",[86,111318,111319],{},"循环：obs -> action -> step -> reward。",[14,111321,111322],{},"这就是后面 Gymnasium 环境的基本骨架。",[5141,111324,104287],{},{"title":42,"searchDepth":51,"depth":51,"links":111326},[111327,111328,111329,111334,111338,111339,111340,111348],{"id":100647,"depth":51,"text":100648},{"id":100770,"depth":51,"text":100771},{"id":101045,"depth":51,"text":101046,"children":111330},[111331,111332,111333],{"id":109701,"depth":1194,"text":109702},{"id":109766,"depth":1194,"text":109767},{"id":109782,"depth":1194,"text":109783},{"id":101253,"depth":51,"text":101254,"children":111335},[111336,111337],{"id":101573,"depth":1194,"text":101573},{"id":101709,"depth":1194,"text":101709},{"id":102316,"depth":51,"text":102317},{"id":102348,"depth":51,"text":102349},{"id":102453,"depth":51,"text":102454,"children":111341},[111342,111343,111344,111345,111347],{"id":111206,"depth":1194,"text":111206},{"id":111217,"depth":1194,"text":111217},{"id":111250,"depth":1194,"text":111250},{"id":111263,"depth":1194,"text":111346},"obs[3] 为什么是杆子角速度",{"id":111286,"depth":1194,"text":111287},{"id":102607,"depth":51,"text":102608},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109437,"description":42},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111355,"title":111356,"body":111357,"description":42,"extension":54,"meta":113371,"navigation":56,"path":113372,"seo":113373,"stem":113374,"__hash__":113375},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111358,"toc":113347},[111359,111362,111364,111367,111369,111386,111389,111392,111398,111401,111403,111405,111429,111431,111445,111447,111488,111490,111508,111510,111513,111519,111522,111550,111554,111560,111585,111588,111619,111626,111629,111632,111638,111641,111647,111650,111656,111660,111663,111688,111691,111693,112453,112455,112467,112469,112480,112482,112485,112502,112505,112507,112518,112521,112523,112569,112572,112585,112588,112670,112673,112675,112691,112701,112714,112717,112756,112766,112777,112787,112800,112803,112832,112835,112845,112848,112854,112871,112882,112884,112890,112907,112918,112939,112942,112954,112957,112978,112981,112989,112997,113014,113017,113086,113093,113101,113104,113117,113124,113126,113129,113135,113138,113141,113147,113153,113155,113195,113197,113203,113212,113215,113217,113237,113240,113243,113249,113253,113255,113282,113285,113288,113315,113321,113324,113327,113329,113332,113335,113341,113344],[10,111360,111356],{"id":111361},"_7控制任务reacher-机械臂到达目标",[71,111363,100648],{"id":100647},[14,111365,111366],{},"本章搭建一个二维两关节 reacher 任务。",[14,111368,104332],{},[83,111370,111371,111374,111377,111380,111383],{},[86,111372,111373],{},"两个 hinge joint",[86,111375,111376],{},"两个 motor actuator",[86,111378,111379],{},"site 作为末端点和目标点",[86,111381,111382],{},"根据末端和目标距离设计 reward",[86,111384,111385],{},"构造机械臂任务的基本形式",[14,111387,111388],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111390,111391],{},"Reacher 任务可以理解为：",[120,111393,111396],{"className":111394,"code":111395,"language":5202,"meta":42},[5200],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[126,111397,111395],{"__ignoreMap":42},[14,111399,111400],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[71,111402,100771],{"id":100770},[14,111404,100774],{},[120,111406,111407],{"className":23837,"code":104389,"language":23839,"meta":42,"style":42},[126,111408,111409],{"__ignoreMap":42},[129,111410,111411,111413,111415,111417,111419,111421,111423,111425,111427],{"class":131,"line":132},[129,111412,24577],{"class":1977},[129,111414,26316],{"class":244},[129,111416,23849],{"class":244},[129,111418,26401],{"class":188},[129,111420,104404],{"class":244},[129,111422,100799],{"class":244},[129,111424,102502],{"class":244},[129,111426,100815],{"class":244},[129,111428,104413],{"class":244},[14,111430,102820],{},[120,111432,111433],{"className":23837,"code":100920,"language":23839,"meta":42,"style":42},[126,111434,111435],{"__ignoreMap":42},[129,111436,111437,111439,111441,111443],{"class":131,"line":132},[129,111438,23846],{"class":1977},[129,111440,23849],{"class":244},[129,111442,100931],{"class":244},[129,111444,100934],{"class":244},[14,111446,102837],{},[120,111448,111450],{"className":23837,"code":111449,"language":23839,"meta":42,"style":42},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[126,111451,111452,111469,111478],{"__ignoreMap":42},[129,111453,111454,111456,111458,111460,111463,111465,111467],{"class":131,"line":132},[129,111455,30331],{"class":1977},[129,111457,29177],{"class":244},[129,111459,25116],{"class":188},[129,111461,111462],{"class":244}," mujoco-reacher",[129,111464,100976],{"class":244},[129,111466,100979],{"class":188},[129,111468,100982],{"class":188},[129,111470,111471,111473,111475],{"class":131,"line":51},[129,111472,30331],{"class":1977},[129,111474,100989],{"class":244},[129,111476,111477],{"class":244}," mujoco-reacher\n",[129,111479,111480,111482,111484,111486],{"class":131,"line":1194},[129,111481,23846],{"class":1977},[129,111483,23849],{"class":244},[129,111485,100931],{"class":244},[129,111487,100934],{"class":244},[14,111489,101005],{},[83,111491,111492,111495,111498],{},[86,111493,111494],{},"本章使用低维状态，不使用图像输入。",[86,111496,111497],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[86,111499,111500,111501,352,111503,352,111505,111507],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[126,111502,104031],{},[126,111504,104361],{},[126,111506,103681],{}," 的方法一致。",[71,111509,101046],{"id":101045},[14,111511,111512],{},"Reacher 任务核心:",[120,111514,111517],{"className":111515,"code":111516,"language":5202,"meta":42},[5200],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[126,111518,111516],{"__ignoreMap":42},[14,111520,111521],{},"读取 site 世界坐标:",[120,111523,111525],{"className":30379,"code":111524,"language":30381,"meta":42,"style":42},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[126,111526,111527,111540],{"__ignoreMap":42},[129,111528,111529,111531,111533,111535,111538],{"class":131,"line":132},[129,111530,103635],{"class":139},[129,111532,185],{"class":135},[129,111534,103406],{"class":139},[129,111536,111537],{"class":244},"\"tip\"",[129,111539,146],{"class":139},[129,111541,111542,111545,111547],{"class":131,"line":51},[129,111543,111544],{"class":139},"tip_pos ",[129,111546,185],{"class":135},[129,111548,111549],{"class":139}," data.site_xpos[site_id]\n",[100,111551,111553],{"id":111552},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111555,111556,111557,111559],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[126,111558,104031],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[120,111561,111563],{"className":30379,"code":111562,"language":30381,"meta":42,"style":42},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[126,111564,111565,111575],{"__ignoreMap":42},[129,111566,111567,111570,111572],{"class":131,"line":132},[129,111568,111569],{"class":139},"tip ",[129,111571,185],{"class":135},[129,111573,111574],{"class":139}," data.site_xpos[tip_site_id]\n",[129,111576,111577,111580,111582],{"class":131,"line":51},[129,111578,111579],{"class":139},"target ",[129,111581,185],{"class":135},[129,111583,111584],{"class":139}," data.site_xpos[target_site_id]\n",[14,111586,111587],{},"这样 reward 就很容易写：",[120,111589,111591],{"className":30379,"code":111590,"language":30381,"meta":42,"style":42},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[126,111592,111593,111608],{"__ignoreMap":42},[129,111594,111595,111598,111600,111603,111605],{"class":131,"line":132},[129,111596,111597],{"class":139},"dist ",[129,111599,185],{"class":135},[129,111601,111602],{"class":139}," np.linalg.norm(tip ",[129,111604,671],{"class":135},[129,111606,111607],{"class":139}," target)\n",[129,111609,111610,111612,111614,111616],{"class":131,"line":51},[129,111611,111006],{"class":139},[129,111613,185],{"class":135},[129,111615,52272],{"class":135},[129,111617,111618],{"class":139},"dist\n",[14,111620,111621,111622,111625],{},"距离越小，",[126,111623,111624],{},"-dist"," 越接近 0，奖励越高。",[100,111627,111628],{"id":111628},"两关节机械臂的状态",[14,111630,111631],{},"这个模型有两个 hinge joint：",[120,111633,111636],{"className":111634,"code":111635,"language":5202,"meta":42},[5200],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[126,111637,111635],{"__ignoreMap":42},[14,111639,111640],{},"再加上末端和目标位置：",[120,111642,111645],{"className":111643,"code":111644,"language":5202,"meta":42},[5200],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[126,111646,111644],{"__ignoreMap":42},[14,111648,111649],{},"总维度：",[120,111651,111654],{"className":111652,"code":111653,"language":5202,"meta":42},[5200],"2 + 2 + 3 + 3 = 10\n",[126,111655,111653],{"__ignoreMap":42},[100,111657,111659],{"id":111658},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111661,111662],{},"本章把重力设为：",[120,111664,111666],{"className":53068,"code":111665,"language":53070,"meta":42,"style":42},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[126,111667,111668],{"__ignoreMap":42},[129,111669,111670,111672,111674,111676,111678,111680,111682,111684,111686],{"class":131,"line":132},[129,111671,1049],{"class":139},[129,111673,69167],{"class":51301},[129,111675,101195],{"class":1977},[129,111677,185],{"class":139},[129,111679,101200],{"class":244},[129,111681,101203],{"class":1977},[129,111683,185],{"class":139},[129,111685,103772],{"class":244},[129,111687,101145],{"class":139},[14,111689,111690],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[71,111692,101254],{"id":101253},[120,111694,111696],{"className":30379,"code":111695,"language":30381,"meta":42,"style":42},"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",[126,111697,111698,111704,111714,111718,111722,111730,111735,111740,111744,111748,111753,111758,111762,111767,111772,111777,111781,111786,111791,111796,111801,111805,111809,111813,111817,111821,111826,111831,111835,111839,111843,111847,111851,111866,111875,111887,111910,111917,111921,111925,111935,111949,111963,111970,111974,111978,111992,112004,112016,112029,112044,112061,112065,112069,112081,112093,112101,112109,112113,112129,112134,112147,112160,112175,112179,112214,112246,112250,112254,112263,112267,112283,112293,112304,112320,112336,112352,112368,112372,112390,112410,112429,112433,112437,112449],{"__ignoreMap":42},[129,111699,111700,111702],{"class":131,"line":132},[129,111701,30393],{"class":135},[129,111703,101302],{"class":139},[129,111705,111706,111708,111710,111712],{"class":131,"line":51},[129,111707,30393],{"class":135},[129,111709,31381],{"class":139},[129,111711,31384],{"class":135},[129,111713,31387],{"class":139},[129,111715,111716],{"class":131,"line":1194},[129,111717,2414],{"emptyLinePlaceholder":56},[129,111719,111720],{"class":131,"line":1209},[129,111721,2414],{"emptyLinePlaceholder":56},[129,111723,111724,111726,111728],{"class":131,"line":1215},[129,111725,101315],{"class":188},[129,111727,13579],{"class":135},[129,111729,101320],{"class":244},[129,111731,111732],{"class":131,"line":1229},[129,111733,111734],{"class":244},"\u003Cmujoco model=\"two_link_reacher\">\n",[129,111736,111737],{"class":131,"line":1235},[129,111738,111739],{"class":244},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[129,111741,111742],{"class":131,"line":1326},[129,111743,2414],{"emptyLinePlaceholder":56},[129,111745,111746],{"class":131,"line":1332},[129,111747,101339],{"class":244},[129,111749,111750],{"class":131,"line":1344},[129,111751,111752],{"class":244},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[129,111754,111755],{"class":131,"line":1626},[129,111756,111757],{"class":244},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[129,111759,111760],{"class":131,"line":1631},[129,111761,2414],{"emptyLinePlaceholder":56},[129,111763,111764],{"class":131,"line":1637},[129,111765,111766],{"class":244},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[129,111768,111769],{"class":131,"line":1642},[129,111770,111771],{"class":244},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[129,111773,111774],{"class":131,"line":1656},[129,111775,111776],{"class":244},"      \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",[129,111778,111779],{"class":131,"line":1661},[129,111780,2414],{"emptyLinePlaceholder":56},[129,111782,111783],{"class":131,"line":1667},[129,111784,111785],{"class":244},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[129,111787,111788],{"class":131,"line":1688},[129,111789,111790],{"class":244},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[129,111792,111793],{"class":131,"line":1693},[129,111794,111795],{"class":244},"        \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",[129,111797,111798],{"class":131,"line":1707},[129,111799,111800],{"class":244},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[129,111802,111803],{"class":131,"line":1712},[129,111804,106439],{"class":244},[129,111806,111807],{"class":131,"line":1741},[129,111808,101368],{"class":244},[129,111810,111811],{"class":131,"line":1746},[129,111812,101373],{"class":244},[129,111814,111815],{"class":131,"line":1763},[129,111816,2414],{"emptyLinePlaceholder":56},[129,111818,111819],{"class":131,"line":1768},[129,111820,106456],{"class":244},[129,111822,111823],{"class":131,"line":1773},[129,111824,111825],{"class":244},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[129,111827,111828],{"class":131,"line":1778},[129,111829,111830],{"class":244},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[129,111832,111833],{"class":131,"line":1792},[129,111834,106466],{"class":244},[129,111836,111837],{"class":131,"line":1797},[129,111838,101378],{"class":244},[129,111840,111841],{"class":131,"line":2591},[129,111842,95699],{"class":244},[129,111844,111845],{"class":131,"line":2605},[129,111846,2414],{"emptyLinePlaceholder":56},[129,111848,111849],{"class":131,"line":2613},[129,111850,2414],{"emptyLinePlaceholder":56},[129,111852,111853,111855,111858,111861,111863],{"class":131,"line":2618},[129,111854,31948],{"class":135},[129,111856,111857],{"class":1977}," site_position",[129,111859,111860],{"class":139},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[129,111862,1314],{"class":188},[129,111864,111865],{"class":139},") -> np.ndarray:\n",[129,111867,111868,111870,111872],{"class":131,"line":2624},[129,111869,103401],{"class":139},[129,111871,185],{"class":135},[129,111873,111874],{"class":139}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[129,111876,111877,111879,111881,111883,111885],{"class":131,"line":2630},[129,111878,3115],{"class":135},[129,111880,103450],{"class":139},[129,111882,1049],{"class":135},[129,111884,4107],{"class":188},[129,111886,3753],{"class":139},[129,111888,111889,111891,111893,111895,111897,111900,111902,111904,111906,111908],{"class":131,"line":2635},[129,111890,103433],{"class":135},[129,111892,103436],{"class":188},[129,111894,140],{"class":139},[129,111896,192],{"class":135},[129,111898,111899],{"class":244},"\"site not found: ",[129,111901,1035],{"class":188},[129,111903,79811],{"class":139},[129,111905,1085],{"class":188},[129,111907,390],{"class":244},[129,111909,146],{"class":139},[129,111911,111912,111914],{"class":131,"line":7963},[129,111913,4104],{"class":135},[129,111915,111916],{"class":139}," data.site_xpos[site_id].copy()\n",[129,111918,111919],{"class":131,"line":7987},[129,111920,2414],{"emptyLinePlaceholder":56},[129,111922,111923],{"class":131,"line":7992},[129,111924,2414],{"emptyLinePlaceholder":56},[129,111926,111927,111929,111932],{"class":131,"line":7998},[129,111928,31948],{"class":135},[129,111930,111931],{"class":1977}," get_obs",[129,111933,111934],{"class":139},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[129,111936,111937,111940,111942,111945,111947],{"class":131,"line":8025},[129,111938,111939],{"class":139},"    tip ",[129,111941,185],{"class":135},[129,111943,111944],{"class":139}," site_position(model, data, ",[129,111946,111537],{"class":244},[129,111948,146],{"class":139},[129,111950,111951,111954,111956,111958,111961],{"class":131,"line":8030},[129,111952,111953],{"class":139},"    target ",[129,111955,185],{"class":135},[129,111957,111944],{"class":139},[129,111959,111960],{"class":244},"\"target\"",[129,111962,146],{"class":139},[129,111964,111965,111967],{"class":131,"line":8036},[129,111966,4104],{"class":135},[129,111968,111969],{"class":139}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[129,111971,111972],{"class":131,"line":8048},[129,111973,2414],{"emptyLinePlaceholder":56},[129,111975,111976],{"class":131,"line":8060},[129,111977,2414],{"emptyLinePlaceholder":56},[129,111979,111980,111982,111985,111988,111990],{"class":131,"line":8072},[129,111981,31948],{"class":135},[129,111983,111984],{"class":1977}," reward",[129,111986,111987],{"class":139},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[129,111989,179],{"class":188},[129,111991,3753],{"class":139},[129,111993,111994,111996,111998,112000,112002],{"class":131,"line":9731},[129,111995,111939],{"class":139},[129,111997,185],{"class":135},[129,111999,111944],{"class":139},[129,112001,111537],{"class":244},[129,112003,146],{"class":139},[129,112005,112006,112008,112010,112012,112014],{"class":131,"line":9756},[129,112007,111953],{"class":139},[129,112009,185],{"class":135},[129,112011,111944],{"class":139},[129,112013,111960],{"class":244},[129,112015,146],{"class":139},[129,112017,112018,112021,112023,112025,112027],{"class":131,"line":9779},[129,112019,112020],{"class":139},"    dist ",[129,112022,185],{"class":135},[129,112024,111602],{"class":139},[129,112026,671],{"class":135},[129,112028,111607],{"class":139},[129,112030,112031,112034,112036,112039,112041],{"class":131,"line":9803},[129,112032,112033],{"class":139},"    control_cost ",[129,112035,185],{"class":135},[129,112037,112038],{"class":188}," 0.01",[129,112040,6533],{"class":135},[129,112042,112043],{"class":139}," np.sum(np.square(data.ctrl))\n",[129,112045,112046,112048,112050,112052,112054,112056,112058],{"class":131,"line":9808},[129,112047,4104],{"class":135},[129,112049,109798],{"class":188},[129,112051,140],{"class":139},[129,112053,671],{"class":135},[129,112055,111597],{"class":139},[129,112057,671],{"class":135},[129,112059,112060],{"class":139}," control_cost)\n",[129,112062,112063],{"class":131,"line":9813},[129,112064,2414],{"emptyLinePlaceholder":56},[129,112066,112067],{"class":131,"line":9818},[129,112068,2414],{"emptyLinePlaceholder":56},[129,112070,112071,112073,112075,112077,112079],{"class":131,"line":9827},[129,112072,31948],{"class":135},[129,112074,1987],{"class":1977},[129,112076,101399],{"class":139},[129,112078,95687],{"class":188},[129,112080,3753],{"class":139},[129,112082,112083,112085,112087,112089,112091],{"class":131,"line":9832},[129,112084,101408],{"class":139},[129,112086,185],{"class":135},[129,112088,101413],{"class":139},[129,112090,101315],{"class":188},[129,112092,146],{"class":139},[129,112094,112095,112097,112099],{"class":131,"line":9838},[129,112096,101422],{"class":139},[129,112098,185],{"class":135},[129,112100,101427],{"class":139},[129,112102,112103,112105,112107],{"class":131,"line":9859},[129,112104,110154],{"class":139},[129,112106,185],{"class":135},[129,112108,104762],{"class":188},[129,112110,112111],{"class":131,"line":9865},[129,112112,2414],{"emptyLinePlaceholder":56},[129,112114,112115,112117,112119,112121,112123,112125,112127],{"class":131,"line":9879},[129,112116,3215],{"class":135},[129,112118,31617],{"class":139},[129,112120,26044],{"class":135},[129,112122,32444],{"class":188},[129,112124,140],{"class":139},[129,112126,65075],{"class":188},[129,112128,30787],{"class":139},[129,112130,112131],{"class":131,"line":9885},[129,112132,112133],{"class":139},"        mujoco.mj_forward(model, data)\n",[129,112135,112136,112139,112141,112143,112145],{"class":131,"line":9912},[129,112137,112138],{"class":139},"        tip ",[129,112140,185],{"class":135},[129,112142,111944],{"class":139},[129,112144,111537],{"class":244},[129,112146,146],{"class":139},[129,112148,112149,112152,112154,112156,112158],{"class":131,"line":9921},[129,112150,112151],{"class":139},"        target ",[129,112153,185],{"class":135},[129,112155,111944],{"class":139},[129,112157,111960],{"class":244},[129,112159,146],{"class":139},[129,112161,112162,112165,112167,112170,112172],{"class":131,"line":9927},[129,112163,112164],{"class":139},"        error ",[129,112166,185],{"class":135},[129,112168,112169],{"class":139}," target ",[129,112171,671],{"class":135},[129,112173,112174],{"class":139}," tip\n",[129,112176,112177],{"class":131,"line":9935},[129,112178,2414],{"emptyLinePlaceholder":56},[129,112180,112181,112183,112185,112187,112189,112192,112194,112196,112199,112201,112204,112206,112208,112210,112212],{"class":131,"line":9940},[129,112182,106618],{"class":139},[129,112184,331],{"class":188},[129,112186,4457],{"class":139},[129,112188,185],{"class":135},[129,112190,112191],{"class":139}," np.clip(",[129,112193,105261],{"class":188},[129,112195,6533],{"class":135},[129,112197,112198],{"class":139}," error[",[129,112200,217],{"class":188},[129,112202,112203],{"class":139},"], ",[129,112205,671],{"class":135},[129,112207,102404],{"class":188},[129,112209,12450],{"class":139},[129,112211,102404],{"class":188},[129,112213,146],{"class":139},[129,112215,112216,112218,112220,112222,112224,112226,112228,112230,112232,112234,112236,112238,112240,112242,112244],{"class":131,"line":16619},[129,112217,106618],{"class":139},[129,112219,357],{"class":188},[129,112221,4457],{"class":139},[129,112223,185],{"class":135},[129,112225,112191],{"class":139},[129,112227,105261],{"class":188},[129,112229,6533],{"class":135},[129,112231,112198],{"class":139},[129,112233,331],{"class":188},[129,112235,112203],{"class":139},[129,112237,671],{"class":135},[129,112239,102404],{"class":188},[129,112241,12450],{"class":139},[129,112243,102404],{"class":188},[129,112245,146],{"class":139},[129,112247,112248],{"class":131,"line":16625},[129,112249,2414],{"emptyLinePlaceholder":56},[129,112251,112252],{"class":131,"line":16648},[129,112253,101517],{"class":139},[129,112255,112256,112258,112260],{"class":131,"line":16654},[129,112257,110298],{"class":139},[129,112259,9492],{"class":135},[129,112261,112262],{"class":139}," reward(model, data)\n",[129,112264,112265],{"class":131,"line":16677},[129,112266,2414],{"emptyLinePlaceholder":56},[129,112268,112269,112271,112273,112275,112277,112279,112281],{"class":131,"line":16691},[129,112270,2511],{"class":135},[129,112272,31617],{"class":139},[129,112274,467],{"class":135},[129,112276,5769],{"class":188},[129,112278,101560],{"class":135},[129,112280,4107],{"class":188},[129,112282,3753],{"class":139},[129,112284,112285,112288,112290],{"class":131,"line":16711},[129,112286,112287],{"class":139},"            obs ",[129,112289,185],{"class":135},[129,112291,112292],{"class":139}," get_obs(model, data)\n",[129,112294,112295,112297,112299,112301],{"class":131,"line":16717},[129,112296,34651],{"class":188},[129,112298,140],{"class":139},[129,112300,110332],{"class":244},[129,112302,112303],{"class":139},", step)\n",[129,112305,112306,112308,112310,112313,112316,112318],{"class":131,"line":16728},[129,112307,34651],{"class":188},[129,112309,140],{"class":139},[129,112311,112312],{"class":244},"\"  tip:\"",[129,112314,112315],{"class":139},", np.round(tip, ",[129,112317,211],{"class":188},[129,112319,30498],{"class":139},[129,112321,112322,112324,112326,112329,112332,112334],{"class":131,"line":16751},[129,112323,34651],{"class":188},[129,112325,140],{"class":139},[129,112327,112328],{"class":244},"\"  target:\"",[129,112330,112331],{"class":139},", np.round(target, ",[129,112333,211],{"class":188},[129,112335,30498],{"class":139},[129,112337,112338,112340,112342,112345,112348,112350],{"class":131,"line":16773},[129,112339,34651],{"class":188},[129,112341,140],{"class":139},[129,112343,112344],{"class":244},"\"  ctrl:\"",[129,112346,112347],{"class":139},", np.round(data.ctrl.copy(), ",[129,112349,211],{"class":188},[129,112351,30498],{"class":139},[129,112353,112354,112356,112358,112361,112364,112366],{"class":131,"line":16778},[129,112355,34651],{"class":188},[129,112357,140],{"class":139},[129,112359,112360],{"class":244},"\"  obs_dim:\"",[129,112362,112363],{"class":139},", obs.shape[",[129,112365,331],{"class":188},[129,112367,4671],{"class":139},[129,112369,112370],{"class":131,"line":16784},[129,112371,2414],{"emptyLinePlaceholder":56},[129,112373,112374,112376,112378,112380,112382,112384,112386,112388],{"class":131,"line":16798},[129,112375,31300],{"class":188},[129,112377,140],{"class":139},[129,112379,110377],{"class":244},[129,112381,12450],{"class":139},[129,112383,32019],{"class":188},[129,112385,110384],{"class":139},[129,112387,211],{"class":188},[129,112389,30498],{"class":139},[129,112391,112392,112394,112396,112399,112402,112404,112406,112408],{"class":131,"line":16811},[129,112393,31300],{"class":188},[129,112395,140],{"class":139},[129,112397,112398],{"class":244},"\"final tip:\"",[129,112400,112401],{"class":139},", np.round(site_position(model, data, ",[129,112403,111537],{"class":244},[129,112405,110346],{"class":139},[129,112407,211],{"class":188},[129,112409,30498],{"class":139},[129,112411,112412,112414,112416,112419,112421,112423,112425,112427],{"class":131,"line":16816},[129,112413,31300],{"class":188},[129,112415,140],{"class":139},[129,112417,112418],{"class":244},"\"target:\"",[129,112420,112401],{"class":139},[129,112422,111960],{"class":244},[129,112424,110346],{"class":139},[129,112426,211],{"class":188},[129,112428,30498],{"class":139},[129,112430,112431],{"class":131,"line":16830},[129,112432,2414],{"emptyLinePlaceholder":56},[129,112434,112435],{"class":131,"line":16835},[129,112436,2414],{"emptyLinePlaceholder":56},[129,112438,112439,112441,112443,112445,112447],{"class":131,"line":16841},[129,112440,1545],{"class":135},[129,112442,31221],{"class":188},[129,112444,101560],{"class":135},[129,112446,101563],{"class":244},[129,112448,3753],{"class":139},[129,112450,112451],{"class":131,"line":16846},[129,112452,101570],{"class":139},[14,112454,103571],{},[120,112456,112458],{"className":23837,"code":112457,"language":23839,"meta":42,"style":42},"touch ch7_reacher.py\n",[126,112459,112460],{"__ignoreMap":42},[129,112461,112462,112464],{"class":131,"line":132},[129,112463,101284],{"class":1977},[129,112465,112466],{"class":244}," ch7_reacher.py\n",[14,112468,110445],{},[120,112470,112472],{"className":23837,"code":112471,"language":23839,"meta":42,"style":42},"python ch7_reacher.py\n",[126,112473,112474],{"__ignoreMap":42},[129,112475,112476,112478],{"class":131,"line":132},[129,112477,30381],{"class":1977},[129,112479,112466],{"class":244},[100,112481,101573],{"id":101573},[14,112483,112484],{},"读取 site 坐标：",[120,112486,112488],{"className":30379,"code":112487,"language":30381,"meta":42,"style":42},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[126,112489,112490],{"__ignoreMap":42},[129,112491,112492,112494,112496,112498,112500],{"class":131,"line":132},[129,112493,31948],{"class":135},[129,112495,111857],{"class":1977},[129,112497,111860],{"class":139},[129,112499,1314],{"class":188},[129,112501,111865],{"class":139},[14,112503,112504],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112506,110461],{},[120,112508,112510],{"className":30379,"code":112509,"language":30381,"meta":42,"style":42},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[126,112511,112512],{"__ignoreMap":42},[129,112513,112514,112516],{"class":131,"line":132},[129,112515,17061],{"class":135},[129,112517,111969],{"class":139},[14,112519,112520],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112522,109786],{},[120,112524,112526],{"className":30379,"code":112525,"language":30381,"meta":42,"style":42},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[126,112527,112528,112540,112553],{"__ignoreMap":42},[129,112529,112530,112532,112534,112536,112538],{"class":131,"line":132},[129,112531,111597],{"class":139},[129,112533,185],{"class":135},[129,112535,111602],{"class":139},[129,112537,671],{"class":135},[129,112539,111607],{"class":139},[129,112541,112542,112545,112547,112549,112551],{"class":131,"line":51},[129,112543,112544],{"class":139},"control_cost ",[129,112546,185],{"class":135},[129,112548,112038],{"class":188},[129,112550,6533],{"class":135},[129,112552,112043],{"class":139},[129,112554,112555,112557,112559,112561,112563,112565,112567],{"class":131,"line":1194},[129,112556,17061],{"class":135},[129,112558,109798],{"class":188},[129,112560,140],{"class":139},[129,112562,671],{"class":135},[129,112564,111597],{"class":139},[129,112566,671],{"class":135},[129,112568,112060],{"class":139},[14,112570,112571],{},"奖励由两部分组成：",[83,112573,112574,112579],{},[86,112575,112576,112578],{},[126,112577,111624],{},"：末端离目标越远，奖励越低。",[86,112580,112581,112584],{},[126,112582,112583],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112586,112587],{},"简单控制器：",[120,112589,112591],{"className":30379,"code":112590,"language":30381,"meta":42,"style":42},"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",[126,112592,112593,112606,112638],{"__ignoreMap":42},[129,112594,112595,112598,112600,112602,112604],{"class":131,"line":132},[129,112596,112597],{"class":139},"error ",[129,112599,185],{"class":135},[129,112601,112169],{"class":139},[129,112603,671],{"class":135},[129,112605,112174],{"class":139},[129,112607,112608,112610,112612,112614,112616,112618,112620,112622,112624,112626,112628,112630,112632,112634,112636],{"class":131,"line":51},[129,112609,105872],{"class":139},[129,112611,331],{"class":188},[129,112613,4457],{"class":139},[129,112615,185],{"class":135},[129,112617,112191],{"class":139},[129,112619,105261],{"class":188},[129,112621,6533],{"class":135},[129,112623,112198],{"class":139},[129,112625,217],{"class":188},[129,112627,112203],{"class":139},[129,112629,671],{"class":135},[129,112631,102404],{"class":188},[129,112633,12450],{"class":139},[129,112635,102404],{"class":188},[129,112637,146],{"class":139},[129,112639,112640,112642,112644,112646,112648,112650,112652,112654,112656,112658,112660,112662,112664,112666,112668],{"class":131,"line":1194},[129,112641,105872],{"class":139},[129,112643,357],{"class":188},[129,112645,4457],{"class":139},[129,112647,185],{"class":135},[129,112649,112191],{"class":139},[129,112651,105261],{"class":188},[129,112653,6533],{"class":135},[129,112655,112198],{"class":139},[129,112657,331],{"class":188},[129,112659,112203],{"class":139},[129,112661,671],{"class":135},[129,112663,102404],{"class":188},[129,112665,12450],{"class":139},[129,112667,102404],{"class":188},[129,112669,146],{"class":139},[14,112671,112672],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[100,112674,101709],{"id":101709},[120,112676,112677],{"className":30379,"code":112487,"language":30381,"meta":42,"style":42},[126,112678,112679],{"__ignoreMap":42},[129,112680,112681,112683,112685,112687,112689],{"class":131,"line":132},[129,112682,31948],{"class":135},[129,112684,111857],{"class":1977},[129,112686,111860],{"class":139},[129,112688,1314],{"class":188},[129,112690,111865],{"class":139},[14,112692,112693,112694,112696,112697,82540,112699,28386],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[126,112695,79811],{}," 是 site 的名字，比如 ",[126,112698,111537],{},[126,112700,111960],{},[120,112702,112704],{"className":30379,"code":112703,"language":30381,"meta":42,"style":42},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[126,112705,112706],{"__ignoreMap":42},[129,112707,112708,112710,112712],{"class":131,"line":132},[129,112709,103635],{"class":139},[129,112711,185],{"class":135},[129,112713,111874],{"class":139},[14,112715,112716],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[120,112718,112720],{"className":30379,"code":112719,"language":30381,"meta":42,"style":42},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[126,112721,112722,112734],{"__ignoreMap":42},[129,112723,112724,112726,112728,112730,112732],{"class":131,"line":132},[129,112725,1545],{"class":135},[129,112727,103450],{"class":139},[129,112729,1049],{"class":135},[129,112731,4107],{"class":188},[129,112733,3753],{"class":139},[129,112735,112736,112738,112740,112742,112744,112746,112748,112750,112752,112754],{"class":131,"line":51},[129,112737,103896],{"class":135},[129,112739,103436],{"class":188},[129,112741,140],{"class":139},[129,112743,192],{"class":135},[129,112745,111899],{"class":244},[129,112747,1035],{"class":188},[129,112749,79811],{"class":139},[129,112751,1085],{"class":188},[129,112753,390],{"class":244},[129,112755,146],{"class":139},[14,112757,112758,112759,112762,112763,112765],{},"如果 site 没找到，就主动报错。",[126,112760,112761],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[126,112764,79811],{}," 的值放进字符串里。",[120,112767,112769],{"className":30379,"code":112768,"language":30381,"meta":42,"style":42},"return data.site_xpos[site_id].copy()\n",[126,112770,112771],{"__ignoreMap":42},[129,112772,112773,112775],{"class":131,"line":132},[129,112774,17061],{"class":135},[129,112776,111916],{"class":139},[14,112778,112779,112780,112782,112783,112786],{},"返回这个 site 的世界坐标。",[126,112781,103681],{}," 里的每一行都是一个 site 的 ",[126,112784,112785],{},"(x, y, z)"," 坐标。",[120,112788,112790],{"className":30379,"code":112789,"language":30381,"meta":42,"style":42},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[126,112791,112792],{"__ignoreMap":42},[129,112793,112794,112796,112798],{"class":131,"line":132},[129,112795,31948],{"class":135},[129,112797,111931],{"class":1977},[129,112799,111934],{"class":139},[14,112801,112802],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[120,112804,112806],{"className":30379,"code":112805,"language":30381,"meta":42,"style":42},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[126,112807,112808,112820],{"__ignoreMap":42},[129,112809,112810,112812,112814,112816,112818],{"class":131,"line":132},[129,112811,111569],{"class":139},[129,112813,185],{"class":135},[129,112815,111944],{"class":139},[129,112817,111537],{"class":244},[129,112819,146],{"class":139},[129,112821,112822,112824,112826,112828,112830],{"class":131,"line":51},[129,112823,111579],{"class":139},[129,112825,185],{"class":135},[129,112827,111944],{"class":139},[129,112829,111960],{"class":244},[129,112831,146],{"class":139},[14,112833,112834],{},"分别读取末端点和目标点的世界坐标。",[120,112836,112837],{"className":30379,"code":112509,"language":30381,"meta":42,"style":42},[126,112838,112839],{"__ignoreMap":42},[129,112840,112841,112843],{"class":131,"line":132},[129,112842,17061],{"class":135},[129,112844,111969],{"class":139},[14,112846,112847],{},"把四部分拼成一个观测数组：",[120,112849,112852],{"className":112850,"code":112851,"language":5202,"meta":42},[5200],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[126,112853,112851],{"__ignoreMap":42},[120,112855,112857],{"className":30379,"code":112856,"language":30381,"meta":42,"style":42},"dist = np.linalg.norm(tip - target)\n",[126,112858,112859],{"__ignoreMap":42},[129,112860,112861,112863,112865,112867,112869],{"class":131,"line":132},[129,112862,111597],{"class":139},[129,112864,185],{"class":135},[129,112866,111602],{"class":139},[129,112868,671],{"class":135},[129,112870,111607],{"class":139},[14,112872,112873,112874,112877,112878,112881],{},"计算 tip 到 target 的距离。",[126,112875,112876],{},"tip - target"," 得到一个三维向量，",[126,112879,112880],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112883,14648],{},[120,112885,112888],{"className":112886,"code":112887,"language":5202,"meta":42},[5200],"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",[126,112889,112887],{"__ignoreMap":42},[120,112891,112893],{"className":30379,"code":112892,"language":30381,"meta":42,"style":42},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[126,112894,112895],{"__ignoreMap":42},[129,112896,112897,112899,112901,112903,112905],{"class":131,"line":132},[129,112898,112544],{"class":139},[129,112900,185],{"class":135},[129,112902,112038],{"class":188},[129,112904,6533],{"class":135},[129,112906,112043],{"class":139},[14,112908,112909,112910,112913,112914,112917],{},"计算动作惩罚。",[126,112911,112912],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[126,112915,112916],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[120,112919,112921],{"className":30379,"code":112920,"language":30381,"meta":42,"style":42},"return float(-dist - control_cost)\n",[126,112922,112923],{"__ignoreMap":42},[129,112924,112925,112927,112929,112931,112933,112935,112937],{"class":131,"line":132},[129,112926,17061],{"class":135},[129,112928,109798],{"class":188},[129,112930,140],{"class":139},[129,112932,671],{"class":135},[129,112934,111597],{"class":139},[129,112936,671],{"class":135},[129,112938,112060],{"class":139},[14,112940,112941],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[120,112943,112944],{"className":30379,"code":110804,"language":30381,"meta":42,"style":42},[126,112945,112946],{"__ignoreMap":42},[129,112947,112948,112950,112952],{"class":131,"line":132},[129,112949,110811],{"class":139},[129,112951,185],{"class":135},[129,112953,104762],{"class":188},[14,112955,112956],{},"累计奖励变量，记录整个运行过程的总分。",[120,112958,112960],{"className":30379,"code":112959,"language":30381,"meta":42,"style":42},"for step in range(500):\n",[126,112961,112962],{"__ignoreMap":42},[129,112963,112964,112966,112968,112970,112972,112974,112976],{"class":131,"line":132},[129,112965,3039],{"class":135},[129,112967,31617],{"class":139},[129,112969,26044],{"class":135},[129,112971,32444],{"class":188},[129,112973,140],{"class":139},[129,112975,65075],{"class":188},[129,112977,30787],{"class":139},[14,112979,112980],{},"运行 500 个控制步。",[120,112982,112983],{"className":30379,"code":104544,"language":30381,"meta":42,"style":42},[126,112984,112985],{"__ignoreMap":42},[129,112986,112987],{"class":131,"line":132},[129,112988,104544],{"class":139},[14,112990,112991,112992,101019,112994,112996],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[126,112993,103232],{},[126,112995,103235],{}," 是当前状态下的坐标。",[120,112998,113000],{"className":30379,"code":112999,"language":30381,"meta":42,"style":42},"error = target - tip\n",[126,113001,113002],{"__ignoreMap":42},[129,113003,113004,113006,113008,113010,113012],{"class":131,"line":132},[129,113005,112597],{"class":139},[129,113007,185],{"class":135},[129,113009,112169],{"class":139},[129,113011,671],{"class":135},[129,113013,112174],{"class":139},[14,113015,113016],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[120,113018,113020],{"className":30379,"code":113019,"language":30381,"meta":42,"style":42},"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",[126,113021,113022,113054],{"__ignoreMap":42},[129,113023,113024,113026,113028,113030,113032,113034,113036,113038,113040,113042,113044,113046,113048,113050,113052],{"class":131,"line":132},[129,113025,105872],{"class":139},[129,113027,331],{"class":188},[129,113029,4457],{"class":139},[129,113031,185],{"class":135},[129,113033,112191],{"class":139},[129,113035,105261],{"class":188},[129,113037,6533],{"class":135},[129,113039,112198],{"class":139},[129,113041,217],{"class":188},[129,113043,112203],{"class":139},[129,113045,671],{"class":135},[129,113047,102404],{"class":188},[129,113049,12450],{"class":139},[129,113051,102404],{"class":188},[129,113053,146],{"class":139},[129,113055,113056,113058,113060,113062,113064,113066,113068,113070,113072,113074,113076,113078,113080,113082,113084],{"class":131,"line":51},[129,113057,105872],{"class":139},[129,113059,357],{"class":188},[129,113061,4457],{"class":139},[129,113063,185],{"class":135},[129,113065,112191],{"class":139},[129,113067,105261],{"class":188},[129,113069,6533],{"class":135},[129,113071,112198],{"class":139},[129,113073,331],{"class":188},[129,113075,112203],{"class":139},[129,113077,671],{"class":135},[129,113079,102404],{"class":188},[129,113081,12450],{"class":139},[129,113083,102404],{"class":188},[129,113085,146],{"class":139},[14,113087,113088,113089,113092],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[126,113090,113091],{},"error -> ctrl -> step"," 的流程。",[120,113094,113095],{"className":30379,"code":104506,"language":30381,"meta":42,"style":42},[126,113096,113097],{"__ignoreMap":42},[129,113098,113099],{"class":131,"line":132},[129,113100,104506],{"class":139},[14,113102,113103],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[120,113105,113107],{"className":30379,"code":113106,"language":30381,"meta":42,"style":42},"obs = get_obs(model, data)\n",[126,113108,113109],{"__ignoreMap":42},[129,113110,113111,113113,113115],{"class":131,"line":132},[129,113112,110855],{"class":139},[129,113114,185],{"class":135},[129,113116,112292],{"class":139},[14,113118,113119,113120,113123],{},"读取最新观测。后面打印 ",[126,113121,113122],{},"obs.shape[0]","，用来确认观测维度是 10。",[71,113125,102317],{"id":102316},[14,113127,113128],{},"观测维度为:",[120,113130,113133],{"className":113131,"code":113132,"language":5202,"meta":42},[5200],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[126,113134,113132],{"__ignoreMap":42},[14,113136,113137],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113139,113140],{},"程序每 100 步打印：",[120,113142,113145],{"className":113143,"code":113144,"language":5202,"meta":42},[5200],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[126,113146,113144],{"__ignoreMap":42},[14,113148,113149,113150,113152],{},"如果控制有效，你应该看到最终 ",[126,113151,103232],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[71,113154,102349],{"id":102348},[83,113156,113157,113160,113163,113169,113175,113182,113192],{},[86,113158,113159],{},"修改目标点位置。",[86,113161,113162],{},"重新运行，观察最终 tip 是否变化。",[86,113164,113165,113166,113168],{},"把 gravity 改成 ",[126,113167,102590],{},"，观察控制是否变差。",[86,113170,111182,113171,111186,113173,28386],{},[126,113172,102159],{},[126,113174,217],{},[86,113176,102412,113177,102415,113179,113181],{},[126,113178,110597],{},[126,113180,107308],{},"，观察机械臂是否更难移动。",[86,113183,102412,113184,82531,113186,102415,113188,113191],{},[126,113185,103235],{},[126,113187,104147],{},[126,113189,113190],{},"0.2 0 0.6","，观察 reward 和 final tip。",[86,113193,113194],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[71,113196,102454],{"id":102453},[100,113198,113200],{"id":113199},"site-not-found",[126,113201,113202],{},"site not found",[14,113204,113205,113206,101019,113209,28386],{},"检查 XML 中是否有 ",[126,113207,113208],{},"site name=\"tip\"",[126,113210,113211],{},"site name=\"target\"",[100,113213,113214],{"id":113214},"机械臂完全不动",[14,113216,102524],{},[83,113218,113219,113224,113227,113232],{},[86,113220,113221,113223],{},[126,113222,102159],{}," 是否为 2",[86,113225,113226],{},"actuator 是否引用正确 joint",[86,113228,113229,113231],{},[126,113230,101077],{}," 是否被赋值",[86,113233,113234,113235],{},"是否执行了 ",[126,113236,100686],{},[100,113238,113239],{"id":113239},"控制效果不好",[14,113241,113242],{},"正常。本章重点不是控制器最优，而是任务结构:",[120,113244,113247],{"className":113245,"code":113246,"language":5202,"meta":42},[5200],"obs → action → mj_step → reward → next_obs\n",[126,113248,113246],{"__ignoreMap":42},[100,113250,113252],{"id":113251},"tip-坐标不变化","tip 坐标不变化",[14,113254,102576],{},[83,113256,113257,113262,113270,113279],{},[86,113258,113259,113260,28386],{},"是否每步调用了 ",[126,113261,100686],{},[86,113263,113264,113265,101019,113267,28386],{},"是否写入了 ",[126,113266,106127],{},[126,113268,113269],{},"data.ctrl[1]",[86,113271,113272,113273,352,113276,28386],{},"actuator 是否正确引用 ",[126,113274,113275],{},"joint1",[126,113277,113278],{},"joint2",[86,113280,113281],{},"控制输入是否太小。",[100,113283,113284],{"id":113284},"目标点不会动",[14,113286,113287],{},"本章的 target 是固定 site：",[120,113289,113291],{"className":53068,"code":113290,"language":53070,"meta":42,"style":42},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[126,113292,113293],{"__ignoreMap":42},[129,113294,113295,113297,113299,113301,113303,113305,113307,113309,113312],{"class":131,"line":132},[129,113296,1049],{"class":139},[129,113298,103211],{"class":51301},[129,113300,14935],{"class":1977},[129,113302,185],{"class":139},[129,113304,111960],{"class":244},[129,113306,101107],{"class":1977},[129,113308,185],{"class":139},[129,113310,113311],{"class":244},"\"0.5 0 0.4\"",[129,113313,113314],{"class":139}," ...\u002F>\n",[14,113316,113317,113318,113320],{},"它直接挂在 ",[126,113319,101842],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[100,113322,113323],{"id":113323},"机械臂不像真实机械臂",[14,113325,113326],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[71,113328,102608],{"id":102607},[14,113330,113331],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113333,113334],{},"核心公式：",[120,113336,113339],{"className":113337,"code":113338,"language":5202,"meta":42},[5200],"distance = ||tip - target||\nreward = -distance - action_cost\n",[126,113340,113338],{"__ignoreMap":42},[14,113342,113343],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5141,113345,113346],{},"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":42,"searchDepth":51,"depth":51,"links":113348},[113349,113350,113351,113356,113360,113361,113362,113370],{"id":100647,"depth":51,"text":100648},{"id":100770,"depth":51,"text":100771},{"id":101045,"depth":51,"text":101046,"children":113352},[113353,113354,113355],{"id":111552,"depth":1194,"text":111553},{"id":111628,"depth":1194,"text":111628},{"id":111658,"depth":1194,"text":111659},{"id":101253,"depth":51,"text":101254,"children":113357},[113358,113359],{"id":101573,"depth":1194,"text":101573},{"id":101709,"depth":1194,"text":101709},{"id":102316,"depth":51,"text":102317},{"id":102348,"depth":51,"text":102349},{"id":102453,"depth":51,"text":102454,"children":113363},[113364,113365,113366,113367,113368,113369],{"id":113199,"depth":1194,"text":113202},{"id":113214,"depth":1194,"text":113214},{"id":113239,"depth":1194,"text":113239},{"id":113251,"depth":1194,"text":113252},{"id":113284,"depth":1194,"text":113284},{"id":113323,"depth":1194,"text":113323},{"id":102607,"depth":51,"text":102608},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111356,"description":42},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113377,"title":113378,"body":113379,"description":42,"extension":54,"meta":116841,"navigation":56,"path":116842,"seo":116843,"stem":116844,"__hash__":116845},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113380,"toc":116812},[113381,113384,113386,113389,113392,113417,113420,113426,113429,113435,113437,113439,113463,113465,113483,113485,113528,113530,113557,113559,113562,113614,113617,113623,113632,113635,113673,113676,113715,113718,113726,113733,113736,113742,113744,113798,113805,113850,113853,113857,113873,113883,113885,115146,115148,115160,115162,115173,115175,115178,115199,115202,115205,115238,115244,115247,115280,115283,115286,115327,115332,115346,115349,115362,115367,115390,115392,115407,115417,115432,115439,115459,115474,115492,115495,115512,115520,115536,115542,115574,115587,115619,115629,115664,115678,115724,115738,115780,115791,115804,115810,115843,115846,115873,115883,115923,115933,115950,115957,115975,115978,116019,116032,116047,116050,116073,116076,116088,116091,116110,116115,116136,116139,116154,116157,116191,116203,116218,116221,116246,116249,116268,116271,116303,116306,116330,116336,116366,116373,116386,116389,116391,116393,116399,116402,116405,116417,116420,116422,116476,116478,116482,116488,116497,116500,116507,116509,116532,116535,116539,116541,116559,116565,116567,116600,116603,116609,116613,116616,116636,116641,116645,116652,116672,116677,116681,116684,116704,116707,116793,116797,116800,116806,116809],[10,113382,113378],{"id":113383},"_8gymnasium-风格强化学习接口基础",[71,113385,100648],{"id":100647},[14,113387,113388],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113390,113391],{},"你将实现:",[120,113393,113395],{"className":30379,"code":113394,"language":30381,"meta":42,"style":42},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[126,113396,113397,113407],{"__ignoreMap":42},[129,113398,113399,113402,113404],{"class":131,"line":132},[129,113400,113401],{"class":139},"obs, info ",[129,113403,185],{"class":135},[129,113405,113406],{"class":139}," env.reset()\n",[129,113408,113409,113412,113414],{"class":131,"line":51},[129,113410,113411],{"class":139},"obs, reward, terminated, truncated, info ",[129,113413,185],{"class":135},[129,113415,113416],{"class":139}," env.step(action)\n",[14,113418,113419],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113421,113422,113423,113425],{},"前面章节的代码都是“脚本式”的：在 ",[126,113424,102296],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113427,113428],{},"可以先记住 Gymnasium 环境的核心交互：",[120,113430,113433],{"className":113431,"code":113432,"language":5202,"meta":42},[5200],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[126,113434,113432],{"__ignoreMap":42},[71,113436,100771],{"id":100770},[14,113438,100774],{},[120,113440,113441],{"className":23837,"code":104389,"language":23839,"meta":42,"style":42},[126,113442,113443],{"__ignoreMap":42},[129,113444,113445,113447,113449,113451,113453,113455,113457,113459,113461],{"class":131,"line":132},[129,113446,24577],{"class":1977},[129,113448,26316],{"class":244},[129,113450,23849],{"class":244},[129,113452,26401],{"class":188},[129,113454,104404],{"class":244},[129,113456,100799],{"class":244},[129,113458,102502],{"class":244},[129,113460,100815],{"class":244},[129,113462,104413],{"class":244},[14,113464,102820],{},[120,113466,113468],{"className":23837,"code":113467,"language":23839,"meta":42,"style":42},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[126,113469,113470],{"__ignoreMap":42},[129,113471,113472,113474,113476,113478,113480],{"class":131,"line":132},[129,113473,23846],{"class":1977},[129,113475,23849],{"class":244},[129,113477,100931],{"class":244},[129,113479,107712],{"class":244},[129,113481,113482],{"class":244}," gymnasium\n",[14,113484,102837],{},[120,113486,113488],{"className":23837,"code":113487,"language":23839,"meta":42,"style":42},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[126,113489,113490,113507,113516],{"__ignoreMap":42},[129,113491,113492,113494,113496,113498,113501,113503,113505],{"class":131,"line":132},[129,113493,30331],{"class":1977},[129,113495,29177],{"class":244},[129,113497,25116],{"class":188},[129,113499,113500],{"class":244}," mujoco-gym-api",[129,113502,100976],{"class":244},[129,113504,100979],{"class":188},[129,113506,100982],{"class":188},[129,113508,113509,113511,113513],{"class":131,"line":51},[129,113510,30331],{"class":1977},[129,113512,100989],{"class":244},[129,113514,113515],{"class":244}," mujoco-gym-api\n",[129,113517,113518,113520,113522,113524,113526],{"class":131,"line":1194},[129,113519,23846],{"class":1977},[129,113521,23849],{"class":244},[129,113523,100931],{"class":244},[129,113525,107712],{"class":244},[129,113527,113482],{"class":244},[14,113529,101005],{},[83,113531,113532,113542,113545,113551],{},[86,113533,113534,113535,113538,113539,28386],{},"本章使用 ",[126,113536,113537],{},"gymnasium","，不是旧版 ",[126,113540,113541],{},"gym",[86,113543,113544],{},"Gymnasium API 与旧 Gym API 有差异。",[86,113546,113547,113548,28386],{},"旧 Gym 常见返回值是 4 个: ",[126,113549,113550],{},"obs, reward, done, info",[86,113552,113553,113554,28386],{},"Gymnasium 返回值是 5 个: ",[126,113555,113556],{},"obs, reward, terminated, truncated, info",[71,113558,101046],{"id":101045},[14,113560,113561],{},"强化学习环境接口包含:",[277,113563,113564,113573],{},[280,113565,113566],{},[283,113567,113568,113571],{},[286,113569,113570],{"align":23751},"方法",[286,113572,102697],{"align":23751},[324,113574,113575,113585,113595,113605],{},[283,113576,113577,113582],{},[329,113578,113579],{"align":23751},[126,113580,113581],{},"reset()",[329,113583,113584],{"align":23751},"重置环境",[283,113586,113587,113592],{},[329,113588,113589],{"align":23751},[126,113590,113591],{},"step(action)",[329,113593,113594],{"align":23751},"执行动作",[283,113596,113597,113602],{},[329,113598,113599],{"align":23751},[126,113600,113601],{},"observation_space",[329,113603,113604],{"align":23751},"观测空间",[283,113606,113607,113612],{},[329,113608,113609],{"align":23751},[126,113610,113611],{},"action_space",[329,113613,23669],{"align":23751},[14,113615,113616],{},"一个最小环境需要完成:",[120,113618,113621],{"className":113619,"code":113620,"language":5202,"meta":42},[5200],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[126,113622,113620],{"__ignoreMap":42},[100,113624,113626,101019,113629,104639],{"id":113625},"terminated-和-truncated-的区别",[126,113627,113628],{},"terminated",[126,113630,113631],{},"truncated",[14,113633,113634],{},"Gymnasium 把“结束”拆成两个概念：",[277,113636,113637,113647],{},[280,113638,113639],{},[283,113640,113641,113643,113645],{},[286,113642,104575],{"align":23751},[286,113644,100701],{"align":23751},[286,113646,21202],{"align":23751},[324,113648,113649,113661],{},[283,113650,113651,113655,113658],{},[329,113652,113653],{"align":23751},[126,113654,113628],{},[329,113656,113657],{"align":23751},"任务自然结束",[329,113659,113660],{"align":23751},"机械臂到达目标、机器人摔倒",[283,113662,113663,113667,113670],{},[329,113664,113665],{"align":23751},[126,113666,113631],{},[329,113668,113669],{"align":23751},"因外部限制截断",[329,113671,113672],{"align":23751},"达到最大步数、时间限制",[14,113674,113675],{},"本章中：",[120,113677,113679],{"className":30379,"code":113678,"language":30381,"meta":42,"style":42},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[126,113680,113681,113696],{"__ignoreMap":42},[129,113682,113683,113686,113688,113691,113693],{"class":131,"line":132},[129,113684,113685],{"class":139},"terminated ",[129,113687,185],{"class":135},[129,113689,113690],{"class":139}," dist ",[129,113692,1049],{"class":135},[129,113694,113695],{"class":188}," 0.05\n",[129,113697,113698,113701,113703,113705,113708,113710,113712],{"class":131,"line":51},[129,113699,113700],{"class":139},"truncated ",[129,113702,185],{"class":135},[129,113704,38874],{"class":188},[129,113706,113707],{"class":139},".steps ",[129,113709,1724],{"class":135},[129,113711,38874],{"class":188},[129,113713,113714],{"class":139},".max_steps\n",[14,113716,113717],{},"也就是：",[83,113719,113720,113723],{},[86,113721,113722],{},"末端距离目标小于 0.05，任务成功结束。",[86,113724,113725],{},"步数超过上限，episode 被截断。",[100,113727,113729,101019,113731],{"id":113728},"observation_space-和-action_space",[126,113730,113601],{},[126,113732,113611],{},[14,113734,113735],{},"这两个对象告诉算法：",[120,113737,113740],{"className":113738,"code":113739,"language":5202,"meta":42},[5200],"观测长什么样\n动作允许多大\n",[126,113741,113739],{"__ignoreMap":42},[14,113743,14648],{},[120,113745,113747],{"className":30379,"code":113746,"language":30381,"meta":42,"style":42},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[126,113748,113749],{"__ignoreMap":42},[129,113750,113751,113753,113756,113758,113761,113764,113767,113769,113771,113774,113776,113778,113780,113782,113784,113786,113788,113791,113793,113795],{"class":131,"line":132},[129,113752,30824],{"class":188},[129,113754,113755],{"class":139},".action_space ",[129,113757,185],{"class":135},[129,113759,113760],{"class":139}," spaces.Box(",[129,113762,113763],{"class":5231},"low",[129,113765,113766],{"class":135},"=-",[129,113768,102404],{"class":188},[129,113770,12450],{"class":139},[129,113772,113773],{"class":5231},"high",[129,113775,185],{"class":135},[129,113777,102404],{"class":188},[129,113779,12450],{"class":139},[129,113781,95964],{"class":5231},[129,113783,185],{"class":135},[129,113785,140],{"class":139},[129,113787,217],{"class":188},[129,113789,113790],{"class":139},",), ",[129,113792,93501],{"class":5231},[129,113794,185],{"class":135},[129,113796,113797],{"class":139},"np.float32)\n",[14,113799,113800,113801,113804],{},"表示动作是 2 维数组，每个值都在 ",[126,113802,113803],{},"[-1, 1]"," 范围内。",[120,113806,113808],{"className":30379,"code":113807,"language":30381,"meta":42,"style":42},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[126,113809,113810],{"__ignoreMap":42},[129,113811,113812,113814,113817,113819,113821,113823,113825,113828,113830,113832,113834,113836,113838,113840,113842,113844,113846,113848],{"class":131,"line":132},[129,113813,30824],{"class":188},[129,113815,113816],{"class":139},".observation_space ",[129,113818,185],{"class":135},[129,113820,113760],{"class":139},[129,113822,113763],{"class":5231},[129,113824,113766],{"class":135},[129,113826,113827],{"class":139},"np.inf, ",[129,113829,113773],{"class":5231},[129,113831,185],{"class":135},[129,113833,113827],{"class":139},[129,113835,95964],{"class":5231},[129,113837,185],{"class":135},[129,113839,140],{"class":139},[129,113841,585],{"class":188},[129,113843,113790],{"class":139},[129,113845,93501],{"class":5231},[129,113847,185],{"class":135},[129,113849,113797],{"class":139},[14,113851,113852],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[100,113854,113856],{"id":113855},"frame_skip-是什么","frame_skip 是什么",[120,113858,113860],{"className":30379,"code":113859,"language":30381,"meta":42,"style":42},"self.frame_skip = 5\n",[126,113861,113862],{"__ignoreMap":42},[129,113863,113864,113866,113869,113871],{"class":131,"line":132},[129,113865,30824],{"class":188},[129,113867,113868],{"class":139},".frame_skip ",[129,113870,185],{"class":135},[129,113872,54428],{"class":188},[14,113874,113875,113876,113879,113880,113882],{},"表示外部调用一次 ",[126,113877,113878],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[126,113881,101216],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[71,113884,101254],{"id":101253},[120,113886,113888],{"className":30379,"code":113887,"language":30381,"meta":42,"style":42},"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",[126,113889,113890,113902,113908,113918,113929,113933,113937,113945,113950,113954,113958,113962,113966,113970,113974,113978,113983,113987,113991,113995,114000,114004,114008,114012,114016,114020,114024,114028,114032,114036,114040,114044,114048,114052,114070,114085,114089,114102,114112,114127,114144,114148,114169,114188,114213,114227,114231,114241,114253,114263,114267,114309,114347,114351,114361,114377,114392,114411,114418,114422,114435,114450,114465,114478,114497,114513,114517,114558,114573,114588,114592,114631,114642,114655,114659,114669,114678,114682,114692,114707,114725,114729,114740,114757,114770,114774,114784,114788,114799,114810,114814,114828,114842,114858,114862,114875,114892,114907,114914,114918,114922,114934,114944,114962,114974,114986,114990,114998,115014,115023,115032,115040,115082,115095,115100,115104,115122,115126,115130,115142],{"__ignoreMap":42},[129,113891,113892,113894,113897,113899],{"class":131,"line":132},[129,113893,30393],{"class":135},[129,113895,113896],{"class":139}," gymnasium ",[129,113898,31384],{"class":135},[129,113900,113901],{"class":139}," gym\n",[129,113903,113904,113906],{"class":131,"line":51},[129,113905,30393],{"class":135},[129,113907,101302],{"class":139},[129,113909,113910,113912,113914,113916],{"class":131,"line":1194},[129,113911,30393],{"class":135},[129,113913,31381],{"class":139},[129,113915,31384],{"class":135},[129,113917,31387],{"class":139},[129,113919,113920,113922,113924,113926],{"class":131,"line":1209},[129,113921,30738],{"class":135},[129,113923,113896],{"class":139},[129,113925,30393],{"class":135},[129,113927,113928],{"class":139}," spaces\n",[129,113930,113931],{"class":131,"line":1215},[129,113932,2414],{"emptyLinePlaceholder":56},[129,113934,113935],{"class":131,"line":1229},[129,113936,2414],{"emptyLinePlaceholder":56},[129,113938,113939,113941,113943],{"class":131,"line":1235},[129,113940,101315],{"class":188},[129,113942,13579],{"class":135},[129,113944,101320],{"class":244},[129,113946,113947],{"class":131,"line":1326},[129,113948,113949],{"class":244},"\u003Cmujoco model=\"gym_reacher\">\n",[129,113951,113952],{"class":131,"line":1332},[129,113953,111739],{"class":244},[129,113955,113956],{"class":131,"line":1344},[129,113957,2414],{"emptyLinePlaceholder":56},[129,113959,113960],{"class":131,"line":1626},[129,113961,101339],{"class":244},[129,113963,113964],{"class":131,"line":1631},[129,113965,111757],{"class":244},[129,113967,113968],{"class":131,"line":1637},[129,113969,2414],{"emptyLinePlaceholder":56},[129,113971,113972],{"class":131,"line":1642},[129,113973,111766],{"class":244},[129,113975,113976],{"class":131,"line":1656},[129,113977,111771],{"class":244},[129,113979,113980],{"class":131,"line":1661},[129,113981,113982],{"class":244},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[129,113984,113985],{"class":131,"line":1667},[129,113986,2414],{"emptyLinePlaceholder":56},[129,113988,113989],{"class":131,"line":1688},[129,113990,111785],{"class":244},[129,113992,113993],{"class":131,"line":1693},[129,113994,111790],{"class":244},[129,113996,113997],{"class":131,"line":1707},[129,113998,113999],{"class":244},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[129,114001,114002],{"class":131,"line":1712},[129,114003,111800],{"class":244},[129,114005,114006],{"class":131,"line":1741},[129,114007,106439],{"class":244},[129,114009,114010],{"class":131,"line":1746},[129,114011,101368],{"class":244},[129,114013,114014],{"class":131,"line":1763},[129,114015,101373],{"class":244},[129,114017,114018],{"class":131,"line":1768},[129,114019,2414],{"emptyLinePlaceholder":56},[129,114021,114022],{"class":131,"line":1773},[129,114023,106456],{"class":244},[129,114025,114026],{"class":131,"line":1778},[129,114027,111825],{"class":244},[129,114029,114030],{"class":131,"line":1792},[129,114031,111830],{"class":244},[129,114033,114034],{"class":131,"line":1797},[129,114035,106466],{"class":244},[129,114037,114038],{"class":131,"line":2591},[129,114039,101378],{"class":244},[129,114041,114042],{"class":131,"line":2605},[129,114043,95699],{"class":244},[129,114045,114046],{"class":131,"line":2613},[129,114047,2414],{"emptyLinePlaceholder":56},[129,114049,114050],{"class":131,"line":2618},[129,114051,2414],{"emptyLinePlaceholder":56},[129,114053,114054,114056,114059,114061,114063,114065,114068],{"class":131,"line":2624},[129,114055,14709],{"class":135},[129,114057,114058],{"class":1977}," ReacherEnv",[129,114060,140],{"class":139},[129,114062,113541],{"class":1977},[129,114064,697],{"class":139},[129,114066,114067],{"class":1977},"Env",[129,114069,30787],{"class":139},[129,114071,114072,114075,114077,114079,114082],{"class":131,"line":2630},[129,114073,114074],{"class":139},"    metadata ",[129,114076,185],{"class":135},[129,114078,4462],{"class":139},[129,114080,114081],{"class":244},"\"render_modes\"",[129,114083,114084],{"class":139},": []}\n",[129,114086,114087],{"class":131,"line":2635},[129,114088,2414],{"emptyLinePlaceholder":56},[129,114090,114091,114093,114095,114098,114100],{"class":131,"line":7963},[129,114092,30802],{"class":135},[129,114094,30805],{"class":188},[129,114096,114097],{"class":139},"(self) -> ",[129,114099,95687],{"class":188},[129,114101,3753],{"class":139},[129,114103,114104,114106,114108,114110],{"class":131,"line":7987},[129,114105,30818],{"class":188},[129,114107,17276],{"class":139},[129,114109,30830],{"class":188},[129,114111,1990],{"class":139},[129,114113,114114,114116,114119,114121,114123,114125],{"class":131,"line":7992},[129,114115,30846],{"class":188},[129,114117,114118],{"class":139},".model ",[129,114120,185],{"class":135},[129,114122,101413],{"class":139},[129,114124,101315],{"class":188},[129,114126,146],{"class":139},[129,114128,114129,114131,114134,114136,114139,114141],{"class":131,"line":7998},[129,114130,30846],{"class":188},[129,114132,114133],{"class":139},".data ",[129,114135,185],{"class":135},[129,114137,114138],{"class":139}," mujoco.MjData(",[129,114140,30824],{"class":188},[129,114142,114143],{"class":139},".model)\n",[129,114145,114146],{"class":131,"line":8025},[129,114147,2414],{"emptyLinePlaceholder":56},[129,114149,114150,114152,114155,114157,114160,114162,114165,114167],{"class":131,"line":8030},[129,114151,30846],{"class":188},[129,114153,114154],{"class":139},".tip_site_id ",[129,114156,185],{"class":135},[129,114158,114159],{"class":139}," mujoco.mj_name2id(",[129,114161,30824],{"class":188},[129,114163,114164],{"class":139},".model, mujoco.mjtObj.mjOBJ_SITE, ",[129,114166,111537],{"class":244},[129,114168,146],{"class":139},[129,114170,114171,114173,114176,114178,114180,114182,114184,114186],{"class":131,"line":8036},[129,114172,30846],{"class":188},[129,114174,114175],{"class":139},".target_site_id ",[129,114177,185],{"class":135},[129,114179,114159],{"class":139},[129,114181,30824],{"class":188},[129,114183,114164],{"class":139},[129,114185,111960],{"class":244},[129,114187,146],{"class":139},[129,114189,114190,114192,114194,114196,114198,114200,114203,114205,114207,114209,114211],{"class":131,"line":8048},[129,114191,2511],{"class":135},[129,114193,38874],{"class":188},[129,114195,114154],{"class":139},[129,114197,1049],{"class":135},[129,114199,4107],{"class":188},[129,114201,114202],{"class":135}," or",[129,114204,38874],{"class":188},[129,114206,114175],{"class":139},[129,114208,1049],{"class":135},[129,114210,4107],{"class":188},[129,114212,3753],{"class":139},[129,114214,114215,114218,114220,114222,114225],{"class":131,"line":8060},[129,114216,114217],{"class":135},"            raise",[129,114219,103436],{"class":188},[129,114221,140],{"class":139},[129,114223,114224],{"class":244},"\"required sites not found\"",[129,114226,146],{"class":139},[129,114228,114229],{"class":131,"line":8072},[129,114230,2414],{"emptyLinePlaceholder":56},[129,114232,114233,114235,114237,114239],{"class":131,"line":9731},[129,114234,30846],{"class":188},[129,114236,113868],{"class":139},[129,114238,185],{"class":135},[129,114240,54428],{"class":188},[129,114242,114243,114245,114248,114250],{"class":131,"line":9756},[129,114244,30846],{"class":188},[129,114246,114247],{"class":139},".max_steps ",[129,114249,185],{"class":135},[129,114251,114252],{"class":188}," 200\n",[129,114254,114255,114257,114259,114261],{"class":131,"line":9779},[129,114256,30846],{"class":188},[129,114258,113707],{"class":139},[129,114260,185],{"class":135},[129,114262,47334],{"class":188},[129,114264,114265],{"class":131,"line":9803},[129,114266,2414],{"emptyLinePlaceholder":56},[129,114268,114269,114271,114273,114275,114277,114279,114281,114283,114285,114287,114289,114291,114293,114295,114297,114299,114301,114303,114305,114307],{"class":131,"line":9808},[129,114270,30846],{"class":188},[129,114272,113755],{"class":139},[129,114274,185],{"class":135},[129,114276,113760],{"class":139},[129,114278,113763],{"class":5231},[129,114280,113766],{"class":135},[129,114282,102404],{"class":188},[129,114284,12450],{"class":139},[129,114286,113773],{"class":5231},[129,114288,185],{"class":135},[129,114290,102404],{"class":188},[129,114292,12450],{"class":139},[129,114294,95964],{"class":5231},[129,114296,185],{"class":135},[129,114298,140],{"class":139},[129,114300,217],{"class":188},[129,114302,113790],{"class":139},[129,114304,93501],{"class":5231},[129,114306,185],{"class":135},[129,114308,113797],{"class":139},[129,114310,114311,114313,114315,114317,114319,114321,114323,114325,114327,114329,114331,114333,114335,114337,114339,114341,114343,114345],{"class":131,"line":9813},[129,114312,30846],{"class":188},[129,114314,113816],{"class":139},[129,114316,185],{"class":135},[129,114318,113760],{"class":139},[129,114320,113763],{"class":5231},[129,114322,113766],{"class":135},[129,114324,113827],{"class":139},[129,114326,113773],{"class":5231},[129,114328,185],{"class":135},[129,114330,113827],{"class":139},[129,114332,95964],{"class":5231},[129,114334,185],{"class":135},[129,114336,140],{"class":139},[129,114338,585],{"class":188},[129,114340,113790],{"class":139},[129,114342,93501],{"class":5231},[129,114344,185],{"class":135},[129,114346,113797],{"class":139},[129,114348,114349],{"class":131,"line":9818},[129,114350,2414],{"emptyLinePlaceholder":56},[129,114352,114353,114355,114358],{"class":131,"line":9827},[129,114354,30802],{"class":135},[129,114356,114357],{"class":1977}," _get_obs",[129,114359,114360],{"class":139},"(self) -> np.ndarray:\n",[129,114362,114363,114365,114367,114369,114372,114374],{"class":131,"line":9832},[129,114364,112138],{"class":139},[129,114366,185],{"class":135},[129,114368,38874],{"class":188},[129,114370,114371],{"class":139},".data.site_xpos[",[129,114373,30824],{"class":188},[129,114375,114376],{"class":139},".tip_site_id].copy()\n",[129,114378,114379,114381,114383,114385,114387,114389],{"class":131,"line":9838},[129,114380,112151],{"class":139},[129,114382,185],{"class":135},[129,114384,38874],{"class":188},[129,114386,114371],{"class":139},[129,114388,30824],{"class":188},[129,114390,114391],{"class":139},".target_site_id].copy()\n",[129,114393,114394,114396,114398,114401,114403,114406,114408],{"class":131,"line":9859},[129,114395,110183],{"class":139},[129,114397,185],{"class":135},[129,114399,114400],{"class":139}," np.concatenate([",[129,114402,30824],{"class":188},[129,114404,114405],{"class":139},".data.qpos.copy(), ",[129,114407,30824],{"class":188},[129,114409,114410],{"class":139},".data.qvel.copy(), tip, target])\n",[129,114412,114413,114415],{"class":131,"line":9865},[129,114414,14767],{"class":135},[129,114416,114417],{"class":139}," obs.astype(np.float32)\n",[129,114419,114420],{"class":131,"line":9879},[129,114421,2414],{"emptyLinePlaceholder":56},[129,114423,114424,114426,114429,114431,114433],{"class":131,"line":9885},[129,114425,30802],{"class":135},[129,114427,114428],{"class":1977}," _get_reward",[129,114430,114097],{"class":139},[129,114432,179],{"class":188},[129,114434,3753],{"class":139},[129,114436,114437,114439,114441,114443,114445,114447],{"class":131,"line":9912},[129,114438,112138],{"class":139},[129,114440,185],{"class":135},[129,114442,38874],{"class":188},[129,114444,114371],{"class":139},[129,114446,30824],{"class":188},[129,114448,114449],{"class":139},".tip_site_id]\n",[129,114451,114452,114454,114456,114458,114460,114462],{"class":131,"line":9921},[129,114453,112151],{"class":139},[129,114455,185],{"class":135},[129,114457,38874],{"class":188},[129,114459,114371],{"class":139},[129,114461,30824],{"class":188},[129,114463,114464],{"class":139},".target_site_id]\n",[129,114466,114467,114470,114472,114474,114476],{"class":131,"line":9927},[129,114468,114469],{"class":139},"        dist ",[129,114471,185],{"class":135},[129,114473,111602],{"class":139},[129,114475,671],{"class":135},[129,114477,111607],{"class":139},[129,114479,114480,114483,114485,114487,114489,114492,114494],{"class":131,"line":9935},[129,114481,114482],{"class":139},"        control_cost ",[129,114484,185],{"class":135},[129,114486,112038],{"class":188},[129,114488,6533],{"class":135},[129,114490,114491],{"class":139}," np.sum(np.square(",[129,114493,30824],{"class":188},[129,114495,114496],{"class":139},".data.ctrl))\n",[129,114498,114499,114501,114503,114505,114507,114509,114511],{"class":131,"line":9940},[129,114500,14767],{"class":135},[129,114502,109798],{"class":188},[129,114504,140],{"class":139},[129,114506,671],{"class":135},[129,114508,111597],{"class":139},[129,114510,671],{"class":135},[129,114512,112060],{"class":139},[129,114514,114515],{"class":131,"line":16619},[129,114516,2414],{"emptyLinePlaceholder":56},[129,114518,114519,114521,114524,114527,114529,114532,114534,114536,114538,114540,114542,114545,114548,114550,114552,114554,114556],{"class":131,"line":16625},[129,114520,30802],{"class":135},[129,114522,114523],{"class":1977}," reset",[129,114525,114526],{"class":139},"(self, ",[129,114528,594],{"class":135},[129,114530,114531],{"class":139},", seed: ",[129,114533,143],{"class":188},[129,114535,25110],{"class":135},[129,114537,38934],{"class":188},[129,114539,13579],{"class":135},[129,114541,38934],{"class":188},[129,114543,114544],{"class":139},", options: ",[129,114546,114547],{"class":188},"dict",[129,114549,25110],{"class":135},[129,114551,38934],{"class":188},[129,114553,13579],{"class":135},[129,114555,38934],{"class":188},[129,114557,30787],{"class":139},[129,114559,114560,114562,114565,114568,114570],{"class":131,"line":16648},[129,114561,30818],{"class":188},[129,114563,114564],{"class":139},"().reset(",[129,114566,114567],{"class":5231},"seed",[129,114569,185],{"class":135},[129,114571,114572],{"class":139},"seed)\n",[129,114574,114575,114578,114580,114583,114585],{"class":131,"line":16654},[129,114576,114577],{"class":139},"        mujoco.mj_resetData(",[129,114579,30824],{"class":188},[129,114581,114582],{"class":139},".model, ",[129,114584,30824],{"class":188},[129,114586,114587],{"class":139},".data)\n",[129,114589,114590],{"class":131,"line":16677},[129,114591,2414],{"emptyLinePlaceholder":56},[129,114593,114594,114596,114599,114601,114603,114606,114608,114610,114612,114614,114616,114618,114620,114622,114624,114626,114628],{"class":131,"line":16691},[129,114595,30846],{"class":188},[129,114597,114598],{"class":139},".data.qpos[:] ",[129,114600,185],{"class":135},[129,114602,38874],{"class":188},[129,114604,114605],{"class":139},".np_random.uniform(",[129,114607,113763],{"class":5231},[129,114609,113766],{"class":135},[129,114611,86211],{"class":188},[129,114613,12450],{"class":139},[129,114615,113773],{"class":5231},[129,114617,185],{"class":135},[129,114619,86211],{"class":188},[129,114621,12450],{"class":139},[129,114623,31497],{"class":5231},[129,114625,185],{"class":135},[129,114627,30824],{"class":188},[129,114629,114630],{"class":139},".model.nq)\n",[129,114632,114633,114635,114638,114640],{"class":131,"line":16711},[129,114634,30846],{"class":188},[129,114636,114637],{"class":139},".data.qvel[:] ",[129,114639,185],{"class":135},[129,114641,104762],{"class":188},[129,114643,114644,114647,114649,114651,114653],{"class":131,"line":16717},[129,114645,114646],{"class":139},"        mujoco.mj_forward(",[129,114648,30824],{"class":188},[129,114650,114582],{"class":139},[129,114652,30824],{"class":188},[129,114654,114587],{"class":139},[129,114656,114657],{"class":131,"line":16728},[129,114658,2414],{"emptyLinePlaceholder":56},[129,114660,114661,114663,114665,114667],{"class":131,"line":16751},[129,114662,30846],{"class":188},[129,114664,113707],{"class":139},[129,114666,185],{"class":135},[129,114668,47334],{"class":188},[129,114670,114671,114673,114675],{"class":131,"line":16773},[129,114672,14767],{"class":135},[129,114674,38874],{"class":188},[129,114676,114677],{"class":139},"._get_obs(), {}\n",[129,114679,114680],{"class":131,"line":16778},[129,114681,2414],{"emptyLinePlaceholder":56},[129,114683,114684,114686,114689],{"class":131,"line":16784},[129,114685,30802],{"class":135},[129,114687,114688],{"class":1977}," step",[129,114690,114691],{"class":139},"(self, action):\n",[129,114693,114694,114696,114698,114701,114703,114705],{"class":131,"line":16798},[129,114695,110223],{"class":139},[129,114697,185],{"class":135},[129,114699,114700],{"class":139}," np.asarray(action, ",[129,114702,93501],{"class":5231},[129,114704,185],{"class":135},[129,114706,113797],{"class":139},[129,114708,114709,114711,114713,114715,114717,114720,114722],{"class":131,"line":16811},[129,114710,110223],{"class":139},[129,114712,185],{"class":135},[129,114714,107448],{"class":139},[129,114716,30824],{"class":188},[129,114718,114719],{"class":139},".action_space.low, ",[129,114721,30824],{"class":188},[129,114723,114724],{"class":139},".action_space.high)\n",[129,114726,114727],{"class":131,"line":16816},[129,114728,2414],{"emptyLinePlaceholder":56},[129,114730,114731,114733,114736,114738],{"class":131,"line":16830},[129,114732,30846],{"class":188},[129,114734,114735],{"class":139},".data.ctrl[:] ",[129,114737,185],{"class":135},[129,114739,107471],{"class":139},[129,114741,114742,114744,114746,114748,114750,114752,114754],{"class":131,"line":16835},[129,114743,3417],{"class":135},[129,114745,101502],{"class":139},[129,114747,26044],{"class":135},[129,114749,32444],{"class":188},[129,114751,140],{"class":139},[129,114753,30824],{"class":188},[129,114755,114756],{"class":139},".frame_skip):\n",[129,114758,114759,114762,114764,114766,114768],{"class":131,"line":16841},[129,114760,114761],{"class":139},"            mujoco.mj_step(",[129,114763,30824],{"class":188},[129,114765,114582],{"class":139},[129,114767,30824],{"class":188},[129,114769,114587],{"class":139},[129,114771,114772],{"class":131,"line":16846},[129,114773,2414],{"emptyLinePlaceholder":56},[129,114775,114776,114778,114780,114782],{"class":131,"line":16860},[129,114777,30846],{"class":188},[129,114779,113707],{"class":139},[129,114781,9492],{"class":135},[129,114783,55700],{"class":188},[129,114785,114786],{"class":131,"line":16865},[129,114787,2414],{"emptyLinePlaceholder":56},[129,114789,114790,114792,114794,114796],{"class":131,"line":16870},[129,114791,110183],{"class":139},[129,114793,185],{"class":135},[129,114795,38874],{"class":188},[129,114797,114798],{"class":139},"._get_obs()\n",[129,114800,114801,114803,114805,114807],{"class":131,"line":16884},[129,114802,110288],{"class":139},[129,114804,185],{"class":135},[129,114806,38874],{"class":188},[129,114808,114809],{"class":139},"._get_reward()\n",[129,114811,114812],{"class":131,"line":16896},[129,114813,2414],{"emptyLinePlaceholder":56},[129,114815,114816,114818,114820,114822,114824,114826],{"class":131,"line":16901},[129,114817,112138],{"class":139},[129,114819,185],{"class":135},[129,114821,38874],{"class":188},[129,114823,114371],{"class":139},[129,114825,30824],{"class":188},[129,114827,114449],{"class":139},[129,114829,114830,114832,114834,114836,114838,114840],{"class":131,"line":16914},[129,114831,112151],{"class":139},[129,114833,185],{"class":135},[129,114835,38874],{"class":188},[129,114837,114371],{"class":139},[129,114839,30824],{"class":188},[129,114841,114464],{"class":139},[129,114843,114844,114846,114848,114850,114853,114855],{"class":131,"line":16919},[129,114845,114469],{"class":139},[129,114847,185],{"class":135},[129,114849,109798],{"class":188},[129,114851,114852],{"class":139},"(np.linalg.norm(tip ",[129,114854,671],{"class":135},[129,114856,114857],{"class":139}," target))\n",[129,114859,114860],{"class":131,"line":16924},[129,114861,2414],{"emptyLinePlaceholder":56},[129,114863,114864,114867,114869,114871,114873],{"class":131,"line":16929},[129,114865,114866],{"class":139},"        terminated ",[129,114868,185],{"class":135},[129,114870,113690],{"class":139},[129,114872,1049],{"class":135},[129,114874,113695],{"class":188},[129,114876,114877,114880,114882,114884,114886,114888,114890],{"class":131,"line":16942},[129,114878,114879],{"class":139},"        truncated ",[129,114881,185],{"class":135},[129,114883,38874],{"class":188},[129,114885,113707],{"class":139},[129,114887,1724],{"class":135},[129,114889,38874],{"class":188},[129,114891,113714],{"class":139},[129,114893,114894,114897,114899,114901,114904],{"class":131,"line":16947},[129,114895,114896],{"class":139},"        info ",[129,114898,185],{"class":135},[129,114900,4462],{"class":139},[129,114902,114903],{"class":244},"\"distance\"",[129,114905,114906],{"class":139},": dist}\n",[129,114908,114909,114911],{"class":131,"line":32634},[129,114910,14767],{"class":135},[129,114912,114913],{"class":139}," obs, reward, terminated, truncated, info\n",[129,114915,114916],{"class":131,"line":32640},[129,114917,2414],{"emptyLinePlaceholder":56},[129,114919,114920],{"class":131,"line":32646},[129,114921,2414],{"emptyLinePlaceholder":56},[129,114923,114924,114926,114928,114930,114932],{"class":131,"line":32652},[129,114925,31948],{"class":135},[129,114927,1987],{"class":1977},[129,114929,101399],{"class":139},[129,114931,95687],{"class":188},[129,114933,3753],{"class":139},[129,114935,114936,114939,114941],{"class":131,"line":32658},[129,114937,114938],{"class":139},"    env ",[129,114940,185],{"class":135},[129,114942,114943],{"class":139}," ReacherEnv()\n",[129,114945,114946,114949,114951,114954,114956,114958,114960],{"class":131,"line":32669},[129,114947,114948],{"class":139},"    obs, info ",[129,114950,185],{"class":135},[129,114952,114953],{"class":139}," env.reset(",[129,114955,114567],{"class":5231},[129,114957,185],{"class":135},[129,114959,331],{"class":188},[129,114961,146],{"class":139},[129,114963,114964,114966,114968,114971],{"class":131,"line":32675},[129,114965,31300],{"class":188},[129,114967,140],{"class":139},[129,114969,114970],{"class":244},"\"initial obs shape:\"",[129,114972,114973],{"class":139},", obs.shape)\n",[129,114975,114976,114978,114980,114983],{"class":131,"line":32695},[129,114977,31300],{"class":188},[129,114979,140],{"class":139},[129,114981,114982],{"class":244},"\"initial info:\"",[129,114984,114985],{"class":139},", info)\n",[129,114987,114988],{"class":131,"line":32701},[129,114989,2414],{"emptyLinePlaceholder":56},[129,114991,114992,114994,114996],{"class":131,"line":32712},[129,114993,110154],{"class":139},[129,114995,185],{"class":135},[129,114997,104762],{"class":188},[129,114999,115000,115002,115004,115006,115008,115010,115012],{"class":131,"line":32718},[129,115001,3215],{"class":135},[129,115003,31617],{"class":139},[129,115005,26044],{"class":135},[129,115007,32444],{"class":188},[129,115009,140],{"class":139},[129,115011,839],{"class":188},[129,115013,30787],{"class":139},[129,115015,115016,115018,115020],{"class":131,"line":32724},[129,115017,110223],{"class":139},[129,115019,185],{"class":135},[129,115021,115022],{"class":139}," env.action_space.sample()\n",[129,115024,115025,115028,115030],{"class":131,"line":32730},[129,115026,115027],{"class":139},"        obs, reward, terminated, truncated, info ",[129,115029,185],{"class":135},[129,115031,113416],{"class":139},[129,115033,115034,115036,115038],{"class":131,"line":32736},[129,115035,110298],{"class":139},[129,115037,9492],{"class":135},[129,115039,110303],{"class":139},[129,115041,115042,115044,115046,115048,115050,115053,115055,115057,115060,115062,115064,115067,115069,115071,115074,115076,115078,115080],{"class":131,"line":32742},[129,115043,32452],{"class":188},[129,115045,140],{"class":139},[129,115047,110332],{"class":244},[129,115049,110335],{"class":139},[129,115051,115052],{"class":244},"\"reward:\"",[129,115054,12450],{"class":139},[129,115056,32019],{"class":188},[129,115058,115059],{"class":139},"(reward, ",[129,115061,211],{"class":188},[129,115063,110346],{"class":139},[129,115065,115066],{"class":244},"\"distance:\"",[129,115068,12450],{"class":139},[129,115070,32019],{"class":188},[129,115072,115073],{"class":139},"(info[",[129,115075,114903],{"class":244},[129,115077,112203],{"class":139},[129,115079,211],{"class":188},[129,115081,30498],{"class":139},[129,115083,115084,115086,115089,115092],{"class":131,"line":32748},[129,115085,2511],{"class":135},[129,115087,115088],{"class":139}," terminated ",[129,115090,115091],{"class":135},"or",[129,115093,115094],{"class":139}," truncated:\n",[129,115096,115097],{"class":131,"line":32754},[129,115098,115099],{"class":135},"            break\n",[129,115101,115102],{"class":131,"line":32774},[129,115103,2414],{"emptyLinePlaceholder":56},[129,115105,115106,115108,115110,115112,115114,115116,115118,115120],{"class":131,"line":32780},[129,115107,31300],{"class":188},[129,115109,140],{"class":139},[129,115111,110377],{"class":244},[129,115113,12450],{"class":139},[129,115115,32019],{"class":188},[129,115117,110384],{"class":139},[129,115119,211],{"class":188},[129,115121,30498],{"class":139},[129,115123,115124],{"class":131,"line":32796},[129,115125,2414],{"emptyLinePlaceholder":56},[129,115127,115128],{"class":131,"line":32802},[129,115129,2414],{"emptyLinePlaceholder":56},[129,115131,115132,115134,115136,115138,115140],{"class":131,"line":32816},[129,115133,1545],{"class":135},[129,115135,31221],{"class":188},[129,115137,101560],{"class":135},[129,115139,101563],{"class":244},[129,115141,3753],{"class":139},[129,115143,115144],{"class":131,"line":32822},[129,115145,101570],{"class":139},[14,115147,103571],{},[120,115149,115151],{"className":23837,"code":115150,"language":23839,"meta":42,"style":42},"touch ch8_gym_env.py\n",[126,115152,115153],{"__ignoreMap":42},[129,115154,115155,115157],{"class":131,"line":132},[129,115156,101284],{"class":1977},[129,115158,115159],{"class":244}," ch8_gym_env.py\n",[14,115161,110445],{},[120,115163,115165],{"className":23837,"code":115164,"language":23839,"meta":42,"style":42},"python ch8_gym_env.py\n",[126,115166,115167],{"__ignoreMap":42},[129,115168,115169,115171],{"class":131,"line":132},[129,115170,30381],{"class":1977},[129,115172,115159],{"class":244},[100,115174,101573],{"id":101573},[14,115176,115177],{},"继承 Gymnasium 环境：",[120,115179,115181],{"className":30379,"code":115180,"language":30381,"meta":42,"style":42},"class ReacherEnv(gym.Env):\n",[126,115182,115183],{"__ignoreMap":42},[129,115184,115185,115187,115189,115191,115193,115195,115197],{"class":131,"line":132},[129,115186,14709],{"class":135},[129,115188,114058],{"class":1977},[129,115190,140],{"class":139},[129,115192,113541],{"class":1977},[129,115194,697],{"class":139},[129,115196,114067],{"class":1977},[129,115198,30787],{"class":139},[14,115200,115201],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115203,115204],{},"初始化模型：",[120,115206,115208],{"className":30379,"code":115207,"language":30381,"meta":42,"style":42},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[126,115209,115210,115224],{"__ignoreMap":42},[129,115211,115212,115214,115216,115218,115220,115222],{"class":131,"line":132},[129,115213,30824],{"class":188},[129,115215,114118],{"class":139},[129,115217,185],{"class":135},[129,115219,101413],{"class":139},[129,115221,101315],{"class":188},[129,115223,146],{"class":139},[129,115225,115226,115228,115230,115232,115234,115236],{"class":131,"line":51},[129,115227,30824],{"class":188},[129,115229,114133],{"class":139},[129,115231,185],{"class":135},[129,115233,114138],{"class":139},[129,115235,30824],{"class":188},[129,115237,114143],{"class":139},[14,115239,115240,115241,115243],{},"这和前面章节一样，只是现在放到了类的 ",[126,115242,30830],{}," 里。",[14,115245,115246],{},"缓存 site ID：",[120,115248,115250],{"className":30379,"code":115249,"language":30381,"meta":42,"style":42},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[126,115251,115252,115266],{"__ignoreMap":42},[129,115253,115254,115256,115258,115260,115262,115264],{"class":131,"line":132},[129,115255,30824],{"class":188},[129,115257,114154],{"class":139},[129,115259,185],{"class":135},[129,115261,114159],{"class":139},[129,115263,89555],{"class":188},[129,115265,146],{"class":139},[129,115267,115268,115270,115272,115274,115276,115278],{"class":131,"line":51},[129,115269,30824],{"class":188},[129,115271,114175],{"class":139},[129,115273,185],{"class":135},[129,115275,114159],{"class":139},[129,115277,89555],{"class":188},[129,115279,146],{"class":139},[14,115281,115282],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115284,115285],{},"reset：",[120,115287,115289],{"className":30379,"code":115288,"language":30381,"meta":42,"style":42},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[126,115290,115291],{"__ignoreMap":42},[129,115292,115293,115295,115297,115299,115301,115303,115305,115307,115309,115311,115313,115315,115317,115319,115321,115323,115325],{"class":131,"line":132},[129,115294,31948],{"class":135},[129,115296,114523],{"class":1977},[129,115298,114526],{"class":139},[129,115300,594],{"class":135},[129,115302,114531],{"class":139},[129,115304,143],{"class":188},[129,115306,25110],{"class":135},[129,115308,38934],{"class":188},[129,115310,13579],{"class":135},[129,115312,38934],{"class":188},[129,115314,114544],{"class":139},[129,115316,114547],{"class":188},[129,115318,25110],{"class":135},[129,115320,38934],{"class":188},[129,115322,13579],{"class":135},[129,115324,38934],{"class":188},[129,115326,30787],{"class":139},[14,115328,115329,115331],{},[126,115330,70057],{}," 做四件事：",[83,115333,115334,115337,115340,115343],{},[86,115335,115336],{},"设置随机种子。",[86,115338,115339],{},"重置 MuJoCo data。",[86,115341,115342],{},"随机初始化关节角。",[86,115344,115345],{},"返回初始观测和 info。",[14,115347,115348],{},"step：",[120,115350,115352],{"className":30379,"code":115351,"language":30381,"meta":42,"style":42},"def step(self, action):\n",[126,115353,115354],{"__ignoreMap":42},[129,115355,115356,115358,115360],{"class":131,"line":132},[129,115357,31948],{"class":135},[129,115359,114688],{"class":1977},[129,115361,114691],{"class":139},[14,115363,115364,115366],{},[126,115365,107135],{}," 做六件事：",[83,115368,115369,115372,115378,115381,115384,115387],{},[86,115370,115371],{},"检查并裁剪 action。",[86,115373,115374,115375,28386],{},"写入 ",[126,115376,115377],{},"self.data.ctrl",[86,115379,115380],{},"连续推进若干个 MuJoCo 物理步。",[86,115382,115383],{},"计算新观测。",[86,115385,115386],{},"计算奖励和结束条件。",[86,115388,115389],{},"返回 Gymnasium 标准五元组。",[100,115391,101709],{"id":101709},[120,115393,115395],{"className":30379,"code":115394,"language":30381,"meta":42,"style":42},"import gymnasium as gym\n",[126,115396,115397],{"__ignoreMap":42},[129,115398,115399,115401,115403,115405],{"class":131,"line":132},[129,115400,30393],{"class":135},[129,115402,113896],{"class":139},[129,115404,31384],{"class":135},[129,115406,113901],{"class":139},[14,115408,115409,115410,115412,115413,115416],{},"导入 Gymnasium，并起别名 ",[126,115411,113541],{},"。后面写 ",[126,115414,115415],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[120,115418,115420],{"className":30379,"code":115419,"language":30381,"meta":42,"style":42},"from gymnasium import spaces\n",[126,115421,115422],{"__ignoreMap":42},[129,115423,115424,115426,115428,115430],{"class":131,"line":132},[129,115425,30738],{"class":135},[129,115427,113896],{"class":139},[129,115429,30393],{"class":135},[129,115431,113928],{"class":139},[14,115433,115434,115435,115438],{},"导入空间定义工具。",[126,115436,115437],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[120,115440,115441],{"className":30379,"code":115180,"language":30381,"meta":42,"style":42},[126,115442,115443],{"__ignoreMap":42},[129,115444,115445,115447,115449,115451,115453,115455,115457],{"class":131,"line":132},[129,115446,14709],{"class":135},[129,115448,114058],{"class":1977},[129,115450,140],{"class":139},[129,115452,113541],{"class":1977},[129,115454,697],{"class":139},[129,115456,114067],{"class":1977},[129,115458,30787],{"class":139},[14,115460,115461,115462,115465,115466,115468,115469,101019,115471,115473],{},"定义一个类，名字叫 ",[126,115463,115464],{},"ReacherEnv","。括号里的 ",[126,115467,115415],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[126,115470,70057],{},[126,115472,107135],{}," 这两个核心方法。",[120,115475,115477],{"className":30379,"code":115476,"language":30381,"meta":42,"style":42},"metadata = {\"render_modes\": []}\n",[126,115478,115479],{"__ignoreMap":42},[129,115480,115481,115484,115486,115488,115490],{"class":131,"line":132},[129,115482,115483],{"class":139},"metadata ",[129,115485,185],{"class":135},[129,115487,4462],{"class":139},[129,115489,114081],{"class":244},[129,115491,114084],{"class":139},[14,115493,115494],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[120,115496,115498],{"className":30379,"code":115497,"language":30381,"meta":42,"style":42},"def __init__(self) -> None:\n",[126,115499,115500],{"__ignoreMap":42},[129,115501,115502,115504,115506,115508,115510],{"class":131,"line":132},[129,115503,31948],{"class":135},[129,115505,30805],{"class":188},[129,115507,114097],{"class":139},[129,115509,95687],{"class":188},[129,115511,3753],{"class":139},[14,115513,115514,115516,115517,28386],{},[126,115515,30830],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[126,115518,115519],{},"env = ReacherEnv()",[120,115521,115523],{"className":30379,"code":115522,"language":30381,"meta":42,"style":42},"super().__init__()\n",[126,115524,115525],{"__ignoreMap":42},[129,115526,115527,115530,115532,115534],{"class":131,"line":132},[129,115528,115529],{"class":188},"super",[129,115531,17276],{"class":139},[129,115533,30830],{"class":188},[129,115535,1990],{"class":139},[14,115537,115538,115539,115541],{},"调用父类 ",[126,115540,115415],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[120,115543,115544],{"className":30379,"code":115207,"language":30381,"meta":42,"style":42},[126,115545,115546,115560],{"__ignoreMap":42},[129,115547,115548,115550,115552,115554,115556,115558],{"class":131,"line":132},[129,115549,30824],{"class":188},[129,115551,114118],{"class":139},[129,115553,185],{"class":135},[129,115555,101413],{"class":139},[129,115557,101315],{"class":188},[129,115559,146],{"class":139},[129,115561,115562,115564,115566,115568,115570,115572],{"class":131,"line":51},[129,115563,30824],{"class":188},[129,115565,114133],{"class":139},[129,115567,185],{"class":135},[129,115569,114138],{"class":139},[129,115571,30824],{"class":188},[129,115573,114143],{"class":139},[14,115575,115576,115577,115579,115580,101019,115583,115586],{},"把 MuJoCo 模型和状态保存到 ",[126,115578,30824],{}," 上。",[126,115581,115582],{},"self.model",[126,115584,115585],{},"self.data"," 表示这个环境对象自己的模型和状态。",[120,115588,115589],{"className":30379,"code":115249,"language":30381,"meta":42,"style":42},[126,115590,115591,115605],{"__ignoreMap":42},[129,115592,115593,115595,115597,115599,115601,115603],{"class":131,"line":132},[129,115594,30824],{"class":188},[129,115596,114154],{"class":139},[129,115598,185],{"class":135},[129,115600,114159],{"class":139},[129,115602,89555],{"class":188},[129,115604,146],{"class":139},[129,115606,115607,115609,115611,115613,115615,115617],{"class":131,"line":51},[129,115608,30824],{"class":188},[129,115610,114175],{"class":139},[129,115612,185],{"class":135},[129,115614,114159],{"class":139},[129,115616,89555],{"class":188},[129,115618,146],{"class":139},[14,115620,115621,115622,101019,115625,115628],{},"提前查好 tip 和 target 的 site ID。这样 ",[126,115623,115624],{},"_get_obs",[126,115626,115627],{},"_get_reward"," 里就不用每次按名字查找。",[120,115630,115632],{"className":30379,"code":115631,"language":30381,"meta":42,"style":42},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[126,115633,115634,115644,115654],{"__ignoreMap":42},[129,115635,115636,115638,115640,115642],{"class":131,"line":132},[129,115637,30824],{"class":188},[129,115639,113868],{"class":139},[129,115641,185],{"class":135},[129,115643,54428],{"class":188},[129,115645,115646,115648,115650,115652],{"class":131,"line":51},[129,115647,30824],{"class":188},[129,115649,114247],{"class":139},[129,115651,185],{"class":135},[129,115653,114252],{"class":188},[129,115655,115656,115658,115660,115662],{"class":131,"line":1194},[129,115657,30824],{"class":188},[129,115659,113707],{"class":139},[129,115661,185],{"class":135},[129,115663,47334],{"class":188},[14,115665,115666,115669,115670,115673,115674,115677],{},[126,115667,115668],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[126,115671,115672],{},"max_steps"," 是一个 episode 最多运行多少步。",[126,115675,115676],{},"steps"," 记录当前 episode 已经走了多少步。",[120,115679,115680],{"className":30379,"code":113746,"language":30381,"meta":42,"style":42},[126,115681,115682],{"__ignoreMap":42},[129,115683,115684,115686,115688,115690,115692,115694,115696,115698,115700,115702,115704,115706,115708,115710,115712,115714,115716,115718,115720,115722],{"class":131,"line":132},[129,115685,30824],{"class":188},[129,115687,113755],{"class":139},[129,115689,185],{"class":135},[129,115691,113760],{"class":139},[129,115693,113763],{"class":5231},[129,115695,113766],{"class":135},[129,115697,102404],{"class":188},[129,115699,12450],{"class":139},[129,115701,113773],{"class":5231},[129,115703,185],{"class":135},[129,115705,102404],{"class":188},[129,115707,12450],{"class":139},[129,115709,95964],{"class":5231},[129,115711,185],{"class":135},[129,115713,140],{"class":139},[129,115715,217],{"class":188},[129,115717,113790],{"class":139},[129,115719,93501],{"class":5231},[129,115721,185],{"class":135},[129,115723,113797],{"class":139},[14,115725,115726,115727,115730,115731,101019,115734,115737],{},"定义动作空间。",[126,115728,115729],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[126,115732,115733],{},"low=-1.0",[126,115735,115736],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[120,115739,115740],{"className":30379,"code":113807,"language":30381,"meta":42,"style":42},[126,115741,115742],{"__ignoreMap":42},[129,115743,115744,115746,115748,115750,115752,115754,115756,115758,115760,115762,115764,115766,115768,115770,115772,115774,115776,115778],{"class":131,"line":132},[129,115745,30824],{"class":188},[129,115747,113816],{"class":139},[129,115749,185],{"class":135},[129,115751,113760],{"class":139},[129,115753,113763],{"class":5231},[129,115755,113766],{"class":135},[129,115757,113827],{"class":139},[129,115759,113773],{"class":5231},[129,115761,185],{"class":135},[129,115763,113827],{"class":139},[129,115765,95964],{"class":5231},[129,115767,185],{"class":135},[129,115769,140],{"class":139},[129,115771,585],{"class":188},[129,115773,113790],{"class":139},[129,115775,93501],{"class":5231},[129,115777,185],{"class":135},[129,115779,113797],{"class":139},[14,115781,115782,115783,115786,115787,115790],{},"定义观测空间。",[126,115784,115785],{},"shape=(10,)"," 表示观测是 10 个数。",[126,115788,115789],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[120,115792,115794],{"className":30379,"code":115793,"language":30381,"meta":42,"style":42},"def _get_obs(self) -> np.ndarray:\n",[126,115795,115796],{"__ignoreMap":42},[129,115797,115798,115800,115802],{"class":131,"line":132},[129,115799,31948],{"class":135},[129,115801,114357],{"class":1977},[129,115803,114360],{"class":139},[14,115805,115806,115807,115809],{},"定义内部函数，用来生成观测。函数名前面的 ",[126,115808,1131],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[120,115811,115813],{"className":30379,"code":115812,"language":30381,"meta":42,"style":42},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[126,115814,115815,115829],{"__ignoreMap":42},[129,115816,115817,115819,115821,115823,115825,115827],{"class":131,"line":132},[129,115818,111569],{"class":139},[129,115820,185],{"class":135},[129,115822,38874],{"class":188},[129,115824,114371],{"class":139},[129,115826,30824],{"class":188},[129,115828,114376],{"class":139},[129,115830,115831,115833,115835,115837,115839,115841],{"class":131,"line":51},[129,115832,111579],{"class":139},[129,115834,185],{"class":135},[129,115836,38874],{"class":188},[129,115838,114371],{"class":139},[129,115840,30824],{"class":188},[129,115842,114391],{"class":139},[14,115844,115845],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[120,115847,115849],{"className":30379,"code":115848,"language":30381,"meta":42,"style":42},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[126,115850,115851,115867],{"__ignoreMap":42},[129,115852,115853,115855,115857,115859,115861,115863,115865],{"class":131,"line":132},[129,115854,110855],{"class":139},[129,115856,185],{"class":135},[129,115858,114400],{"class":139},[129,115860,30824],{"class":188},[129,115862,114405],{"class":139},[129,115864,30824],{"class":188},[129,115866,114410],{"class":139},[129,115868,115869,115871],{"class":131,"line":51},[129,115870,17061],{"class":135},[129,115872,114417],{"class":139},[14,115874,115875,115876,115879,115880,115882],{},"拼接观测，并转换成 ",[126,115877,115878],{},"float32","。很多强化学习库默认使用 ",[126,115881,115878],{},"，所以这里主动转换。",[120,115884,115885],{"className":30379,"code":115288,"language":30381,"meta":42,"style":42},[126,115886,115887],{"__ignoreMap":42},[129,115888,115889,115891,115893,115895,115897,115899,115901,115903,115905,115907,115909,115911,115913,115915,115917,115919,115921],{"class":131,"line":132},[129,115890,31948],{"class":135},[129,115892,114523],{"class":1977},[129,115894,114526],{"class":139},[129,115896,594],{"class":135},[129,115898,114531],{"class":139},[129,115900,143],{"class":188},[129,115902,25110],{"class":135},[129,115904,38934],{"class":188},[129,115906,13579],{"class":135},[129,115908,38934],{"class":188},[129,115910,114544],{"class":139},[129,115912,114547],{"class":188},[129,115914,25110],{"class":135},[129,115916,38934],{"class":188},[129,115918,13579],{"class":135},[129,115920,38934],{"class":188},[129,115922,30787],{"class":139},[14,115924,115925,115926,115928,115929,115932],{},"定义 reset。",[126,115927,114567],{}," 用来控制随机数，保证实验可以复现。",[126,115930,115931],{},"options"," 用来接收额外配置，本章暂时不用。",[120,115934,115936],{"className":30379,"code":115935,"language":30381,"meta":42,"style":42},"super().reset(seed=seed)\n",[126,115937,115938],{"__ignoreMap":42},[129,115939,115940,115942,115944,115946,115948],{"class":131,"line":132},[129,115941,115529],{"class":188},[129,115943,114564],{"class":139},[129,115945,114567],{"class":5231},[129,115947,185],{"class":135},[129,115949,114572],{"class":139},[14,115951,115952,115953,115956],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[126,115954,115955],{},"self.np_random"," 生成可复现的随机数。",[120,115958,115960],{"className":30379,"code":115959,"language":30381,"meta":42,"style":42},"mujoco.mj_resetData(self.model, self.data)\n",[126,115961,115962],{"__ignoreMap":42},[129,115963,115964,115967,115969,115971,115973],{"class":131,"line":132},[129,115965,115966],{"class":139},"mujoco.mj_resetData(",[129,115968,30824],{"class":188},[129,115970,114582],{"class":139},[129,115972,30824],{"class":188},[129,115974,114587],{"class":139},[14,115976,115977],{},"把 MuJoCo 状态重置到默认状态。",[120,115979,115981],{"className":30379,"code":115980,"language":30381,"meta":42,"style":42},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[126,115982,115983],{"__ignoreMap":42},[129,115984,115985,115987,115989,115991,115993,115995,115997,115999,116001,116003,116005,116007,116009,116011,116013,116015,116017],{"class":131,"line":132},[129,115986,30824],{"class":188},[129,115988,114598],{"class":139},[129,115990,185],{"class":135},[129,115992,38874],{"class":188},[129,115994,114605],{"class":139},[129,115996,113763],{"class":5231},[129,115998,113766],{"class":135},[129,116000,86211],{"class":188},[129,116002,12450],{"class":139},[129,116004,113773],{"class":5231},[129,116006,185],{"class":135},[129,116008,86211],{"class":188},[129,116010,12450],{"class":139},[129,116012,31497],{"class":5231},[129,116014,185],{"class":135},[129,116016,30824],{"class":188},[129,116018,114630],{"class":139},[14,116020,115342,116021,116024,116025,116028,116029,116031],{},[126,116022,116023],{},"[:]"," 表示修改整个数组。",[126,116026,116027],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[126,116030,102151],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[120,116033,116035],{"className":30379,"code":116034,"language":30381,"meta":42,"style":42},"self.data.qvel[:] = 0.0\n",[126,116036,116037],{"__ignoreMap":42},[129,116038,116039,116041,116043,116045],{"class":131,"line":132},[129,116040,30824],{"class":188},[129,116042,114637],{"class":139},[129,116044,185],{"class":135},[129,116046,104762],{"class":188},[14,116048,116049],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[120,116051,116053],{"className":30379,"code":116052,"language":30381,"meta":42,"style":42},"self.steps = 0\nreturn self._get_obs(), {}\n",[126,116054,116055,116065],{"__ignoreMap":42},[129,116056,116057,116059,116061,116063],{"class":131,"line":132},[129,116058,30824],{"class":188},[129,116060,113707],{"class":139},[129,116062,185],{"class":135},[129,116064,47334],{"class":188},[129,116066,116067,116069,116071],{"class":131,"line":51},[129,116068,17061],{"class":135},[129,116070,38874],{"class":188},[129,116072,114677],{"class":139},[14,116074,116075],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[120,116077,116078],{"className":30379,"code":115351,"language":30381,"meta":42,"style":42},[126,116079,116080],{"__ignoreMap":42},[129,116081,116082,116084,116086],{"class":131,"line":132},[129,116083,31948],{"class":135},[129,116085,114688],{"class":1977},[129,116087,114691],{"class":139},[14,116089,116090],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[120,116092,116094],{"className":30379,"code":116093,"language":30381,"meta":42,"style":42},"action = np.asarray(action, dtype=np.float32)\n",[126,116095,116096],{"__ignoreMap":42},[129,116097,116098,116100,116102,116104,116106,116108],{"class":131,"line":132},[129,116099,107443],{"class":139},[129,116101,185],{"class":135},[129,116103,114700],{"class":139},[129,116105,93501],{"class":5231},[129,116107,185],{"class":135},[129,116109,113797],{"class":139},[14,116111,116112,116113,28386],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[126,116114,115878],{},[120,116116,116118],{"className":30379,"code":116117,"language":30381,"meta":42,"style":42},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[126,116119,116120],{"__ignoreMap":42},[129,116121,116122,116124,116126,116128,116130,116132,116134],{"class":131,"line":132},[129,116123,107443],{"class":139},[129,116125,185],{"class":135},[129,116127,107448],{"class":139},[129,116129,30824],{"class":188},[129,116131,114719],{"class":139},[129,116133,30824],{"class":188},[129,116135,114724],{"class":139},[14,116137,116138],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[120,116140,116142],{"className":30379,"code":116141,"language":30381,"meta":42,"style":42},"self.data.ctrl[:] = action\n",[126,116143,116144],{"__ignoreMap":42},[129,116145,116146,116148,116150,116152],{"class":131,"line":132},[129,116147,30824],{"class":188},[129,116149,114735],{"class":139},[129,116151,185],{"class":135},[129,116153,107471],{"class":139},[14,116155,116156],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[120,116158,116160],{"className":30379,"code":116159,"language":30381,"meta":42,"style":42},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[126,116161,116162,116178],{"__ignoreMap":42},[129,116163,116164,116166,116168,116170,116172,116174,116176],{"class":131,"line":132},[129,116165,3039],{"class":135},[129,116167,101502],{"class":139},[129,116169,26044],{"class":135},[129,116171,32444],{"class":188},[129,116173,140],{"class":139},[129,116175,30824],{"class":188},[129,116177,114756],{"class":139},[129,116179,116180,116183,116185,116187,116189],{"class":131,"line":51},[129,116181,116182],{"class":139},"    mujoco.mj_step(",[129,116184,30824],{"class":188},[129,116186,114582],{"class":139},[129,116188,30824],{"class":188},[129,116190,114587],{"class":139},[14,116192,116193,116194,116197,116198,116200,116201,28386],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[126,116195,116196],{},"frame_skip=5","，所以外部调用一次 ",[126,116199,113878],{},"，内部实际执行 5 次 ",[126,116202,101216],{},[120,116204,116206],{"className":30379,"code":116205,"language":30381,"meta":42,"style":42},"self.steps += 1\n",[126,116207,116208],{"__ignoreMap":42},[129,116209,116210,116212,116214,116216],{"class":131,"line":132},[129,116211,30824],{"class":188},[129,116213,113707],{"class":139},[129,116215,9492],{"class":135},[129,116217,55700],{"class":188},[14,116219,116220],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[120,116222,116224],{"className":30379,"code":116223,"language":30381,"meta":42,"style":42},"obs = self._get_obs()\nreward = self._get_reward()\n",[126,116225,116226,116236],{"__ignoreMap":42},[129,116227,116228,116230,116232,116234],{"class":131,"line":132},[129,116229,110855],{"class":139},[129,116231,185],{"class":135},[129,116233,38874],{"class":188},[129,116235,114798],{"class":139},[129,116237,116238,116240,116242,116244],{"class":131,"line":51},[129,116239,111006],{"class":139},[129,116241,185],{"class":135},[129,116243,38874],{"class":188},[129,116245,114809],{"class":139},[14,116247,116248],{},"计算新的观测和奖励。",[120,116250,116252],{"className":30379,"code":116251,"language":30381,"meta":42,"style":42},"dist = float(np.linalg.norm(tip - target))\n",[126,116253,116254],{"__ignoreMap":42},[129,116255,116256,116258,116260,116262,116264,116266],{"class":131,"line":132},[129,116257,111597],{"class":139},[129,116259,185],{"class":135},[129,116261,109798],{"class":188},[129,116263,114852],{"class":139},[129,116265,671],{"class":135},[129,116267,114857],{"class":139},[14,116269,116270],{},"计算末端到目标的距离，并转换成 Python float。",[120,116272,116273],{"className":30379,"code":113678,"language":30381,"meta":42,"style":42},[126,116274,116275,116287],{"__ignoreMap":42},[129,116276,116277,116279,116281,116283,116285],{"class":131,"line":132},[129,116278,113685],{"class":139},[129,116280,185],{"class":135},[129,116282,113690],{"class":139},[129,116284,1049],{"class":135},[129,116286,113695],{"class":188},[129,116288,116289,116291,116293,116295,116297,116299,116301],{"class":131,"line":51},[129,116290,113700],{"class":139},[129,116292,185],{"class":135},[129,116294,38874],{"class":188},[129,116296,113707],{"class":139},[129,116298,1724],{"class":135},[129,116300,38874],{"class":188},[129,116302,113714],{"class":139},[14,116304,116305],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[120,116307,116309],{"className":30379,"code":116308,"language":30381,"meta":42,"style":42},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[126,116310,116311,116324],{"__ignoreMap":42},[129,116312,116313,116316,116318,116320,116322],{"class":131,"line":132},[129,116314,116315],{"class":139},"info ",[129,116317,185],{"class":135},[129,116319,4462],{"class":139},[129,116321,114903],{"class":244},[129,116323,114906],{"class":139},[129,116325,116326,116328],{"class":131,"line":51},[129,116327,17061],{"class":135},[129,116329,114913],{"class":139},[14,116331,116332,116335],{},[126,116333,116334],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[120,116337,116339],{"className":30379,"code":116338,"language":30381,"meta":42,"style":42},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[126,116340,116341,116350],{"__ignoreMap":42},[129,116342,116343,116346,116348],{"class":131,"line":132},[129,116344,116345],{"class":139},"env ",[129,116347,185],{"class":135},[129,116349,114943],{"class":139},[129,116351,116352,116354,116356,116358,116360,116362,116364],{"class":131,"line":51},[129,116353,113401],{"class":139},[129,116355,185],{"class":135},[129,116357,114953],{"class":139},[129,116359,114567],{"class":5231},[129,116361,185],{"class":135},[129,116363,331],{"class":188},[129,116365,146],{"class":139},[14,116367,116368,116369,116372],{},"创建环境并重置。",[126,116370,116371],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[120,116374,116376],{"className":30379,"code":116375,"language":30381,"meta":42,"style":42},"action = env.action_space.sample()\n",[126,116377,116378],{"__ignoreMap":42},[129,116379,116380,116382,116384],{"class":131,"line":132},[129,116381,107443],{"class":139},[129,116383,185],{"class":135},[129,116385,115022],{"class":139},[14,116387,116388],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[71,116390,102317],{"id":102316},[14,116392,105485],{},[120,116394,116397],{"className":116395,"code":116396,"language":5202,"meta":42},[5200],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[126,116398,116396],{"__ignoreMap":42},[14,116400,116401],{},"这个环境已经具备强化学习环境的基本结构。",[14,116403,116404],{},"主函数里使用随机动作：",[120,116406,116407],{"className":30379,"code":116375,"language":30381,"meta":42,"style":42},[126,116408,116409],{"__ignoreMap":42},[129,116410,116411,116413,116415],{"class":131,"line":132},[129,116412,107443],{"class":139},[129,116414,185],{"class":135},[129,116416,115022],{"class":139},[14,116418,116419],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[71,116421,102349],{"id":102348},[83,116423,116424,116427,116433,116442,116451,116460,116466],{},[86,116425,116426],{},"运行程序。",[86,116428,116429,116430,28386],{},"确认 ",[126,116431,116432],{},"obs.shape == (10,)",[86,116434,111182,116435,116438,116439,28386],{},[126,116436,116437],{},"env.action_space","，应类似 ",[126,116440,116441],{},"Box(-1.0, 1.0, (2,), float32)",[86,116443,105586,116444,116447,116448,28386],{},[126,116445,116446],{},"self.max_steps = 10","，确认环境会更快 ",[126,116449,116450],{},"truncated=True",[86,116452,102412,116453,102415,116456,116459],{},[126,116454,116455],{},"terminated = dist \u003C 0.05",[126,116457,116458],{},"dist \u003C 0.2","，观察是否更容易结束。",[86,116461,102412,116462,116465],{},[126,116463,116464],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[86,116467,116468,116469,116471,116472,116475],{},"在 ",[126,116470,116334],{}," 里加入 ",[126,116473,116474],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[71,116477,102454],{"id":102453},[100,116479,116481],{"id":116480},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116483,116484,116485,116487],{},"Gymnasium 的 ",[126,116486,107135],{}," 返回 5 个值:",[120,116489,116491],{"className":30379,"code":116490,"language":30381,"meta":42,"style":42},"obs, reward, terminated, truncated, info\n",[126,116492,116493],{"__ignoreMap":42},[129,116494,116495],{"class":131,"line":132},[129,116496,116490],{"class":139},[14,116498,116499],{},"不是旧 Gym 的 4 个值。",[100,116501,116503,116506],{"id":116502},"datactrl-action-维度错误",[126,116504,116505],{},"data.ctrl[:] = action"," 维度错误",[14,116508,102524],{},[120,116510,116512],{"className":30379,"code":116511,"language":30381,"meta":42,"style":42},"print(self.model.nu)\nprint(action.shape)\n",[126,116513,116514,116525],{"__ignoreMap":42},[129,116515,116516,116518,116520,116522],{"class":131,"line":132},[129,116517,30416],{"class":188},[129,116519,140],{"class":139},[129,116521,30824],{"class":188},[129,116523,116524],{"class":139},".model.nu)\n",[129,116526,116527,116529],{"class":131,"line":51},[129,116528,30416],{"class":188},[129,116530,116531],{"class":139},"(action.shape)\n",[14,116533,116534],{},"两者必须匹配。",[100,116536,116538],{"id":116537},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116540,102463],{},[120,116542,116544],{"className":30379,"code":116543,"language":30381,"meta":42,"style":42},"mujoco.mj_forward(self.model, self.data)\n",[126,116545,116546],{"__ignoreMap":42},[129,116547,116548,116551,116553,116555,116557],{"class":131,"line":132},[129,116549,116550],{"class":139},"mujoco.mj_forward(",[129,116552,30824],{"class":188},[129,116554,114582],{"class":139},[129,116556,30824],{"class":188},[129,116558,114587],{"class":139},[100,116560,116562,116564],{"id":116561},"observation_space-维度和-obs-不一致",[126,116563,113601],{}," 维度和 obs 不一致",[14,116566,102576],{},[120,116568,116570],{"className":30379,"code":116569,"language":30381,"meta":42,"style":42},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[126,116571,116572,116582,116589],{"__ignoreMap":42},[129,116573,116574,116576,116578,116580],{"class":131,"line":132},[129,116575,110855],{"class":139},[129,116577,185],{"class":135},[129,116579,38874],{"class":188},[129,116581,114798],{"class":139},[129,116583,116584,116586],{"class":131,"line":51},[129,116585,30416],{"class":188},[129,116587,116588],{"class":139},"(obs.shape)\n",[129,116590,116591,116593,116595,116597],{"class":131,"line":1194},[129,116592,30416],{"class":188},[129,116594,140],{"class":139},[129,116596,30824],{"class":188},[129,116598,116599],{"class":139},".observation_space.shape)\n",[14,116601,116602],{},"两者必须一致。本章观测是：",[120,116604,116607],{"className":116605,"code":116606,"language":5202,"meta":42},[5200],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[126,116608,116606],{"__ignoreMap":42},[100,116610,116612],{"id":116611},"action-超过范围","action 超过范围",[14,116614,116615],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[120,116617,116618],{"className":30379,"code":116117,"language":30381,"meta":42,"style":42},[126,116619,116620],{"__ignoreMap":42},[129,116621,116622,116624,116626,116628,116630,116632,116634],{"class":131,"line":132},[129,116623,107443],{"class":139},[129,116625,185],{"class":135},[129,116627,107448],{"class":139},[129,116629,30824],{"class":188},[129,116631,114719],{"class":139},[129,116633,30824],{"class":188},[129,116635,114724],{"class":139},[14,116637,116638,116639,28386],{},"这能避免无效动作直接写入 ",[126,116640,101077],{},[100,116642,116644],{"id":116643},"忘记返回-info","忘记返回 info",[14,116646,116484,116647,101019,116649,116651],{},[126,116648,70057],{},[126,116650,107135],{}," 都会返回 info：",[120,116653,116654],{"className":30379,"code":113394,"language":30381,"meta":42,"style":42},[126,116655,116656,116664],{"__ignoreMap":42},[129,116657,116658,116660,116662],{"class":131,"line":132},[129,116659,113401],{"class":139},[129,116661,185],{"class":135},[129,116663,113406],{"class":139},[129,116665,116666,116668,116670],{"class":131,"line":51},[129,116667,113411],{"class":139},[129,116669,185],{"class":135},[129,116671,113416],{"class":139},[14,116673,116674,116675,28386],{},"即使暂时没有额外信息，也返回 ",[126,116676,32460],{},[71,116678,116680],{"id":116679},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116682,116683],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[83,116685,116686,116689,116692,116695,116698,116701],{},[86,116687,116688],{},"更稳定的 reward。",[86,116690,116691],{},"合理的 episode 长度。",[86,116693,116694],{},"可重复的随机目标采样。",[86,116696,116697],{},"render 接口。",[86,116699,116700],{},"环境注册代码。",[86,116702,116703],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116705,116706],{},"如果只是自己写训练循环，最小形式是：",[120,116708,116710],{"className":30379,"code":116709,"language":30381,"meta":42,"style":42},"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",[126,116711,116712,116720,116736,116740,116756,116765,116774,116784],{"__ignoreMap":42},[129,116713,116714,116716,116718],{"class":131,"line":132},[129,116715,116345],{"class":139},[129,116717,185],{"class":135},[129,116719,114943],{"class":139},[129,116721,116722,116724,116726,116728,116730,116732,116734],{"class":131,"line":51},[129,116723,113401],{"class":139},[129,116725,185],{"class":135},[129,116727,114953],{"class":139},[129,116729,114567],{"class":5231},[129,116731,185],{"class":135},[129,116733,331],{"class":188},[129,116735,146],{"class":139},[129,116737,116738],{"class":131,"line":1194},[129,116739,2414],{"emptyLinePlaceholder":56},[129,116741,116742,116744,116746,116748,116750,116752,116754],{"class":131,"line":1209},[129,116743,3039],{"class":135},[129,116745,101502],{"class":139},[129,116747,26044],{"class":135},[129,116749,32444],{"class":188},[129,116751,140],{"class":139},[129,116753,6425],{"class":188},[129,116755,30787],{"class":139},[129,116757,116758,116761,116763],{"class":131,"line":1215},[129,116759,116760],{"class":139},"    action ",[129,116762,185],{"class":135},[129,116764,115022],{"class":139},[129,116766,116767,116770,116772],{"class":131,"line":1229},[129,116768,116769],{"class":139},"    obs, reward, terminated, truncated, info ",[129,116771,185],{"class":135},[129,116773,113416],{"class":139},[129,116775,116776,116778,116780,116782],{"class":131,"line":1235},[129,116777,3115],{"class":135},[129,116779,115088],{"class":139},[129,116781,115091],{"class":135},[129,116783,115094],{"class":139},[129,116785,116786,116789,116791],{"class":131,"line":1326},[129,116787,116788],{"class":139},"        obs, info ",[129,116790,185],{"class":135},[129,116792,113406],{"class":139},[71,116794,116796],{"id":116795},"_9本章小结","9.本章小结",[14,116798,116799],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[120,116801,116804],{"className":116802,"code":116803,"language":5202,"meta":42},[5200],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[126,116805,116803],{"__ignoreMap":42},[14,116807,116808],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5141,116810,116811],{},"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":42,"searchDepth":51,"depth":51,"links":116813},[116814,116815,116816,116823,116827,116828,116829,116839,116840],{"id":100647,"depth":51,"text":100648},{"id":100770,"depth":51,"text":100771},{"id":101045,"depth":51,"text":101046,"children":116817},[116818,116820,116822],{"id":113625,"depth":1194,"text":116819},"terminated 和 truncated 的区别",{"id":113728,"depth":1194,"text":116821},"observation_space 和 action_space",{"id":113855,"depth":1194,"text":113856},{"id":101253,"depth":51,"text":101254,"children":116824},[116825,116826],{"id":101573,"depth":1194,"text":101573},{"id":101709,"depth":1194,"text":101709},{"id":102316,"depth":51,"text":102317},{"id":102348,"depth":51,"text":102349},{"id":102453,"depth":51,"text":102454,"children":116830},[116831,116832,116834,116835,116837,116838],{"id":116480,"depth":1194,"text":116481},{"id":116502,"depth":1194,"text":116833},"data.ctrl[:] = action 维度错误",{"id":116537,"depth":1194,"text":116538},{"id":116561,"depth":1194,"text":116836},"observation_space 维度和 obs 不一致",{"id":116611,"depth":1194,"text":116612},{"id":116643,"depth":1194,"text":116644},{"id":116679,"depth":51,"text":116680},{"id":116795,"depth":51,"text":116796},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113378,"description":42},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116847,"title":116848,"body":116849,"description":117272,"extension":54,"meta":117273,"navigation":56,"path":117274,"seo":117275,"stem":117276,"__hash__":117277},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116850,"toc":117262},[116851,116855,116858,116861,116881,116887,116893,116903,116906,116909,116929,116932,116936,116939,116945,116948,116962,116965,116968,117042,117045,117051,117054,117077,117080,117130,117133,117139,117142,117145,117148,117167,117170,117176,117179,117182,117185,117205,117208,117211,117214,117259],[10,116852,116854],{"id":116853},"mujoco-学习","MuJoCo 学习",[14,116856,116857],{},"初版",[14,116859,116860],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[83,116862,116863,116866,116869,116878],{},[86,116864,116865],{},"MuJoCo 模型文件在描述什么。",[86,116867,116868],{},"Python 代码怎样读取和推进仿真。",[86,116870,116871,352,116873,352,116875,116877],{},[126,116872,104031],{},[126,116874,104361],{},[126,116876,104364],{}," 这些数组为什么重要。",[86,116879,116880],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116882,116883,116884,116886],{},"默认环境为 Fedora 44、Python >= 3.10、",[126,116885,101028],{}," 官方 Python bindings。",[14,116888,116889,116890,116892],{},"注意：本文禁止使用 ",[126,116891,101013],{},"。所有示例均使用：",[120,116894,116895],{"className":30379,"code":101579,"language":30381,"meta":42,"style":42},[126,116896,116897],{"__ignoreMap":42},[129,116898,116899,116901],{"class":131,"line":132},[129,116900,30393],{"class":135},[129,116902,101302],{"class":139},[71,116904,116905],{"id":116905},"适合谁阅读",[14,116907,116908],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[83,116910,116911,116914,116917,116920],{},[86,116912,116913],{},"没学过 MuJoCo，只会一点 Python。",[86,116915,116916],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[86,116918,116919],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[86,116921,116922,116923,116925,116926,116928],{},"以前接触过 ",[126,116924,101013],{},"，现在想迁移到官方 ",[126,116927,101022],{}," Python bindings。",[14,116930,116931],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[71,116933,116935],{"id":116934},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116937,116938],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[120,116940,116943],{"className":116941,"code":116942,"language":5202,"meta":42},[5200],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[126,116944,116942],{"__ignoreMap":42},[14,116946,116947],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[83,116949,116950,116953,116956,116959],{},[86,116951,116952],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[86,116954,116955],{},"快速测试控制算法，不必一开始就上真实机器人。",[86,116957,116958],{},"生成强化学习环境。",[86,116960,116961],{},"采集状态、动作、图像、奖励等训练数据。",[71,116963,116964],{"id":116964},"学习前的心智模型",[14,116966,116967],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[277,116969,116970,116982],{},[280,116971,116972],{},[283,116973,116974,116977,116980],{},[286,116975,116976],{"align":23751},"部分",[286,116978,116979],{"align":23751},"负责什么",[286,116981,21202],{"align":23751},[324,116983,116984,116995,117007,117019,117031],{},[283,116985,116986,116989,116992],{},[329,116987,116988],{"align":23751},"MJCF XML",[329,116990,116991],{"align":23751},"定义世界和机器人结构",[329,116993,116994],{"align":23751},"地面、盒子、关节、电机、摄像头",[283,116996,116997,117001,117004],{},[329,116998,116999],{"align":23751},[126,117000,100710],{},[329,117002,117003],{"align":23751},"编译后的静态模型",[329,117005,117006],{"align":23751},"有几个关节、有几个电机、时间步长是多少",[283,117008,117009,117013,117016],{},[329,117010,117011],{"align":23751},[126,117012,100720],{},[329,117014,117015],{"align":23751},"运行中的动态状态",[329,117017,117018],{"align":23751},"当前时间、位置、速度、电机输入",[283,117020,117021,117025,117028],{},[329,117022,117023],{"align":23751},[126,117024,101216],{},[329,117026,117027],{"align":23751},"推进一步物理仿真",[329,117029,117030],{"align":23751},"根据重力、力、碰撞更新状态",[283,117032,117033,117036,117039],{},[329,117034,117035],{"align":23751},"Viewer \u002F Renderer",[329,117037,117038],{"align":23751},"把仿真显示出来",[329,117040,117041],{"align":23751},"打开窗口或保存图片",[14,117043,117044],{},"一句话总结：",[120,117046,117049],{"className":117047,"code":117048,"language":5202,"meta":42},[5200],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[126,117050,117048],{"__ignoreMap":42},[14,117052,117053],{},"参考来源：",[1146,117055,117056,117063,117070],{},[86,117057,117058,117059],{},"MuJoCo Python 官方文档：",[20,117060,117061],{"href":117061,"rel":117062},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24],[86,117064,117065,117066],{},"MuJoCo XML Reference：",[20,117067,117068],{"href":117068,"rel":117069},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24],[86,117071,117072,117073],{},"MuJoCo Overview：",[20,117074,117075],{"href":117075,"rel":117076},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24],[71,117078,117079],{"id":117079},"章节目录",[83,117081,117082,117088,117094,117100,117106,117112,117118,117124],{},[86,117083,117084],{},[20,117085,117087],{"href":117086},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[86,117089,117090],{},[20,117091,117093],{"href":117092},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[86,117095,117096],{},[20,117097,117099],{"href":117098},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[86,117101,117102],{},[20,117103,117105],{"href":117104},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[86,117107,117108],{},[20,117109,117111],{"href":117110},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[86,117113,117114],{},[20,117115,117117],{"href":117116},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[86,117119,117120],{},[20,117121,117123],{"href":117122},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[86,117125,117126],{},[20,117127,117129],{"href":117128},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[71,117131,117132],{"id":117132},"推荐学习路线",[120,117134,117137],{"className":117135,"code":117136,"language":5202,"meta":42},[5200],"环境安装\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",[126,117138,117136],{"__ignoreMap":42},[14,117140,117141],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[71,117143,117144],{"id":117144},"建议的目录结构",[14,117146,117147],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[120,117149,117151],{"className":23837,"code":117150,"language":23839,"meta":42,"style":42},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[126,117152,117153,117161],{"__ignoreMap":42},[129,117154,117155,117157,117159],{"class":131,"line":132},[129,117156,101267],{"class":1977},[129,117158,29217],{"class":188},[129,117160,101272],{"class":244},[129,117162,117163,117165],{"class":131,"line":51},[129,117164,101277],{"class":188},[129,117166,101272],{"class":244},[14,117168,117169],{},"每一章的代码都单独保存：",[120,117171,117174],{"className":117172,"code":117173,"language":5202,"meta":42},[5200],"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",[126,117175,117173],{"__ignoreMap":42},[14,117177,117178],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[71,117180,117181],{"id":117181},"学习方法",[14,117183,117184],{},"每章建议按这个顺序操作：",[83,117186,117187,117190,117193,117196,117199,117202],{},[86,117188,117189],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[86,117191,117192],{},"复制最小可运行代码，保存成指定文件。",[86,117194,117195],{},"运行代码，确认没有报错。",[86,117197,117198],{},"对照“运行结果说明”理解输出。",[86,117200,117201],{},"做“验证步骤”，主动改一两个参数。",[86,117203,117204],{},"遇到报错先看“常见错误与解决方案”。",[14,117206,117207],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[71,117209,117210],{"id":117210},"全局排错顺序",[14,117212,117213],{},"遇到问题时，按下面顺序查：",[83,117215,117216,117222,117228,117233,117236,117239,117246,117256],{},[86,117217,117218,117219],{},"Python 环境是否激活：",[126,117220,117221],{},"which python",[86,117223,117224,117225],{},"MuJoCo 是否能导入：",[126,117226,117227],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[86,117229,117230,117231],{},"是否误装了 ",[126,117232,101013],{},[86,117234,117235],{},"XML 标签是否闭合、属性是否拼写正确",[86,117237,117238],{},"actuator 引用的 joint 名字是否存在",[86,117240,117241,117243,117244],{},[126,117242,101077],{}," 的长度是否等于 ",[126,117245,102159],{},[86,117247,105586,117248,82540,117250,117252,117253],{},[126,117249,104031],{},[126,117251,104361],{}," 后是否调用了 ",[126,117254,117255],{},"mujoco.mj_forward",[86,117257,117258],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5141,117260,117261],{},"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":42,"searchDepth":51,"depth":51,"links":117263},[117264,117265,117266,117267,117268,117269,117270,117271],{"id":116905,"depth":51,"text":116905},{"id":116934,"depth":51,"text":116935},{"id":116964,"depth":51,"text":116964},{"id":117079,"depth":51,"text":117079},{"id":117132,"depth":51,"text":117132},{"id":117144,"depth":51,"text":117144},{"id":117181,"depth":51,"text":117181},{"id":117210,"depth":51,"text":117210},"仿真搭建。",{"category":23393},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116848,"description":117272},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117279,"title":117280,"body":117281,"description":53,"extension":54,"meta":117736,"navigation":56,"path":117737,"seo":117738,"stem":117739,"__hash__":117740},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117282,"toc":117734},[117283,117286,117289,117295,117731],[10,117284,117280],{"id":117285},"_1-最常用的基本操作更新",[14,117287,117288],{},"装linux系统教程：",[14,117290,117291],{},[20,117292,117293],{"href":117293,"rel":117294},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24],[120,117296,117300],{"className":117297,"code":117298,"language":117299,"meta":42,"style":42},"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",[126,117301,117302,117307,117312,117321,117326,117335,117340,117360,117365,117376,117381,117390,117395,117423,117428,117447,117452,117471,117475,117480,117496,117500,117505,117535,117539,117544,117560,117564,117569,117584,117588,117593,117609,117613,117618,117630,117642,117646,117651,117668,117672,117677,117695,117699,117704,117713,117717,117722],{"__ignoreMap":42},[129,117303,117304],{"class":131,"line":132},[129,117305,117306],{"class":198},"#更新相关的知识\n",[129,117308,117309],{"class":131,"line":51},[129,117310,117311],{"class":198},"# 更新软件包列表（从服务器获取最新软件信息）\n",[129,117313,117314,117316,117319],{"class":131,"line":1194},[129,117315,24577],{"class":1977},[129,117317,117318],{"class":244}," apt",[129,117320,26243],{"class":244},[129,117322,117323],{"class":131,"line":1209},[129,117324,117325],{"class":198},"# 升级所有可更新的软件包（不删除旧包）\n",[129,117327,117328,117330,117332],{"class":131,"line":1215},[129,117329,24577],{"class":1977},[129,117331,117318],{"class":244},[129,117333,117334],{"class":244}," upgrade\n",[129,117336,117337],{"class":131,"line":1229},[129,117338,117339],{"class":198},"#更新和升级软件包\n",[129,117341,117342,117344,117346,117349,117351,117353,117355,117358],{"class":131,"line":1235},[129,117343,24577],{"class":1977},[129,117345,117318],{"class":244},[129,117347,117348],{"class":244}," update",[129,117350,26191],{"class":139},[129,117352,24577],{"class":1977},[129,117354,117318],{"class":244},[129,117356,117357],{"class":244}," upgrade",[129,117359,100982],{"class":188},[129,117361,117362],{"class":131,"line":1326},[129,117363,117364],{"class":198},"#列出可更新的软件包及版本信息\n",[129,117366,117367,117370,117373],{"class":131,"line":1332},[129,117368,117369],{"class":1977},"apt",[129,117371,117372],{"class":244}," list",[129,117374,117375],{"class":188}," --upgradable\n",[129,117377,117378],{"class":131,"line":1344},[129,117379,117380],{"class":198},"#彻底升级（处理依赖关系，可能删除旧包）\n",[129,117382,117383,117385,117387],{"class":131,"line":1626},[129,117384,24577],{"class":1977},[129,117386,117318],{"class":244},[129,117388,117389],{"class":244}," full-upgrade\n",[129,117391,117392],{"class":131,"line":1631},[129,117393,117394],{"class":198},"#设置指定版本\n",[129,117396,117397,117399,117401,117403,117405,117408,117410,117412,117414,117416,117419,117421],{"class":131,"line":1637},[129,117398,24577],{"class":1977},[129,117400,117318],{"class":244},[129,117402,23849],{"class":244},[129,117404,28903],{"class":135},[129,117406,117407],{"class":244},"package_nam",[129,117409,214],{"class":139},[129,117411,1099],{"class":135},[129,117413,185],{"class":244},[129,117415,1049],{"class":135},[129,117417,117418],{"class":244},"version_numbe",[129,117420,809],{"class":139},[129,117422,51308],{"class":135},[129,117424,117425],{"class":131,"line":1642},[129,117426,117427],{"class":198},"#只安装软件包不升级\n",[129,117429,117430,117432,117434,117436,117438,117440,117442,117444],{"class":131,"line":1656},[129,117431,24577],{"class":1977},[129,117433,117318],{"class":244},[129,117435,23849],{"class":244},[129,117437,28903],{"class":135},[129,117439,117407],{"class":244},[129,117441,214],{"class":139},[129,117443,1099],{"class":135},[129,117445,117446],{"class":188}," --no-upgrade\n",[129,117448,117449],{"class":131,"line":1661},[129,117450,117451],{"class":198},"#只升级，不存在就不安装\n",[129,117453,117454,117456,117458,117460,117462,117464,117466,117468],{"class":131,"line":1667},[129,117455,24577],{"class":1977},[129,117457,117318],{"class":244},[129,117459,23849],{"class":244},[129,117461,28903],{"class":135},[129,117463,117407],{"class":244},[129,117465,214],{"class":139},[129,117467,1099],{"class":135},[129,117469,117470],{"class":188}," --only-upgrade\n",[129,117472,117473],{"class":131,"line":1688},[129,117474,2414],{"emptyLinePlaceholder":56},[129,117476,117477],{"class":131,"line":1693},[129,117478,117479],{"class":198},"#安装指定的软件命令\n",[129,117481,117482,117484,117486,117488,117490,117492,117494],{"class":131,"line":1707},[129,117483,24577],{"class":1977},[129,117485,117318],{"class":244},[129,117487,23849],{"class":244},[129,117489,28903],{"class":135},[129,117491,117407],{"class":244},[129,117493,214],{"class":139},[129,117495,51308],{"class":135},[129,117497,117498],{"class":131,"line":1712},[129,117499,2414],{"emptyLinePlaceholder":56},[129,117501,117502],{"class":131,"line":1741},[129,117503,117504],{"class":198},"#安装多个软件包\n",[129,117506,117507,117509,117511,117513,117515,117518,117521,117523,117525,117528,117530,117532],{"class":131,"line":1746},[129,117508,24577],{"class":1977},[129,117510,117318],{"class":244},[129,117512,23849],{"class":244},[129,117514,28903],{"class":135},[129,117516,117517],{"class":244},"package_",[129,117519,117520],{"class":135},"1>",[129,117522,28903],{"class":135},[129,117524,117517],{"class":244},[129,117526,117527],{"class":135},"2>",[129,117529,28903],{"class":135},[129,117531,117517],{"class":244},[129,117533,117534],{"class":135},"3>\n",[129,117536,117537],{"class":131,"line":1763},[129,117538,2414],{"emptyLinePlaceholder":56},[129,117540,117541],{"class":131,"line":1768},[129,117542,117543],{"class":198},"#更新指定的软件命令\n",[129,117545,117546,117548,117550,117552,117554,117556,117558],{"class":131,"line":1773},[129,117547,24577],{"class":1977},[129,117549,117318],{"class":244},[129,117551,117348],{"class":244},[129,117553,28903],{"class":135},[129,117555,117407],{"class":244},[129,117557,214],{"class":139},[129,117559,51308],{"class":135},[129,117561,117562],{"class":131,"line":1778},[129,117563,2414],{"emptyLinePlaceholder":56},[129,117565,117566],{"class":131,"line":1792},[129,117567,117568],{"class":198},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[129,117570,117571,117573,117576,117578,117580,117582],{"class":131,"line":1797},[129,117572,117369],{"class":1977},[129,117574,117575],{"class":244}," show",[129,117577,28903],{"class":135},[129,117579,117407],{"class":244},[129,117581,214],{"class":139},[129,117583,51308],{"class":135},[129,117585,117586],{"class":131,"line":2591},[129,117587,2414],{"emptyLinePlaceholder":56},[129,117589,117590],{"class":131,"line":2605},[129,117591,117592],{"class":198},"#删除软件包命令\n",[129,117594,117595,117597,117599,117601,117603,117605,117607],{"class":131,"line":2613},[129,117596,24577],{"class":1977},[129,117598,117318],{"class":244},[129,117600,26080],{"class":244},[129,117602,28903],{"class":135},[129,117604,117407],{"class":244},[129,117606,214],{"class":139},[129,117608,51308],{"class":135},[129,117610,117611],{"class":131,"line":2618},[129,117612,2414],{"emptyLinePlaceholder":56},[129,117614,117615],{"class":131,"line":2624},[129,117616,117617],{"class":198},"# 清理旧版本和缓存（释放磁盘空间）\n",[129,117619,117620,117622,117624,117627],{"class":131,"line":2630},[129,117621,24577],{"class":1977},[129,117623,117318],{"class":244},[129,117625,117626],{"class":244}," autoremove",[129,117628,117629],{"class":198},"  # 删除不再需要的依赖和库文件\n",[129,117631,117632,117634,117636,117639],{"class":131,"line":2635},[129,117633,24577],{"class":1977},[129,117635,117318],{"class":244},[129,117637,117638],{"class":244}," clean",[129,117640,117641],{"class":198},"       # 清理下载的缓存包\n",[129,117643,117644],{"class":131,"line":7963},[129,117645,2414],{"emptyLinePlaceholder":56},[129,117647,117648],{"class":131,"line":7987},[129,117649,117650],{"class":198},"#移除软件包及配置文件\n",[129,117652,117653,117655,117657,117660,117662,117664,117666],{"class":131,"line":7992},[129,117654,24577],{"class":1977},[129,117656,117318],{"class":244},[129,117658,117659],{"class":244}," purge",[129,117661,28903],{"class":135},[129,117663,117407],{"class":244},[129,117665,214],{"class":139},[129,117667,51308],{"class":135},[129,117669,117670],{"class":131,"line":7998},[129,117671,2414],{"emptyLinePlaceholder":56},[129,117673,117674],{"class":131,"line":8025},[129,117675,117676],{"class":198},"#查找软件包命令\n",[129,117678,117679,117681,117683,117686,117688,117691,117693],{"class":131,"line":8030},[129,117680,24577],{"class":1977},[129,117682,117318],{"class":244},[129,117684,117685],{"class":244}," search",[129,117687,28903],{"class":135},[129,117689,117690],{"class":244},"keywor",[129,117692,453],{"class":139},[129,117694,51308],{"class":135},[129,117696,117697],{"class":131,"line":8036},[129,117698,2414],{"emptyLinePlaceholder":56},[129,117700,117701],{"class":131,"line":8048},[129,117702,117703],{"class":198},"#列出所有已安装的包\n",[129,117705,117706,117708,117710],{"class":131,"line":8060},[129,117707,117369],{"class":1977},[129,117709,117372],{"class":244},[129,117711,117712],{"class":188}," --installed\n",[129,117714,117715],{"class":131,"line":8072},[129,117716,2414],{"emptyLinePlaceholder":56},[129,117718,117719],{"class":131,"line":9731},[129,117720,117721],{"class":198},"#列出所有已安装的包的版本信息\n",[129,117723,117724,117726,117728],{"class":131,"line":9756},[129,117725,117369],{"class":1977},[129,117727,117372],{"class":244},[129,117729,117730],{"class":188}," --all-versions\n",[5141,117732,117733],{},"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":42,"searchDepth":51,"depth":51,"links":117735},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117280,"description":53},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117742,"title":117743,"body":117744,"description":53,"extension":54,"meta":118485,"navigation":56,"path":118486,"seo":118487,"stem":118488,"__hash__":118489},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117745,"toc":118472},[117746,117749,117753,117756,117762,117766,117770,117776,117781,117786,117791,117796,117801,117804,117807,117810,117813,117817,117820,117825,117828,117833,117836,117841,117848,117851,117854,117857,117860,117863,117874,117878,117882,117887,117892,117896,117901,117905,117910,117914,117918,117923,117926,117971,117976,117980,117984,117989,117995,118000,118010,118015,118025,118030,118035,118062,118066,118069,118074,118077,118102,118106,118111,118114,118119,118124,118144,118149,118152,118167,118171,118224,118227,118232,118236,118239,118254,118257,118260,118265,118269,118273,118276,118280,118284,118287,118292,118297,118301,118308,118316,118319,118326,118331,118336,118339,118344,118351,118356,118363,118367,118369,118374,118378,118381,118384,118389,118392,118397,118400,118405,118410,118415,118419,118424,118428,118469],[10,117747,117743],{"id":117748},"_2-linux装机教程",[71,117750,117752],{"id":117751},"_21-实体机","2.1 实体机",[14,117754,117755],{},"使用清华源：（Ubuntu24.04）",[14,117757,117758],{},[20,117759,117760],{"href":117760,"rel":117761},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24],[71,117763,117765],{"id":117764},"_22-普通虚拟机","2.2 普通虚拟机",[100,117767,117769],{"id":117768},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117771,117772],{},[20,117773,117774],{"href":117774,"rel":117775},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24],[14,117777,117778],{},[40,117779],{"alt":42,"src":117780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117782,117783],{},[40,117784],{"alt":42,"src":117785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117787,117788],{},[40,117789],{"alt":42,"src":117790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117792,117793],{},[40,117794],{"alt":42,"src":117795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117797,117798],{},[40,117799],{"alt":42,"src":117800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117802,117803],{},"内存4G（4096MB）；",[14,117805,117806],{},"CPU给4个核；",[14,117808,117809],{},"硬盘动态分配60G；",[14,117811,117812],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[100,117814,117816],{"id":117815},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117818,117819],{},"按照1.1的步骤下载Ubuntu",[14,117821,117822],{},[40,117823],{"alt":42,"src":117824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117826,117827],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117829,117830],{},[40,117831],{"alt":42,"src":117832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117834,117835],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117837,117838],{},[40,117839],{"alt":42,"src":117840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117842,117843,117844,117847],{},"选择“正常安装”(找不到都用Alt+F7)， ",[289,117845,117846],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117849,117850],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117852,117853],{},"将改动写入磁盘吗 继续",[14,117855,117856],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117858,117859],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117861,117862],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117864,117865,117866,117869,117870,117873],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[289,117867,117868],{},"除了"," 选不发送系统信息与不升级之外， ",[289,117871,117872],{},"其它"," 都跳过或前进）",[100,117875,117877],{"id":117876},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22013,117879,117881],{"id":117880},"_2231-全屏","2.2.3.1 全屏",[14,117883,117884],{},[40,117885],{"alt":42,"src":117886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117888,117889],{},[40,117890],{"alt":42,"src":117891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22013,117893,117895],{"id":117894},"_2232-文件交换","2.2.3.2 文件交换",[14,117897,117898],{},[40,117899],{"alt":42,"src":117900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22013,117902,117904],{"id":117903},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117906,117907],{},[40,117908],{"alt":42,"src":117909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[71,117911,117913],{"id":117912},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[100,117915,117917],{"id":117916},"_231-简介与优缺点","2.3.1 简介与优缺点",[83,117919,117920],{},[86,117921,117922],{},"什么情况下推荐？",[14,117924,117925],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[83,117927,117928],{"start":51},[86,117929,117930,117931],{},"优缺点：",[83,117932,117933,117963],{},[86,117934,117935,117936],{},"优点：",[83,117937,117938,117941,117948,117951,117954,117957,117960],{},[86,117939,117940],{},"WSL2是最好的Linux发行版;(bushi)",[86,117942,117943,117944,117947],{},"性能损耗极低。且比在Windows上跑深度性能 ",[289,117945,117946],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[86,117949,117950],{},"非常方便调用USB设备，可以USB直通;",[86,117952,117953],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[86,117955,117956],{},"非常方便Win与WSL2互相传文件等协同操作;",[86,117958,117959],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[86,117961,117962],{},"非常方便使用Windows的VScode远程开发;",[86,117964,117965,117966],{},"缺点：",[83,117967,117968],{},[86,117969,117970],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,117972,117973],{},[40,117974],{"alt":42,"src":117975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[100,117977,117979],{"id":117978},"_232-安装教程","2.3.2 安装教程",[22013,117981,117983],{"id":117982},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[83,117985,117986],{},[86,117987,117988],{},"方法一(图形界面)",[14,117990,117991,117992,24619],{},"用Win+R输入",[126,117993,117994],{},"appwiz.cpl",[14,117996,117997],{},[40,117998],{"alt":42,"src":117999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118001,118002,118003,118006,118007,26474],{},"点击OK进入 ",[289,118004,118005],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[289,118008,118009],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118011,118012],{},[40,118013],{"alt":42,"src":118014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118016,118017,118018,101019,118021,118024],{},"选择 ",[289,118019,118020],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[289,118022,118023],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118026,118027],{},[40,118028],{"alt":42,"src":118029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[83,118031,118032],{"start":51},[86,118033,118034],{},"方法二(命令行)",[120,118036,118040],{"className":118037,"code":118038,"language":118039,"meta":42,"style":42},"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",[126,118041,118042,118047,118052,118057],{"__ignoreMap":42},[129,118043,118044],{"class":131,"line":132},[129,118045,118046],{},"# 开启 Linux 子系统\n",[129,118048,118049],{"class":131,"line":51},[129,118050,118051],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[129,118053,118054],{"class":131,"line":1194},[129,118055,118056],{},"# 开启虚拟机平台\n",[129,118058,118059],{"class":131,"line":1209},[129,118060,118061],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22013,118063,118065],{"id":118064},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118067,118068],{},"用管理员权限打开powershell",[14,118070,118071],{},[40,118072],{"alt":42,"src":118073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118075,118076],{},"升级WSL并设置默认版本为WSL2",[120,118078,118080],{"className":118037,"code":118079,"language":118039,"meta":42,"style":42},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[126,118081,118082,118087,118092,118097],{"__ignoreMap":42},[129,118083,118084],{"class":131,"line":132},[129,118085,118086],{},"# 更新 wsl\n",[129,118088,118089],{"class":131,"line":51},[129,118090,118091],{},"wsl --update\n",[129,118093,118094],{"class":131,"line":1194},[129,118095,118096],{},"# 将 wsl 版本设置为 wsl2\n",[129,118098,118099],{"class":131,"line":1209},[129,118100,118101],{},"wsl --set-default-version 2\n",[22013,118103,118105],{"id":118104},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[83,118107,118108],{},[86,118109,118110],{},"方式一(商店下载)",[14,118112,118113],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118115,118116],{},[40,118117],{"alt":42,"src":118118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[83,118120,118121],{"start":51},[86,118122,118123],{},"方式二(命令行安装)",[120,118125,118127],{"className":118037,"code":118126,"language":118039,"meta":42,"style":42},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[126,118128,118129,118134,118139],{"__ignoreMap":42},[129,118130,118131],{"class":131,"line":132},[129,118132,118133],{},"# 列出可安装的 Linux 版本\n",[129,118135,118136],{"class":131,"line":51},[129,118137,118138],{},"#（需要科学手段）\n",[129,118140,118141],{"class":131,"line":1194},[129,118142,118143],{},"wsl --list --online\n",[14,118145,118146],{},[40,118147],{"alt":42,"src":118148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118150,118151],{},"选择对应发行版并安装",[120,118153,118155],{"className":118037,"code":118154,"language":118039,"meta":42,"style":42},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[126,118156,118157,118162],{"__ignoreMap":42},[129,118158,118159],{"class":131,"line":132},[129,118160,118161],{},"# Ubuntu安装完毕后需要重启系统\n",[129,118163,118164],{"class":131,"line":51},[129,118165,118166],{},"wsl --install -d Ubuntu-24.04\n",[22013,118168,118170],{"id":118169},"_2324-查看系统状态","2.3.2.4 查看系统状态",[120,118172,118174],{"className":118037,"code":118173,"language":118039,"meta":42,"style":42},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[126,118175,118176,118181,118186,118191,118196,118200,118204,118209,118214,118219],{"__ignoreMap":42},[129,118177,118178],{"class":131,"line":132},[129,118179,118180],{},"# 查看 wsl\n",[129,118182,118183],{"class":131,"line":51},[129,118184,118185],{},"wsl -l\n",[129,118187,118188],{"class":131,"line":1194},[129,118189,118190],{},"# 查看 wsl 运行版本或模式\n",[129,118192,118193],{"class":131,"line":1209},[129,118194,118195],{},"wsl -l -v\n",[129,118197,118198],{"class":131,"line":1215},[129,118199,2414],{"emptyLinePlaceholder":56},[129,118201,118202],{"class":131,"line":1229},[129,118203,2414],{"emptyLinePlaceholder":56},[129,118205,118206],{"class":131,"line":1235},[129,118207,118208],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[129,118210,118211],{"class":131,"line":1326},[129,118212,118213],{},"wsl --set-version \u003Cdistro> 2\n",[129,118215,118216],{"class":131,"line":1332},[129,118217,118218],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[129,118220,118221],{"class":131,"line":1344},[129,118222,118223],{},"wsl --unregister \u003Cdistro>\n",[14,118225,118226],{},"输出Version为2即正常",[14,118228,118229],{},[40,118230],{"alt":42,"src":118231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22013,118233,118235],{"id":118234},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118237,118238],{},"直接在Powershell里输入wsl命令进入子系统",[120,118240,118242],{"className":118037,"code":118241,"language":118039,"meta":42,"style":42},"# 进入子系统\nwsl\n",[126,118243,118244,118249],{"__ignoreMap":42},[129,118245,118246],{"class":131,"line":132},[129,118247,118248],{},"# 进入子系统\n",[129,118250,118251],{"class":131,"line":51},[129,118252,118253],{},"wsl\n",[14,118255,118256],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118258,118259],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118261,118262],{},[40,118263],{"alt":42,"src":118264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[100,118266,118268],{"id":118267},"_233-配置各种环境","2.3.3 配置各种环境",[22013,118270,118272],{"id":118271},"_2331-换源","2.3.3.1 换源",[14,118274,118275],{},"(同实体机LINUX，往下找教程)",[22013,118277,118279],{"id":118278},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22925,118281,118283],{"id":118282},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118285,118286],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118288,118289],{},[40,118290],{"alt":42,"src":118291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118293,118294],{},[40,118295],{"alt":42,"src":118296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22925,118298,118300],{"id":118299},"_23322-cuda","2.3.3.2.2 CUDA",[14,118302,118303,118304],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[20,118305,118306],{"href":118306,"rel":118307},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24],[14,118309,118310,118313],{},[40,118311],{"alt":42,"src":118312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[40,118314],{"alt":42,"src":118315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118317,118318],{},"在下方的网站，选择合适的版本。",[14,118320,118321,118322],{},"WSL2 专属 CUDA 指南：",[20,118323,118324],{"href":118324,"rel":118325},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24],[14,118327,118328],{},[289,118329,118330],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118332,118333],{},[40,118334],{"alt":42,"src":118335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118337,118338],{},"挨行敲一遍",[14,118340,118341],{},[40,118342],{"alt":42,"src":118343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118345,118346,118347,118350],{},"敲完后，输入",[126,118348,118349],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118352,118353],{},[40,118354],{"alt":42,"src":118355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118357,118358,118359,118362],{},"（请详看下方教程的",[289,118360,118361],{},"安装CUDA的配置环境来看","如何配置环境）",[22925,118364,118366],{"id":118365},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118368,118275],{},[14,118370,118371],{},[40,118372],{"alt":42,"src":118373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22013,118375,118377],{"id":118376},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118379,118380],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118382,118383],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118385,118386],{},[40,118387],{"alt":42,"src":118388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118390,118391],{},"连接WSL2",[14,118393,118394],{},[40,118395],{"alt":42,"src":118396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118398,118399],{},"远程开发成功。",[14,118401,118402],{},[40,118403],{"alt":42,"src":118404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118406,118407],{},[40,118408],{"alt":42,"src":118409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118411,118412],{},[40,118413],{"alt":42,"src":118414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22013,118416,118418],{"id":118417},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118420,118421],{},[40,118422],{"alt":42,"src":118423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22013,118425,118427],{"id":118426},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[120,118429,118431],{"className":117297,"code":118430,"language":117299,"meta":42,"style":42},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[126,118432,118433,118441,118449,118460,118464],{"__ignoreMap":42},[129,118434,118435,118437,118439],{"class":131,"line":132},[129,118436,24577],{"class":1977},[129,118438,117318],{"class":244},[129,118440,26243],{"class":244},[129,118442,118443,118445,118447],{"class":131,"line":51},[129,118444,24577],{"class":1977},[129,118446,117318],{"class":244},[129,118448,117334],{"class":244},[129,118450,118451,118453,118455,118457],{"class":131,"line":1194},[129,118452,24577],{"class":1977},[129,118454,117318],{"class":244},[129,118456,23849],{"class":244},[129,118458,118459],{"class":244}," mesa-utils\n",[129,118461,118462],{"class":131,"line":1209},[129,118463,2414],{"emptyLinePlaceholder":56},[129,118465,118466],{"class":131,"line":1215},[129,118467,118468],{"class":198},"#然后重启wsl2即可\n",[5141,118470,118471],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":42,"searchDepth":51,"depth":51,"links":118473},[118474,118475,118480],{"id":117751,"depth":51,"text":117752},{"id":117764,"depth":51,"text":117765,"children":118476},[118477,118478,118479],{"id":117768,"depth":1194,"text":117769},{"id":117815,"depth":1194,"text":117816},{"id":117876,"depth":1194,"text":117877},{"id":117912,"depth":51,"text":117913,"children":118481},[118482,118483,118484],{"id":117916,"depth":1194,"text":117917},{"id":117978,"depth":1194,"text":117979},{"id":118267,"depth":1194,"text":118268},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117743,"description":53},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118491,"title":118492,"body":118493,"description":53,"extension":54,"meta":121429,"navigation":56,"path":121430,"seo":121431,"stem":121432,"__hash__":121433},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118494,"toc":121401},[118495,118498,118502,118508,118512,118518,118522,118710,118713,118718,118722,118726,118729,118732,118738,118743,118746,118749,118754,118787,118792,118796,118873,118876,118881,118885,118888,118927,118930,118939,118957,118962,118969,119086,119091,119094,119121,119126,119130,119139,119189,119196,119200,119203,119217,119224,119258,119263,119267,119290,119293,119298,119302,119305,119308,119311,119353,119357,119360,119363,119404,119408,119412,119415,119420,119425,119428,119451,119454,119462,119467,119470,119475,119480,119483,119488,119492,119497,119520,119525,119587,119595,119600,119605,119608,119613,119616,119621,119626,119644,119649,119655,119660,119674,119678,119681,119684,119687,119730,119733,119738,119839,119842,119847,119851,119855,119892,119896,119900,119904,119950,119954,119999,120003,120010,120018,120073,120076,120153,120156,120179,120183,120186,120191,120196,120204,120207,120212,120217,120222,120225,120230,120239,120242,120247,120250,120321,120326,120329,120334,120337,120342,120345,120350,120353,120358,120363,120366,120441,120444,120457,120462,120465,120479,120482,120511,120516,120545,120548,120553,120557,120562,120571,120574,120579,120582,120587,120590,120593,120598,120601,120606,120611,120614,120619,120622,120747,120752,120782,120785,120790,120795,120812,120815,120858,120861,120888,120893,120906,121049,121053,121058,121072,121075,121126,121129,121159,121162,121178,121183,121197,121200,121267,121272,121281,121286,121289,121301,121306,121313,121337,121340,121345,121348,121367,121372,121379,121391,121398],[10,118496,118492],{"id":118497},"_3-安装必备配置",[71,118499,118501],{"id":118500},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[120,118503,118506],{"className":118504,"code":118505,"language":5202},[5200],"  打开下方网站（注意，该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",[126,118507,118505],{"__ignoreMap":42},[100,118509,118511],{"id":118510},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[120,118513,118516],{"className":118514,"code":118515,"language":5202},[5200],"  输入以下命令\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",[126,118517,118515],{"__ignoreMap":42},[100,118519,118521],{"id":118520},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[120,118523,118527],{"className":118524,"code":118525,"language":118526,"meta":42,"style":42},"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",[126,118528,118529,118537,118548,118560,118574,118578,118588,118593,118597,118601,118606,118610,118622,118626,118631,118635,118646,118650,118666,118670,118681,118685,118690,118694,118702],{"__ignoreMap":42},[129,118530,118531,118533,118535],{"class":131,"line":132},[129,118532,24577],{"class":1977},[129,118534,117318],{"class":244},[129,118536,26243],{"class":244},[129,118538,118539,118541,118543,118545],{"class":131,"line":51},[129,118540,24577],{"class":1977},[129,118542,117318],{"class":244},[129,118544,23849],{"class":244},[129,118546,118547],{"class":244}," vim\n",[129,118549,118550,118552,118555,118557],{"class":131,"line":1194},[129,118551,24577],{"class":1977},[129,118553,118554],{"class":244}," rm",[129,118556,25326],{"class":188},[129,118558,118559],{"class":244}," \u002Fetc\u002Fapt\u002Fsources.list\n",[129,118561,118562,118564,118566,118568,118571],{"class":131,"line":1209},[129,118563,24577],{"class":1977},[129,118565,118554],{"class":244},[129,118567,25326],{"class":188},[129,118569,118570],{"class":244}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[129,118572,118573],{"class":188},"**\n",[129,118575,118576],{"class":131,"line":1215},[129,118577,2414],{"emptyLinePlaceholder":56},[129,118579,118580,118582,118585],{"class":131,"line":1229},[129,118581,24577],{"class":1977},[129,118583,118584],{"class":244}," vim",[129,118586,118587],{"class":244}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[129,118589,118590],{"class":131,"line":1235},[129,118591,118592],{"class":244},"```\n",[129,118594,118595],{"class":131,"line":1326},[129,118596,2414],{"emptyLinePlaceholder":56},[129,118598,118599],{"class":131,"line":1332},[129,118600,2414],{"emptyLinePlaceholder":56},[129,118602,118603],{"class":131,"line":1344},[129,118604,118605],{"class":1977},"选择好Ubuntu版本后，复制下方的内容。\n",[129,118607,118608],{"class":131,"line":1626},[129,118609,2414],{"emptyLinePlaceholder":56},[129,118611,118612,118614,118617,118620],{"class":131,"line":1631},[129,118613,366],{"class":135},[129,118615,118616],{"class":244},"[](",[129,118618,118619],{"class":1977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[129,118621,146],{"class":244},[129,118623,118624],{"class":131,"line":1637},[129,118625,2414],{"emptyLinePlaceholder":56},[129,118627,118628],{"class":131,"line":1642},[129,118629,118630],{"class":1977},"粘贴进去\n",[129,118632,118633],{"class":131,"line":1656},[129,118634,2414],{"emptyLinePlaceholder":56},[129,118636,118637,118639,118641,118644],{"class":131,"line":1661},[129,118638,366],{"class":135},[129,118640,118616],{"class":244},[129,118642,118643],{"class":1977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[129,118645,146],{"class":244},[129,118647,118648],{"class":131,"line":1667},[129,118649,2414],{"emptyLinePlaceholder":56},[129,118651,118652,118655,118658,118661,118663],{"class":131,"line":1688},[129,118653,118654],{"class":1977},"按一下ESC，然后英文冒号，输入",[129,118656,118657],{"class":244}," `",[129,118659,118660],{"class":1977},":wq!",[129,118662,1111],{"class":244},[129,118664,118665],{"class":1977},"然后回车\n",[129,118667,118668],{"class":131,"line":1693},[129,118669,2414],{"emptyLinePlaceholder":56},[129,118671,118672,118674,118676,118679],{"class":131,"line":1707},[129,118673,366],{"class":135},[129,118675,118616],{"class":244},[129,118677,118678],{"class":1977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[129,118680,146],{"class":244},[129,118682,118683],{"class":131,"line":1712},[129,118684,2414],{"emptyLinePlaceholder":56},[129,118686,118687],{"class":131,"line":1741},[129,118688,118689],{"class":1977},"输入以下命令\n",[129,118691,118692],{"class":131,"line":1746},[129,118693,2414],{"emptyLinePlaceholder":56},[129,118695,118696,118699],{"class":131,"line":1763},[129,118697,118698],{"class":244},"```",[129,118700,118701],{"class":1977},"Bash\n",[129,118703,118704,118706,118708],{"class":131,"line":1768},[129,118705,24577],{"class":1977},[129,118707,117318],{"class":244},[129,118709,26243],{"class":244},[14,118711,118712],{},"这里被替换成对应学校则成功",[14,118714,118715],{},[40,118716],{"alt":42,"src":118717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[71,118719,118721],{"id":118720},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[100,118723,118725],{"id":118724},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118727,118728],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118730,118731],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118733,118734],{},[20,118735,118736],{"href":118736,"rel":118737},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24],[14,118739,118740],{},[40,118741],{"alt":42,"src":118742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118744,118745],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118747,118748],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118750,118751],{},[40,118752],{"alt":42,"src":118753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[120,118755,118757],{"className":117297,"code":118756,"language":117299,"meta":42,"style":42},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[126,118758,118759,118764,118771,118776],{"__ignoreMap":42},[129,118760,118761],{"class":131,"line":132},[129,118762,118763],{"class":198},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[129,118765,118766,118768],{"class":131,"line":51},[129,118767,101277],{"class":188},[129,118769,118770],{"class":244}," ~\u002FDownloads\n",[129,118772,118773],{"class":131,"line":1194},[129,118774,118775],{"class":198},"#下方chrome安装包名不一定是这个，根据名字来看\n",[129,118777,118778,118780,118782,118784],{"class":131,"line":1209},[129,118779,24577],{"class":1977},[129,118781,117318],{"class":244},[129,118783,23849],{"class":244},[129,118785,118786],{"class":244}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118788,118789],{},[40,118790],{"alt":42,"src":118791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[100,118793,118795],{"id":118794},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[120,118797,118799],{"className":117297,"code":118798,"language":117299,"meta":42,"style":42},"# 老版\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",[126,118800,118801,118806,118814,118825,118830,118834,118839,118849,118857,118868],{"__ignoreMap":42},[129,118802,118803],{"class":131,"line":132},[129,118804,118805],{"class":198},"# 老版\n",[129,118807,118808,118810,118812],{"class":131,"line":51},[129,118809,24577],{"class":1977},[129,118811,117318],{"class":244},[129,118813,26243],{"class":244},[129,118815,118816,118818,118820,118822],{"class":131,"line":1194},[129,118817,24577],{"class":1977},[129,118819,117318],{"class":244},[129,118821,23849],{"class":244},[129,118823,118824],{"class":244}," neofetch\n",[129,118826,118827],{"class":131,"line":1209},[129,118828,118829],{"class":1977},"neofetch\n",[129,118831,118832],{"class":131,"line":1215},[129,118833,2414],{"emptyLinePlaceholder":56},[129,118835,118836],{"class":131,"line":1229},[129,118837,118838],{"class":198},"# 新版\n",[129,118840,118841,118843,118846],{"class":131,"line":1235},[129,118842,24577],{"class":1977},[129,118844,118845],{"class":244}," add-apt-repository",[129,118847,118848],{"class":244}," ppa:zhangsongcui3371\u002Ffastfetch\n",[129,118850,118851,118853,118855],{"class":131,"line":1326},[129,118852,24577],{"class":1977},[129,118854,117318],{"class":244},[129,118856,26243],{"class":244},[129,118858,118859,118861,118863,118865],{"class":131,"line":1332},[129,118860,24577],{"class":1977},[129,118862,117318],{"class":244},[129,118864,23849],{"class":244},[129,118866,118867],{"class":244}," fastfetch\n",[129,118869,118870],{"class":131,"line":1344},[129,118871,118872],{"class":1977},"fastfetch\n",[14,118874,118875],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118877,118878],{},[40,118879],{"alt":42,"src":118880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[100,118882,118884],{"id":118883},"_323-移除snap应用","3.2.3 移除snap应用",[14,118886,118887],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[120,118889,118891],{"className":117297,"code":118890,"language":117299,"meta":42,"style":42},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[126,118892,118893,118905,118916],{"__ignoreMap":42},[129,118894,118895,118897,118899,118902],{"class":131,"line":132},[129,118896,24577],{"class":1977},[129,118898,26514],{"class":244},[129,118900,118901],{"class":244}," disable",[129,118903,118904],{"class":244}," snapd.service\n",[129,118906,118907,118909,118911,118913],{"class":131,"line":51},[129,118908,24577],{"class":1977},[129,118910,26514],{"class":244},[129,118912,118901],{"class":244},[129,118914,118915],{"class":244}," snapd.socket\n",[129,118917,118918,118920,118922,118924],{"class":131,"line":1194},[129,118919,24577],{"class":1977},[129,118921,26514],{"class":244},[129,118923,118901],{"class":244},[129,118925,118926],{"class":244}," snapd.seeded.service\n",[14,118928,118929],{},"然后查看snap应用列表",[14,118931,118932,118933,118938],{},"根据你安装的选择不同（最小安装或普通安装），有",[20,118934,118937],{"href":118935,"rel":118936},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[120,118940,118942],{"className":117297,"code":118941,"language":117299,"meta":42,"style":42},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[126,118943,118944,118949],{"__ignoreMap":42},[129,118945,118946],{"class":131,"line":132},[129,118947,118948],{"class":198},"# 查询当前系统上snap安装了哪些app\n",[129,118950,118951,118954],{"class":131,"line":51},[129,118952,118953],{"class":1977},"snap",[129,118955,118956],{"class":244}," list\n",[14,118958,118959],{},[40,118960],{"alt":42,"src":118961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,118963,118964,118965,118968],{},"卸载掉图中所有应用，按照 ",[289,118966,118967],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[120,118970,118972],{"className":117297,"code":118971,"language":117299,"meta":42,"style":42},"#移除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",[126,118973,118974,118979,118991,118996,119007,119012,119023,119028,119039,119044,119048,119053,119064,119075],{"__ignoreMap":42},[129,118975,118976],{"class":131,"line":132},[129,118977,118978],{"class":198},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[129,118980,118981,118983,118986,118988],{"class":131,"line":51},[129,118982,24577],{"class":1977},[129,118984,118985],{"class":244}," snap",[129,118987,26080],{"class":244},[129,118989,118990],{"class":244}," snap-store\n",[129,118992,118993],{"class":131,"line":1194},[129,118994,118995],{"class":198},"#移除firefox浏览器\n",[129,118997,118998,119000,119002,119004],{"class":131,"line":1209},[129,118999,24577],{"class":1977},[129,119001,118985],{"class":244},[129,119003,26080],{"class":244},[129,119005,119006],{"class":244}," firefox\n",[129,119008,119009],{"class":131,"line":1215},[129,119010,119011],{"class":198},"#移除gnome-42-2204\n",[129,119013,119014,119016,119018,119020],{"class":131,"line":1229},[129,119015,24577],{"class":1977},[129,119017,118985],{"class":244},[129,119019,26080],{"class":244},[129,119021,119022],{"class":244}," gnome-42-2204\n",[129,119024,119025],{"class":131,"line":1235},[129,119026,119027],{"class":198},"#移除gtk-common-themes\n",[129,119029,119030,119032,119034,119036],{"class":131,"line":1326},[129,119031,24577],{"class":1977},[129,119033,118985],{"class":244},[129,119035,26080],{"class":244},[129,119037,119038],{"class":244}," gtk-common-themes\n",[129,119040,119041],{"class":131,"line":1332},[129,119042,119043],{"class":198},"#移除其它...\n",[129,119045,119046],{"class":131,"line":1344},[129,119047,2688],{"class":139},[129,119049,119050],{"class":131,"line":1626},[129,119051,119052],{"class":198},"#移除core22,bare以及snapd\n",[129,119054,119055,119057,119059,119061],{"class":131,"line":1631},[129,119056,24577],{"class":1977},[129,119058,118985],{"class":244},[129,119060,26080],{"class":244},[129,119062,119063],{"class":244}," core22\n",[129,119065,119066,119068,119070,119072],{"class":131,"line":1637},[129,119067,24577],{"class":1977},[129,119069,118985],{"class":244},[129,119071,26080],{"class":244},[129,119073,119074],{"class":244}," bare\n",[129,119076,119077,119079,119081,119083],{"class":131,"line":1642},[129,119078,24577],{"class":1977},[129,119080,118985],{"class":244},[129,119082,26080],{"class":244},[129,119084,119085],{"class":244}," snapd\n",[14,119087,119088],{},[40,119089],{"alt":42,"src":119090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119092,119093],{},"输入以下命令查看是否还有snap包",[120,119095,119097],{"className":117297,"code":119096,"language":117299,"meta":42,"style":42},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[126,119098,119099,119105,119109,119113,119117],{"__ignoreMap":42},[129,119100,119101,119103],{"class":131,"line":132},[129,119102,118953],{"class":1977},[129,119104,118956],{"class":244},[129,119106,119107],{"class":131,"line":51},[129,119108,118805],{"class":198},[129,119110,119111],{"class":131,"line":1194},[129,119112,118829],{"class":1977},[129,119114,119115],{"class":131,"line":1209},[129,119116,118838],{"class":198},[129,119118,119119],{"class":131,"line":1215},[129,119120,118872],{"class":1977},[14,119122,119123],{},[40,119124],{"alt":42,"src":119125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[100,119127,119129],{"id":119128},"_324-移除snap","3.2.4 移除snap",[14,119131,119132,119133,119138],{},"在删除掉",[20,119134,119137],{"href":119135,"rel":119136},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[120,119140,119142],{"className":117297,"code":119141,"language":117299,"meta":42,"style":42}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[126,119143,119144,119149,119162,119167,119178],{"__ignoreMap":42},[129,119145,119146],{"class":131,"line":132},[129,119147,119148],{"class":198}," #使用apt移除掉snap\n",[129,119150,119151,119153,119155,119157,119160],{"class":131,"line":51},[129,119152,24577],{"class":1977},[129,119154,117318],{"class":244},[129,119156,117626],{"class":244},[129,119158,119159],{"class":188}," --purge",[129,119161,119085],{"class":244},[129,119163,119164],{"class":131,"line":1194},[129,119165,119166],{"class":198},"#移除snapd的一些目录\n",[129,119168,119169,119171,119173,119175],{"class":131,"line":1209},[129,119170,24577],{"class":1977},[129,119172,118554],{"class":244},[129,119174,25326],{"class":188},[129,119176,119177],{"class":244}," \u002Fvar\u002Fcache\u002Fsnapd\n",[129,119179,119180,119182,119184,119186],{"class":131,"line":1215},[129,119181,24577],{"class":1977},[129,119183,118554],{"class":244},[129,119185,25326],{"class":188},[129,119187,119188],{"class":244}," ~\u002Fsnap\n",[14,119190,119191,119192,119195],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[126,119193,119194],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[100,119197,119199],{"id":119198},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119201,119202],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[120,119204,119206],{"className":117297,"code":119205,"language":117299,"meta":42,"style":42},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[126,119207,119208],{"__ignoreMap":42},[129,119209,119210,119212,119214],{"class":131,"line":132},[129,119211,24577],{"class":1977},[129,119213,118584],{"class":244},[129,119215,119216],{"class":244}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119218,119219,119220,119223],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[126,119221,119222],{},":wq"," 回车",[120,119225,119227],{"className":117297,"code":119226,"language":117299,"meta":42,"style":42},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[126,119228,119229,119236,119250],{"__ignoreMap":42},[129,119230,119231,119234],{"class":131,"line":132},[129,119232,119233],{"class":1977},"Package:",[129,119235,119085],{"class":244},[129,119237,119238,119241,119244,119247],{"class":131,"line":51},[129,119239,119240],{"class":1977},"Pin:",[129,119242,119243],{"class":244}," release",[129,119245,119246],{"class":244}," a=",[129,119248,119249],{"class":188},"*\n",[129,119251,119252,119255],{"class":131,"line":1194},[129,119253,119254],{"class":1977},"Pin-Priority:",[129,119256,119257],{"class":188}," -10\n",[14,119259,119260],{},[40,119261],{"alt":42,"src":119262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[100,119264,119266],{"id":119265},"_326-测试是否成功","3.2.6 测试是否成功",[120,119268,119270],{"className":117297,"code":119269,"language":117299,"meta":42,"style":42},"sudo apt update\nsudo apt install firefox\n",[126,119271,119272,119280],{"__ignoreMap":42},[129,119273,119274,119276,119278],{"class":131,"line":132},[129,119275,24577],{"class":1977},[129,119277,117318],{"class":244},[129,119279,26243],{"class":244},[129,119281,119282,119284,119286,119288],{"class":131,"line":51},[129,119283,24577],{"class":1977},[129,119285,117318],{"class":244},[129,119287,23849],{"class":244},[129,119289,119006],{"class":244},[14,119291,119292],{},"这里提示snapd无法被安装，就证明成功了",[14,119294,119295],{},[40,119296],{"alt":42,"src":119297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[100,119299,119301],{"id":119300},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119303,119304],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119306,119307],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119309,119310],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[120,119312,119314],{"className":117297,"code":119313,"language":117299,"meta":42,"style":42},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[126,119315,119316,119321,119330,119335,119343],{"__ignoreMap":42},[129,119317,119318],{"class":131,"line":132},[129,119319,119320],{"class":198},"# 添加Mozilla提供的源\n",[129,119322,119323,119325,119327],{"class":131,"line":51},[129,119324,24577],{"class":1977},[129,119326,118845],{"class":244},[129,119328,119329],{"class":244}," ppa:mozillateam\u002Fppa\n",[129,119331,119332],{"class":131,"line":1194},[129,119333,119334],{"class":198},"# 安装Firefox\n",[129,119336,119337,119339,119341],{"class":131,"line":1209},[129,119338,24577],{"class":1977},[129,119340,117318],{"class":244},[129,119342,26243],{"class":244},[129,119344,119345,119347,119349,119351],{"class":131,"line":1215},[129,119346,24577],{"class":1977},[129,119348,117318],{"class":244},[129,119350,23849],{"class":244},[129,119352,119006],{"class":244},[100,119354,119356],{"id":119355},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119358,119359],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119361,119362],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[120,119364,119366],{"className":117297,"code":119365,"language":117299,"meta":42,"style":42},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[126,119367,119368,119373,119383,119391,119395],{"__ignoreMap":42},[129,119369,119370],{"class":131,"line":132},[129,119371,119372],{"class":198},"#删掉禁止安装snap的配置文件\n",[129,119374,119375,119377,119379,119381],{"class":131,"line":51},[129,119376,24577],{"class":1977},[129,119378,118554],{"class":244},[129,119380,25326],{"class":188},[129,119382,119216],{"class":244},[129,119384,119385,119387,119389],{"class":131,"line":1194},[129,119386,24577],{"class":1977},[129,119388,117318],{"class":244},[129,119390,26243],{"class":244},[129,119392,119393],{"class":131,"line":1209},[129,119394,2414],{"emptyLinePlaceholder":56},[129,119396,119397,119399,119401],{"class":131,"line":1215},[129,119398,24577],{"class":1977},[129,119400,117318],{"class":244},[129,119402,119403],{"class":244}," dist-update\n",[71,119405,119407],{"id":119406},"_33-中文输入法","3.3 中文输入法",[100,119409,119411],{"id":119410},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119413,119414],{},"官网下载搜狗输入法",[14,119416,119417],{},[40,119418],{"alt":42,"src":119419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119421,119422],{},[40,119423],{"alt":42,"src":119424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119426,119427],{},"打开终端输入如下",[120,119429,119431],{"className":117297,"code":119430,"language":117299,"meta":42,"style":42},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[126,119432,119433,119440],{"__ignoreMap":42},[129,119434,119435,119437],{"class":131,"line":132},[129,119436,101277],{"class":188},[129,119438,119439],{"class":244}," ~\u002FDownloads\u002F\n",[129,119441,119442,119444,119446,119448],{"class":131,"line":51},[129,119443,24577],{"class":1977},[129,119445,117318],{"class":244},[129,119447,23849],{"class":244},[129,119449,119450],{"class":244}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119452,119453],{},"打开Fcitx",[14,119455,119456,119459],{},[40,119457],{"alt":42,"src":119458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[40,119460],{"alt":42,"src":119461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119463,119464],{},[40,119465],{"alt":42,"src":119466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119468,119469],{},"添加搜狗输入法",[14,119471,119472],{},[40,119473],{"alt":42,"src":119474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119476,119477],{},[40,119478],{"alt":42,"src":119479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119481,119482],{},"将搜狗输入法设置为唯一输入法",[14,119484,119485],{},[40,119486],{"alt":42,"src":119487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[100,119489,119491],{"id":119490},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[83,119493,119494],{},[86,119495,119496],{},"卸载旧输入法",[120,119498,119500],{"className":118524,"code":119499,"language":118526,"meta":42,"style":42},"sudo apt purge fcitx* ibus*\n",[126,119501,119502],{"__ignoreMap":42},[129,119503,119504,119506,119508,119510,119513,119515,119518],{"class":131,"line":132},[129,119505,24577],{"class":1977},[129,119507,117318],{"class":244},[129,119509,117659],{"class":244},[129,119511,119512],{"class":244}," fcitx",[129,119514,594],{"class":188},[129,119516,119517],{"class":244}," ibus",[129,119519,119249],{"class":188},[83,119521,119522],{"start":51},[86,119523,119524],{},"安装Fcitx5",[120,119526,119528],{"className":117297,"code":119527,"language":117299,"meta":42,"style":42},"# 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",[126,119529,119530,119535,119549,119553,119558,119567,119575],{"__ignoreMap":42},[129,119531,119532],{"class":131,"line":132},[129,119533,119534],{"class":198},"# Ubuntu22.04及以上、Debian12及以上\n",[129,119536,119537,119539,119541,119543,119546],{"class":131,"line":51},[129,119538,24577],{"class":1977},[129,119540,117318],{"class":244},[129,119542,23849],{"class":244},[129,119544,119545],{"class":244}," fcitx5",[129,119547,119548],{"class":244}," fcitx5-chinese-addons\n",[129,119550,119551],{"class":131,"line":1194},[129,119552,2414],{"emptyLinePlaceholder":56},[129,119554,119555],{"class":131,"line":1209},[129,119556,119557],{"class":198},"# Ubuntu20.04\n",[129,119559,119560,119562,119564],{"class":131,"line":1215},[129,119561,24577],{"class":1977},[129,119563,118845],{"class":244},[129,119565,119566],{"class":244}," ppa:zhsj\u002Ffcitx5\n",[129,119568,119569,119571,119573],{"class":131,"line":1229},[129,119570,24577],{"class":1977},[129,119572,117318],{"class":244},[129,119574,26243],{"class":244},[129,119576,119577,119579,119581,119583,119585],{"class":131,"line":1235},[129,119578,24577],{"class":1977},[129,119580,117318],{"class":244},[129,119582,23849],{"class":244},[129,119584,119545],{"class":244},[129,119586,119548],{"class":244},[83,119588,119589,119592],{"start":1194},[86,119590,119591],{},"Reboot System",[86,119593,119594],{},"启动Fcitx5",[14,119596,119597],{},[40,119598],{"alt":42,"src":119599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[83,119601,119602],{"start":1215},[86,119603,119604],{},"修改一些设置",[14,119606,119607],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119609,119610],{},[40,119611],{"alt":42,"src":119612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119614,119615],{},"添加快捷键以便于更好切换中英文",[14,119617,119618],{},[40,119619],{"alt":42,"src":119620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[83,119622,119623],{"start":1229},[86,119624,119625],{},"重启",[120,119627,119629],{"className":118524,"code":119628,"language":118526,"meta":42,"style":42},"sudo shutdown -r now\n",[126,119630,119631],{"__ignoreMap":42},[129,119632,119633,119635,119638,119641],{"class":131,"line":132},[129,119634,24577],{"class":1977},[129,119636,119637],{"class":244}," shutdown",[129,119639,119640],{"class":188}," -r",[129,119642,119643],{"class":244}," now\n",[83,119645,119646],{"start":1235},[86,119647,119648],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119650,119651],{},[20,119652,119653],{"href":119653,"rel":119654},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24],[83,119656,119657],{"start":1326},[86,119658,119659],{},"再重启",[120,119661,119662],{"className":118524,"code":119628,"language":118526,"meta":42,"style":42},[126,119663,119664],{"__ignoreMap":42},[129,119665,119666,119668,119670,119672],{"class":131,"line":132},[129,119667,24577],{"class":1977},[129,119669,119637],{"class":244},[129,119671,119640],{"class":188},[129,119673,119643],{"class":244},[71,119675,119677],{"id":119676},"_34-pip3源替换","3.4 pip3源替换",[14,119679,119680],{},"非Debian系发行版需要做。",[14,119682,119683],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119685,119686],{},"使用dnf的系统也可能不用做。",[120,119688,119690],{"className":117297,"code":119689,"language":117299,"meta":42,"style":42},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[126,119691,119692,119697,119704,119709,119714],{"__ignoreMap":42},[129,119693,119694],{"class":131,"line":132},[129,119695,119696],{"class":198},"# 检查是否已安装 pip\n",[129,119698,119699,119702],{"class":131,"line":51},[129,119700,119701],{"class":1977},"pip3",[129,119703,26294],{"class":188},[129,119705,119706],{"class":131,"line":1194},[129,119707,119708],{"class":198},"# 如果未安装，先安装 pip3（见下方）\n",[129,119710,119711],{"class":131,"line":1209},[129,119712,119713],{"class":198},"# 配置 pip 使用清华源\n",[129,119715,119716,119718,119721,119724,119727],{"class":131,"line":1215},[129,119717,119701],{"class":1977},[129,119719,119720],{"class":244}," config",[129,119722,119723],{"class":244}," set",[129,119725,119726],{"class":244}," global.index-url",[129,119728,119729],{"class":244}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119731,119732],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119734,119735],{},[40,119736],{"alt":42,"src":119737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[120,119739,119741],{"className":117297,"code":119740,"language":117299,"meta":42,"style":42},"#安装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",[126,119742,119743,119748,119756,119767,119771,119776,119795,119799,119804,119816,119820,119825],{"__ignoreMap":42},[129,119744,119745],{"class":131,"line":132},[129,119746,119747],{"class":198},"#安装pip3\n",[129,119749,119750,119752,119754],{"class":131,"line":51},[129,119751,24577],{"class":1977},[129,119753,117318],{"class":244},[129,119755,26243],{"class":244},[129,119757,119758,119760,119762,119764],{"class":131,"line":1194},[129,119759,24577],{"class":1977},[129,119761,26077],{"class":244},[129,119763,23849],{"class":244},[129,119765,119766],{"class":244}," python3-pip\n",[129,119768,119769],{"class":131,"line":1209},[129,119770,2414],{"emptyLinePlaceholder":56},[129,119772,119773],{"class":131,"line":1215},[129,119774,119775],{"class":198},"#更新pip3\n",[129,119777,119778,119780,119782,119784,119786,119788,119791,119793],{"class":131,"line":1229},[129,119779,100880],{"class":1977},[129,119781,100883],{"class":188},[129,119783,100906],{"class":244},[129,119785,23849],{"class":244},[129,119787,26431],{"class":188},[129,119789,119790],{"class":244}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[129,119792,100911],{"class":188},[129,119794,100914],{"class":244},[129,119796,119797],{"class":131,"line":1235},[129,119798,2414],{"emptyLinePlaceholder":56},[129,119800,119801],{"class":131,"line":1326},[129,119802,119803],{"class":198},"#设置pip源为清华源\n",[129,119805,119806,119808,119810,119812,119814],{"class":131,"line":1332},[129,119807,119701],{"class":1977},[129,119809,119720],{"class":244},[129,119811,119723],{"class":244},[129,119813,119726],{"class":244},[129,119815,119729],{"class":244},[129,119817,119818],{"class":131,"line":1344},[129,119819,2414],{"emptyLinePlaceholder":56},[129,119821,119822],{"class":131,"line":1626},[129,119823,119824],{"class":198},"#测试\n",[129,119826,119827,119829,119831,119833,119835,119837],{"class":131,"line":1631},[129,119828,100880],{"class":1977},[129,119830,100883],{"class":188},[129,119832,100906],{"class":244},[129,119834,23849],{"class":244},[129,119836,100911],{"class":188},[129,119838,100914],{"class":244},[14,119840,119841],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119843,119844],{},[40,119845],{"alt":42,"src":119846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[71,119848,119850],{"id":119849},"_35-显卡驱动安装","3.5 显卡驱动安装",[100,119852,119854],{"id":119853},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[120,119856,119858],{"className":118524,"code":119857,"language":118526,"meta":42,"style":42},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[126,119859,119860,119865,119880,119885],{"__ignoreMap":42},[129,119861,119862],{"class":131,"line":132},[129,119863,119864],{"class":198},"# 如果是使用apt安装的驱动\n",[129,119866,119867,119869,119871,119873,119875,119878],{"class":131,"line":51},[129,119868,24577],{"class":1977},[129,119870,26077],{"class":244},[129,119872,26080],{"class":244},[129,119874,119159],{"class":188},[129,119876,119877],{"class":244}," nvidia",[129,119879,119249],{"class":188},[129,119881,119882],{"class":131,"line":1194},[129,119883,119884],{"class":198},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[129,119886,119887,119889],{"class":131,"line":1209},[129,119888,24577],{"class":1977},[129,119890,119891],{"class":244}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[100,119893,119895],{"id":119894},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22013,119897,119899],{"id":119898},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22925,119901,119903],{"id":119902},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[120,119905,119907],{"className":118524,"code":119906,"language":118526,"meta":42,"style":42},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[126,119908,119909,119914,119925,119930,119940,119945],{"__ignoreMap":42},[129,119910,119911],{"class":131,"line":132},[129,119912,119913],{"class":198},"# 安装英伟达驱动\n",[129,119915,119916,119918,119920,119922],{"class":131,"line":51},[129,119917,24577],{"class":1977},[129,119919,117318],{"class":244},[129,119921,23849],{"class":244},[129,119923,119924],{"class":244}," nvidia-driver-版本号\n",[129,119926,119927],{"class":131,"line":1194},[129,119928,119929],{"class":198},"# 重启 \n",[129,119931,119932,119934,119936,119938],{"class":131,"line":1209},[129,119933,24577],{"class":1977},[129,119935,119637],{"class":244},[129,119937,119640],{"class":188},[129,119939,119643],{"class":244},[129,119941,119942],{"class":131,"line":1215},[129,119943,119944],{"class":198},"# 检查驱动是否安装成功\n",[129,119946,119947],{"class":131,"line":1229},[129,119948,119949],{"class":1977},"nvidia-smi\n",[22925,119951,119953],{"id":119952},"_35212-debian","3.5.2.1.2 Debian",[120,119955,119957],{"className":118524,"code":119956,"language":118526,"meta":42,"style":42},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[126,119958,119959,119963,119977,119981,119991,119995],{"__ignoreMap":42},[129,119960,119961],{"class":131,"line":132},[129,119962,119913],{"class":198},[129,119964,119965,119967,119969,119971,119974],{"class":131,"line":51},[129,119966,24577],{"class":1977},[129,119968,117318],{"class":244},[129,119970,23849],{"class":244},[129,119972,119973],{"class":244}," nvidia-driver",[129,119975,119976],{"class":244}," nvidia-settings\n",[129,119978,119979],{"class":131,"line":1194},[129,119980,119929],{"class":198},[129,119982,119983,119985,119987,119989],{"class":131,"line":1209},[129,119984,24577],{"class":1977},[129,119986,119637],{"class":244},[129,119988,119640],{"class":188},[129,119990,119643],{"class":244},[129,119992,119993],{"class":131,"line":1215},[129,119994,119944],{"class":198},[129,119996,119997],{"class":131,"line":1229},[129,119998,119949],{"class":1977},[22013,120000,120002],{"id":120001},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120004,120005,120006,120009],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[289,120007,120008],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120011,120012,120013],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23568,120014,120015],{},[289,120016,120017],{},"（也可以不禁用桌面环境，直接进行下一步。）",[120,120019,120021],{"className":118524,"code":120020,"language":118526,"meta":42,"style":42},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[126,120022,120023,120028,120038,120043,120056,120061],{"__ignoreMap":42},[129,120024,120025],{"class":131,"line":132},[129,120026,120027],{"class":198},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[129,120029,120030,120032,120035],{"class":131,"line":51},[129,120031,24577],{"class":1977},[129,120033,120034],{"class":244}," telinit",[129,120036,120037],{"class":188}," 3\n",[129,120039,120040],{"class":131,"line":1194},[129,120041,120042],{"class":198},"# ubuntu 使用下方命令\n",[129,120044,120045,120047,120050,120053],{"class":131,"line":1209},[129,120046,24577],{"class":1977},[129,120048,120049],{"class":244}," service",[129,120051,120052],{"class":244}," lightdm",[129,120054,120055],{"class":244}," stop\n",[129,120057,120058],{"class":131,"line":1215},[129,120059,120060],{"class":198},"# Fedora 使用下方命令\n",[129,120062,120063,120065,120067,120070],{"class":131,"line":1229},[129,120064,24577],{"class":1977},[129,120066,26514],{"class":244},[129,120068,120069],{"class":244}," isolate",[129,120071,120072],{"class":244}," multi-user.target\n",[14,120074,120075],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[120,120077,120079],{"className":118524,"code":120078,"language":118526,"meta":42,"style":42},"# 编译环境+准备工作\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",[126,120080,120081,120086,120097,120102,120109,120114,120126,120131,120138,120143],{"__ignoreMap":42},[129,120082,120083],{"class":131,"line":132},[129,120084,120085],{"class":198},"# 编译环境+准备工作\n",[129,120087,120088,120090,120092,120094],{"class":131,"line":51},[129,120089,24577],{"class":1977},[129,120091,117318],{"class":244},[129,120093,23849],{"class":244},[129,120095,120096],{"class":244}," build-essential\n",[129,120098,120099],{"class":131,"line":1194},[129,120100,120101],{"class":198},"# 进入到.run目录中\n",[129,120103,120104,120106],{"class":131,"line":1209},[129,120105,101277],{"class":188},[129,120107,120108],{"class":244}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[129,120110,120111],{"class":131,"line":1215},[129,120112,120113],{"class":198},"# 给驱动文件增加可执行权限：\n",[129,120115,120116,120118,120120,120123],{"class":131,"line":1229},[129,120117,24577],{"class":1977},[129,120119,24580],{"class":244},[129,120121,120122],{"class":244}," a+x",[129,120124,120125],{"class":244}," NVIDIA-Linux-x86_64-550.107.02.run\n",[129,120127,120128],{"class":131,"line":1235},[129,120129,120130],{"class":198},"# 然后执行安装：\n",[129,120132,120133,120135],{"class":131,"line":1326},[129,120134,24577],{"class":1977},[129,120136,120137],{"class":244}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[129,120139,120140],{"class":131,"line":1332},[129,120141,120142],{"class":198},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[129,120144,120145,120147,120150],{"class":131,"line":1344},[129,120146,24577],{"class":1977},[129,120148,120149],{"class":244}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[129,120151,120152],{"class":188},"  --no-opengl-files\n",[14,120154,120155],{},"安装完毕重启即可",[120,120157,120159],{"className":118524,"code":120158,"language":118526,"meta":42,"style":42},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[126,120160,120161,120165,120171,120175],{"__ignoreMap":42},[129,120162,120163],{"class":131,"line":132},[129,120164,119929],{"class":198},[129,120166,120167,120169],{"class":131,"line":51},[129,120168,24577],{"class":1977},[129,120170,26648],{"class":244},[129,120172,120173],{"class":131,"line":1194},[129,120174,119944],{"class":198},[129,120176,120177],{"class":131,"line":1209},[129,120178,119949],{"class":1977},[100,120180,120182],{"id":120181},"_353-安装cuda","3.5.3 安装CUDA",[14,120184,120185],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120187,120188],{},[40,120189],{"alt":42,"src":120190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[83,120192,120193],{},[86,120194,120195],{},"先查看显卡驱动所支持的最高CUDA版本",[120,120197,120198],{"className":118524,"code":119949,"language":118526,"meta":42,"style":42},[126,120199,120200],{"__ignoreMap":42},[129,120201,120202],{"class":131,"line":132},[129,120203,119949],{"class":1977},[14,120205,120206],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120208,120209],{},[40,120210],{"alt":42,"src":120211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[83,120213,120214],{"start":51},[86,120215,120216],{},"下载CUDA并安装CUDA",[14,120218,118303,120219],{},[20,120220,118306],{"href":118306,"rel":120221},[24],[14,120223,120224],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120226,120227],{},[40,120228],{"alt":42,"src":120229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120231,120232,120233,120238],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[20,120234,120237],{"href":120235,"rel":120236},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24],"Vinci机器人队单片机教程","）",[14,120240,120241],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120243,120244],{},[40,120245],{"alt":42,"src":120246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120248,120249],{},"将最下方框框里的命令敲入终端",[120,120251,120253],{"className":118524,"code":120252,"language":118526,"meta":42,"style":42},"# 在当前文件夹下创建一个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",[126,120254,120255,120260,120269,120274,120281,120286,120294,120299,120310,120315],{"__ignoreMap":42},[129,120256,120257],{"class":131,"line":132},[129,120258,120259],{"class":198},"# 在当前文件夹下创建一个ttt的子文件夹\n",[129,120261,120262,120264,120266],{"class":131,"line":51},[129,120263,101267],{"class":1977},[129,120265,29217],{"class":188},[129,120267,120268],{"class":244}," .\u002Fttt\n",[129,120270,120271],{"class":131,"line":1194},[129,120272,120273],{"class":198},"# 进入ttt文件夹\n",[129,120275,120276,120278],{"class":131,"line":1209},[129,120277,101277],{"class":188},[129,120279,120280],{"class":244}," ttt\n",[129,120282,120283],{"class":131,"line":1215},[129,120284,120285],{"class":198},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[129,120287,120288,120291],{"class":131,"line":1229},[129,120289,120290],{"class":1977},"wget",[129,120292,120293],{"class":244}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[129,120295,120296],{"class":131,"line":1235},[129,120297,120298],{"class":198},"# 给予权限\n",[129,120300,120301,120303,120305,120307],{"class":131,"line":1326},[129,120302,24577],{"class":1977},[129,120304,24580],{"class":244},[129,120306,120122],{"class":244},[129,120308,120309],{"class":244}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[129,120311,120312],{"class":131,"line":1332},[129,120313,120314],{"class":198},"# 运行脚本\n",[129,120316,120317,120319],{"class":131,"line":1344},[129,120318,24577],{"class":1977},[129,120320,120309],{"class":244},[14,120322,120323],{},[40,120324],{"alt":42,"src":120325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120327,120328],{},"正在安装中：",[14,120330,120331],{},[40,120332],{"alt":42,"src":120333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120335,120336],{},"输入accept接受即可",[14,120338,120339],{},[40,120340],{"alt":42,"src":120341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120343,120344],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120346,120347],{},[40,120348],{"alt":42,"src":120349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120351,120352],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120354,120355],{},[40,120356],{"alt":42,"src":120357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[83,120359,120360],{"start":1194},[86,120361,120362],{},"配置环境",[14,120364,120365],{},"根据上方确认一下路径，比如我上面红色框起来的为",[120,120367,120369],{"className":118524,"code":120368,"language":118526,"meta":42,"style":42},"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",[126,120370,120371,120387,120402],{"__ignoreMap":42},[129,120372,120373,120376,120379,120382,120385],{"class":131,"line":132},[129,120374,120375],{"class":1977},"Please",[129,120377,120378],{"class":244}," make",[129,120380,120381],{"class":244}," sure",[129,120383,120384],{"class":244}," that",[129,120386,2688],{"class":139},[129,120388,120389,120391,120394,120397,120400],{"class":131,"line":51},[129,120390,52272],{"class":1977},[129,120392,120393],{"class":244},"   PATH",[129,120395,120396],{"class":244}," includes",[129,120398,120399],{"class":244}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[129,120401,2688],{"class":139},[129,120403,120404,120406,120409,120411,120414,120417,120419,120422,120425,120428,120431,120433,120436,120438],{"class":131,"line":1194},[129,120405,52272],{"class":1977},[129,120407,120408],{"class":244},"   LD_LIBRARY_PATH",[129,120410,120396],{"class":244},[129,120412,120413],{"class":244}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[129,120415,120416],{"class":244}," or,",[129,120418,5224],{"class":244},[129,120420,120421],{"class":244}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[129,120423,120424],{"class":244}," to",[129,120426,120427],{"class":244}," \u002Fetc\u002Fld.so.conf",[129,120429,120430],{"class":244}," and",[129,120432,27231],{"class":244},[129,120434,120435],{"class":244}," ldconfig",[129,120437,64605],{"class":244},[129,120439,120440],{"class":244}," root\n",[14,120442,120443],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[120,120445,120447],{"className":118524,"code":120446,"language":118526,"meta":42,"style":42},"which nvcc\n",[126,120448,120449],{"__ignoreMap":42},[129,120450,120451,120454],{"class":131,"line":132},[129,120452,120453],{"class":188},"which",[129,120455,120456],{"class":244}," nvcc\n",[14,120458,120459],{},[40,120460],{"alt":42,"src":120461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120463,120464],{},"所以我进行以下操作：",[120,120466,120468],{"className":118524,"code":120467,"language":118526,"meta":42,"style":42},"sudo vim ~\u002F.bashrc\n",[126,120469,120470],{"__ignoreMap":42},[129,120471,120472,120474,120476],{"class":131,"line":132},[129,120473,24577],{"class":1977},[129,120475,118584],{"class":244},[129,120477,120478],{"class":244}," ~\u002F.bashrc\n",[14,120480,120481],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[120,120483,120485],{"className":118524,"code":120484,"language":118526,"meta":42,"style":42},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[126,120486,120487,120499],{"__ignoreMap":42},[129,120488,120489,120491,120494,120496],{"class":131,"line":132},[129,120490,25043],{"class":135},[129,120492,120493],{"class":139}," PATH",[129,120495,185],{"class":135},[129,120497,120498],{"class":139},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[129,120500,120501,120503,120506,120508],{"class":131,"line":51},[129,120502,25043],{"class":135},[129,120504,120505],{"class":139}," LD_LIBRARY_PATH",[129,120507,185],{"class":135},[129,120509,120510],{"class":139},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120512,120513],{},[40,120514],{"alt":42,"src":120515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[120,120517,120519],{"className":118524,"code":120518,"language":118526,"meta":42,"style":42},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[126,120520,120521,120526,120532,120537],{"__ignoreMap":42},[129,120522,120523],{"class":131,"line":132},[129,120524,120525],{"class":198},"# 刷新当前终端的环境变量\n",[129,120527,120528,120530],{"class":131,"line":51},[129,120529,100894],{"class":188},[129,120531,120478],{"class":244},[129,120533,120534],{"class":131,"line":1194},[129,120535,120536],{"class":198},"# 验证CUDA是否安装成功\n",[129,120538,120539,120542],{"class":131,"line":1209},[129,120540,120541],{"class":1977},"nvcc",[129,120543,120544],{"class":188}," -V\n",[14,120546,120547],{},"出现下图这种则安装成功。",[14,120549,120550],{},[40,120551],{"alt":42,"src":120552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[100,120554,120556],{"id":120555},"_354-安装cudnn","3.5.4 安装cuDNN",[83,120558,120559],{},[86,120560,120561],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120563,120564,120565,120570],{},"前往 NVIDIA cuDNN 下载页面：",[20,120566,120569],{"href":120567,"rel":120568},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120572,120573],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120575,120576],{},[40,120577],{"alt":42,"src":120578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120580,120581],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120583,120584],{},[40,120585],{"alt":42,"src":120586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120588,120589],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120591,120592],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120594,120595],{},[289,120596,120597],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120599,120600],{},"下载好的：",[14,120602,120603],{},[40,120604],{"alt":42,"src":120605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[83,120607,120608],{"start":51},[86,120609,120610],{},"安装cuDNN",[14,120612,120613],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120615,120616],{},[40,120617],{"alt":42,"src":120618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120620,120621],{},"解压文件，并复制到对应位置完成安装",[120,120623,120625],{"className":118524,"code":120624,"language":118526,"meta":42,"style":42},"# 解压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",[126,120626,120627,120632,120643,120648,120655,120660,120676,120690,120695,120706,120715,120719,120735],{"__ignoreMap":42},[129,120628,120629],{"class":131,"line":132},[129,120630,120631],{"class":198},"# 解压cuDNN文件\n",[129,120633,120634,120637,120640],{"class":131,"line":51},[129,120635,120636],{"class":1977},"tar",[129,120638,120639],{"class":188}," -xvf",[129,120641,120642],{"class":244}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[129,120644,120645],{"class":131,"line":1194},[129,120646,120647],{"class":198},"# cd进文件夹\n",[129,120649,120650,120652],{"class":131,"line":1209},[129,120651,101277],{"class":188},[129,120653,120654],{"class":244}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[129,120656,120657],{"class":131,"line":1215},[129,120658,120659],{"class":198},"# 复制cuDNN文件到CUDA目录\n",[129,120661,120662,120664,120666,120669,120671,120674],{"class":131,"line":1229},[129,120663,24577],{"class":1977},[129,120665,27862],{"class":244},[129,120667,120668],{"class":244}," include\u002Fcudnn",[129,120670,594],{"class":188},[129,120672,120673],{"class":244},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[129,120675,2688],{"class":139},[129,120677,120678,120680,120682,120685,120687],{"class":131,"line":1235},[129,120679,24577],{"class":1977},[129,120681,27862],{"class":244},[129,120683,120684],{"class":244}," lib\u002Flibcudnn",[129,120686,594],{"class":188},[129,120688,120689],{"class":244},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[129,120691,120692],{"class":131,"line":1326},[129,120693,120694],{"class":198},"# 对比一下有没有缺文件\n",[129,120696,120697,120699,120702,120704],{"class":131,"line":1332},[129,120698,26762],{"class":1977},[129,120700,120701],{"class":244}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[129,120703,594],{"class":188},[129,120705,2688],{"class":139},[129,120707,120708,120710,120713],{"class":131,"line":1344},[129,120709,26762],{"class":1977},[129,120711,120712],{"class":244}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[129,120714,119249],{"class":188},[129,120716,120717],{"class":131,"line":1626},[129,120718,120298],{"class":198},[129,120720,120721,120723,120725,120728,120730,120732],{"class":131,"line":1631},[129,120722,24577],{"class":1977},[129,120724,24580],{"class":244},[129,120726,120727],{"class":244}," a+r",[129,120729,120701],{"class":244},[129,120731,594],{"class":188},[129,120733,120734],{"class":139},"   \n",[129,120736,120737,120739,120741,120743,120745],{"class":131,"line":1637},[129,120738,24577],{"class":1977},[129,120740,24580],{"class":244},[129,120742,120727],{"class":244},[129,120744,120712],{"class":244},[129,120746,119249],{"class":188},[83,120748,120749],{"start":1194},[86,120750,120751],{},"检查是否安装成功",[120,120753,120755],{"className":118524,"code":120754,"language":118526,"meta":42,"style":42},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[126,120756,120757,120762],{"__ignoreMap":42},[129,120758,120759],{"class":131,"line":132},[129,120760,120761],{"class":198},"# 检查cuDNN版本命令\n",[129,120763,120764,120767,120770,120772,120774,120777,120780],{"class":131,"line":51},[129,120765,120766],{"class":1977},"cat",[129,120768,120769],{"class":244}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[129,120771,25110],{"class":135},[129,120773,30237],{"class":1977},[129,120775,120776],{"class":244}," CUDNN_MAJOR",[129,120778,120779],{"class":188}," -A",[129,120781,47724],{"class":188},[14,120783,120784],{},"出现下图这样的就是安装成功了",[14,120786,120787],{},[40,120788],{"alt":42,"src":120789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[83,120791,120792],{"start":1209},[86,120793,120794],{},"软链接(一般不需要)",[120,120796,120798],{"className":118524,"code":120797,"language":118526,"meta":42,"style":42},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[126,120799,120800,120805],{"__ignoreMap":42},[129,120801,120802],{"class":131,"line":132},[129,120803,120804],{"class":198},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[129,120806,120807,120809],{"class":131,"line":51},[129,120808,24577],{"class":1977},[129,120810,120811],{"class":244}," ldconfig\n",[14,120813,120814],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[120,120816,120821],{"className":120817,"code":120818,"language":120819,"meta":120820,"style":42},"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",[126,120822,120823,120828,120833,120838,120843,120848,120853],{"__ignoreMap":42},[129,120824,120825],{"class":131,"line":132},[129,120826,120827],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[129,120829,120830],{"class":131,"line":51},[129,120831,120832],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[129,120834,120835],{"class":131,"line":1194},[129,120836,120837],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[129,120839,120840],{"class":131,"line":1209},[129,120841,120842],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[129,120844,120845],{"class":131,"line":1215},[129,120846,120847],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[129,120849,120850],{"class":131,"line":1229},[129,120851,120852],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[129,120854,120855],{"class":131,"line":1235},[129,120856,120857],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120859,120860],{},"运行下方的命令",[120,120862,120864],{"className":118524,"code":120863,"language":118526,"meta":42,"style":42},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[126,120865,120866,120871,120878,120883],{"__ignoreMap":42},[129,120867,120868],{"class":131,"line":132},[129,120869,120870],{"class":198},"# cd进入CUDA路径\n",[129,120872,120873,120875],{"class":131,"line":51},[129,120874,101277],{"class":188},[129,120876,120877],{"class":244}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[129,120879,120880],{"class":131,"line":1194},[129,120881,120882],{"class":198}," # 查看本路径下的需要软链接的文件名\n",[129,120884,120885],{"class":131,"line":1209},[129,120886,120887],{"class":1977}," ls\n",[14,120889,120890],{},[40,120891],{"alt":42,"src":120892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120894,120895,120896,18425,120899,18425,120902,120905],{},"如上图，我需要将",[126,120897,120898],{},"libcudnn_xxx_xxxxx.so.8.9.7",[126,120900,120901],{},"libcudnn_xxx_xxxxx.so.8",[126,120903,120904],{},"libcudnn_xxx_xxxxx.so","软链接",[120,120907,120909],{"className":118524,"code":120908,"language":118526,"meta":42,"style":42},"# 创建符号链接。对于每个 .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",[126,120910,120911,120916,120932,120946,120960,120974,120988,121002,121016,121021,121027,121032],{"__ignoreMap":42},[129,120912,120913],{"class":131,"line":132},[129,120914,120915],{"class":198},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[129,120917,120918,120920,120923,120926,120929],{"class":131,"line":51},[129,120919,24577],{"class":1977},[129,120921,120922],{"class":244}," ln",[129,120924,120925],{"class":188}," -sf",[129,120927,120928],{"class":244}," libcudnn_cnn_train.so.8.9.7",[129,120930,120931],{"class":244}," libcudnn_cnn_train.so.8\n",[129,120933,120934,120936,120938,120940,120943],{"class":131,"line":1194},[129,120935,24577],{"class":1977},[129,120937,120922],{"class":244},[129,120939,120925],{"class":188},[129,120941,120942],{"class":244}," libcudnn_adv_infer.so.8.9.7",[129,120944,120945],{"class":244}," libcudnn_adv_infer.so.8\n",[129,120947,120948,120950,120952,120954,120957],{"class":131,"line":1209},[129,120949,24577],{"class":1977},[129,120951,120922],{"class":244},[129,120953,120925],{"class":188},[129,120955,120956],{"class":244}," libcudnn_adv_train.so.8.9.7",[129,120958,120959],{"class":244}," libcudnn_adv_train.so.8\n",[129,120961,120962,120964,120966,120968,120971],{"class":131,"line":1215},[129,120963,24577],{"class":1977},[129,120965,120922],{"class":244},[129,120967,120925],{"class":188},[129,120969,120970],{"class":244}," libcudnn_cnn_infer.so.8.9.7",[129,120972,120973],{"class":244}," libcudnn_cnn_infer.so.8\n",[129,120975,120976,120978,120980,120982,120985],{"class":131,"line":1229},[129,120977,24577],{"class":1977},[129,120979,120922],{"class":244},[129,120981,120925],{"class":188},[129,120983,120984],{"class":244}," libcudnn.so.8.9.7",[129,120986,120987],{"class":244}," libcudnn.so.8\n",[129,120989,120990,120992,120994,120996,120999],{"class":131,"line":1235},[129,120991,24577],{"class":1977},[129,120993,120922],{"class":244},[129,120995,120925],{"class":188},[129,120997,120998],{"class":244}," libcudnn_ops_infer.so.8.9.7",[129,121000,121001],{"class":244}," libcudnn_ops_infer.so.8\n",[129,121003,121004,121006,121008,121010,121013],{"class":131,"line":1326},[129,121005,24577],{"class":1977},[129,121007,120922],{"class":244},[129,121009,120925],{"class":188},[129,121011,121012],{"class":244}," libcudnn_ops_train.so.8.9.7",[129,121014,121015],{"class":244}," libcudnn_ops_train.so.8\n",[129,121017,121018],{"class":131,"line":1332},[129,121019,121020],{"class":198},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[129,121022,121023,121025],{"class":131,"line":1344},[129,121024,24577],{"class":1977},[129,121026,120811],{"class":244},[129,121028,121029],{"class":131,"line":1626},[129,121030,121031],{"class":198},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[129,121033,121034,121036,121039,121042,121044,121047],{"class":131,"line":1631},[129,121035,26762],{"class":1977},[129,121037,121038],{"class":188}," -l",[129,121040,121041],{"class":244}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[129,121043,594],{"class":188},[129,121045,121046],{"class":244},".so",[129,121048,119249],{"class":188},[100,121050,121052],{"id":121051},"_355-常见问题","3.5.5 常见问题",[83,121054,121055],{},[86,121056,121057],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[120,121059,121061],{"className":118524,"code":121060,"language":118526,"meta":42,"style":42},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[126,121062,121063],{"__ignoreMap":42},[129,121064,121065,121067,121069],{"class":131,"line":132},[129,121066,24577],{"class":1977},[129,121068,118584],{"class":244},[129,121070,121071],{"class":244}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121073,121074],{},"blacklist-nouveau.conf文件内容如下：",[120,121076,121078],{"className":118524,"code":121077,"language":118526,"meta":42,"style":42},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[126,121079,121080,121088,121095,121107,121117],{"__ignoreMap":42},[129,121081,121082,121085],{"class":131,"line":132},[129,121083,121084],{"class":1977},"blacklist",[129,121086,121087],{"class":244}," nouveau\n",[129,121089,121090,121092],{"class":131,"line":51},[129,121091,121084],{"class":1977},[129,121093,121094],{"class":244}," lbm-nouveau\n",[129,121096,121097,121099,121102,121105],{"class":131,"line":1194},[129,121098,115931],{"class":1977},[129,121100,121101],{"class":244}," nouveau",[129,121103,121104],{"class":244}," modeset=",[129,121106,3099],{"class":188},[129,121108,121109,121112,121114],{"class":131,"line":1209},[129,121110,121111],{"class":188},"alias",[129,121113,121101],{"class":244},[129,121115,121116],{"class":244}," off\n",[129,121118,121119,121121,121124],{"class":131,"line":1215},[129,121120,121111],{"class":188},[129,121122,121123],{"class":244}," lbm-nouveau",[129,121125,121116],{"class":244},[14,121127,121128],{},"接着运行下方命令",[120,121130,121132],{"className":118524,"code":121131,"language":118526,"meta":42,"style":42},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[126,121133,121134,121144,121149],{"__ignoreMap":42},[129,121135,121136,121138,121141],{"class":131,"line":132},[129,121137,24577],{"class":1977},[129,121139,121140],{"class":244}," update-initramfs",[129,121142,121143],{"class":188}," -u\n",[129,121145,121146],{"class":131,"line":51},[129,121147,121148],{"class":1977},"或者\n",[129,121150,121151,121153,121156],{"class":131,"line":1194},[129,121152,24577],{"class":1977},[129,121154,121155],{"class":244}," dracut",[129,121157,121158],{"class":188}," --force\n",[14,121160,121161],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[120,121163,121165],{"className":118524,"code":121164,"language":118526,"meta":42,"style":42},"lsmod | grep nouveau\n",[126,121166,121167],{"__ignoreMap":42},[129,121168,121169,121172,121174,121176],{"class":131,"line":132},[129,121170,121171],{"class":1977},"lsmod",[129,121173,25110],{"class":135},[129,121175,30237],{"class":1977},[129,121177,121087],{"class":244},[83,121179,121180],{"start":51},[86,121181,121182],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[120,121184,121186],{"className":118524,"code":121185,"language":118526,"meta":42,"style":42},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[126,121187,121188],{"__ignoreMap":42},[129,121189,121190,121192,121194],{"class":131,"line":132},[129,121191,24577],{"class":1977},[129,121193,118584],{"class":244},[129,121195,121196],{"class":244}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121198,121199],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[120,121201,121203],{"className":118524,"code":121202,"language":118526,"meta":42,"style":42},"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",[126,121204,121205,121213,121221,121229,121236,121244,121254,121262],{"__ignoreMap":42},[129,121206,121207,121210],{"class":131,"line":132},[129,121208,121209],{"class":1977},"Section",[129,121211,121212],{"class":244}," \"OutputClass\"\n",[129,121214,121215,121218],{"class":131,"line":51},[129,121216,121217],{"class":1977},"   Identifier",[129,121219,121220],{"class":244}," \"nvidia\"\n",[129,121222,121223,121226],{"class":131,"line":1194},[129,121224,121225],{"class":1977},"   MatchDriver",[129,121227,121228],{"class":244}," \"nvidia-drm\"\n",[129,121230,121231,121234],{"class":131,"line":1209},[129,121232,121233],{"class":1977},"   Driver",[129,121235,121220],{"class":244},[129,121237,121238,121241],{"class":131,"line":1215},[129,121239,121240],{"class":1977},"   Option",[129,121242,121243],{"class":244}," \"AllowEmptyInitialConfiguration\"\n",[129,121245,121246,121248,121251],{"class":131,"line":1229},[129,121247,121240],{"class":1977},[129,121249,121250],{"class":244}," \"PrimaryGPU\"",[129,121252,121253],{"class":244}," \"yes\"\n",[129,121255,121256,121259],{"class":131,"line":1235},[129,121257,121258],{"class":1977},"   ModulePath",[129,121260,121261],{"class":244}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[129,121263,121264],{"class":131,"line":1326},[129,121265,121266],{"class":1977},"EndSection\n",[83,121268,121269],{"start":1194},[86,121270,121271],{},"安装N卡驱动提示错误",[120,121273,121275],{"className":120817,"code":121274,"language":120819,"meta":120820,"style":42},"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",[126,121276,121277],{"__ignoreMap":42},[129,121278,121279],{"class":131,"line":132},[129,121280,121274],{},[83,121282,121283],{},[86,121284,121285],{},"检查当前运行的内核版本：",[14,121287,121288],{},"运行以下命令以查看你当前正在使用的内核版本：",[120,121290,121292],{"className":117297,"code":121291,"language":117299,"meta":42,"style":42},"uname -r\n",[126,121293,121294],{"__ignoreMap":42},[129,121295,121296,121298],{"class":131,"line":132},[129,121297,70205],{"class":1977},[129,121299,121300],{"class":188}," -r\n",[83,121302,121303],{"start":51},[86,121304,121305],{},"安装内核开发文件：",[14,121307,121308,121309,121312],{},"确保你已经安装了与当前内核版本相匹配的 ",[126,121310,121311],{},"kernel-devel"," 包。运行以下命令来安装：",[120,121314,121316],{"className":117297,"code":121315,"language":117299,"meta":42,"style":42},"sudo dnf install kernel-devel-$(uname -r)\n",[126,121317,121318],{"__ignoreMap":42},[129,121319,121320,121322,121324,121326,121329,121331,121333,121335],{"class":131,"line":132},[129,121321,24577],{"class":1977},[129,121323,26316],{"class":244},[129,121325,23849],{"class":244},[129,121327,121328],{"class":244}," kernel-devel-",[129,121330,25100],{"class":139},[129,121332,70205],{"class":1977},[129,121334,119640],{"class":188},[129,121336,146],{"class":139},[14,121338,121339],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[83,121341,121342],{"start":1194},[86,121343,121344],{},"安装内核源代码（如果需要）：",[14,121346,121347],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[120,121349,121351],{"className":117297,"code":121350,"language":117299,"meta":42,"style":42},"sudo dnf install kernel-headers kernel-source\n",[126,121352,121353],{"__ignoreMap":42},[129,121354,121355,121357,121359,121361,121364],{"class":131,"line":132},[129,121356,24577],{"class":1977},[129,121358,26316],{"class":244},[129,121360,23849],{"class":244},[129,121362,121363],{"class":244}," kernel-headers",[129,121365,121366],{"class":244}," kernel-source\n",[83,121368,121369],{"start":1209},[86,121370,121371],{},"检查安装：",[14,121373,121374,121375,121378],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[126,121376,121377],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[120,121380,121382],{"className":117297,"code":121381,"language":117299,"meta":42,"style":42},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[126,121383,121384],{"__ignoreMap":42},[129,121385,121386,121388],{"class":131,"line":132},[129,121387,26762],{"class":1977},[129,121389,121390],{"class":244}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121392,121393,121394,121397],{},"如果仍然遇到问题，可以通过 ",[126,121395,121396],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5141,121399,121400],{},"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":42,"searchDepth":51,"depth":51,"links":121402},[121403,121407,121417,121421,121422],{"id":118500,"depth":51,"text":118501,"children":121404},[121405,121406],{"id":118510,"depth":1194,"text":118511},{"id":118520,"depth":1194,"text":118521},{"id":118720,"depth":51,"text":118721,"children":121408},[121409,121410,121411,121412,121413,121414,121415,121416],{"id":118724,"depth":1194,"text":118725},{"id":118794,"depth":1194,"text":118795},{"id":118883,"depth":1194,"text":118884},{"id":119128,"depth":1194,"text":119129},{"id":119198,"depth":1194,"text":119199},{"id":119265,"depth":1194,"text":119266},{"id":119300,"depth":1194,"text":119301},{"id":119355,"depth":1194,"text":119356},{"id":119406,"depth":51,"text":119407,"children":121418},[121419,121420],{"id":119410,"depth":1194,"text":119411},{"id":119490,"depth":1194,"text":119491},{"id":119676,"depth":51,"text":119677},{"id":119849,"depth":51,"text":119850,"children":121423},[121424,121425,121426,121427,121428],{"id":119853,"depth":1194,"text":119854},{"id":119894,"depth":1194,"text":119895},{"id":120181,"depth":1194,"text":120182},{"id":120555,"depth":1194,"text":120556},{"id":121051,"depth":1194,"text":121052},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118492,"description":53},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121435,"title":121436,"body":121437,"description":53,"extension":54,"meta":121777,"navigation":56,"path":121778,"seo":121779,"stem":121780,"__hash__":121781},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121438,"toc":121775},[121439,121442,121447,121450,121696,121701,121704,121740,121743,121772],[10,121440,121436],{"id":121441},"_4-命令教程长期积累",[83,121443,121444],{},[86,121445,121446],{},"大多数命令",[14,121448,121449],{},"常用 Linux 命令速查：",[120,121451,121453],{"className":117297,"code":121452,"language":117299,"meta":42,"style":42},"# 文件与目录\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",[126,121454,121455,121460,121467,121474,121482,121489,121496,121504,121512,121519,121526,121534,121538,121543,121550,121558,121565,121569,121574,121581,121589,121597,121605,121613,121617,121622,121630,121637,121644,121652,121660,121664,121669,121678,121687],{"__ignoreMap":42},[129,121456,121457],{"class":131,"line":132},[129,121458,121459],{"class":198},"# 文件与目录\n",[129,121461,121462,121464],{"class":131,"line":51},[129,121463,26762],{"class":1977},[129,121465,121466],{"class":198},"        # 列出目录内容\n",[129,121468,121469,121471],{"class":131,"line":1194},[129,121470,101277],{"class":188},[129,121472,121473],{"class":198},"        # 切换目录\n",[129,121475,121476,121479],{"class":131,"line":1209},[129,121477,121478],{"class":188},"pwd",[129,121480,121481],{"class":198},"       # 显示当前路径\n",[129,121483,121484,121486],{"class":131,"line":1215},[129,121485,101267],{"class":1977},[129,121487,121488],{"class":198},"     # 创建目录\n",[129,121490,121491,121493],{"class":131,"line":1229},[129,121492,25323],{"class":1977},[129,121494,121495],{"class":198},"        # 删除文件或目录\n",[129,121497,121498,121501],{"class":131,"line":1235},[129,121499,121500],{"class":1977},"cp",[129,121502,121503],{"class":198},"        # 复制文件或目录\n",[129,121505,121506,121509],{"class":131,"line":1326},[129,121507,121508],{"class":1977},"mv",[129,121510,121511],{"class":198},"        # 移动\u002F重命名文件或目录\n",[129,121513,121514,121516],{"class":131,"line":1332},[129,121515,101284],{"class":1977},[129,121517,121518],{"class":198},"     # 创建空文件\n",[129,121520,121521,121523],{"class":131,"line":1344},[129,121522,120766],{"class":1977},[129,121524,121525],{"class":198},"       # 查看文件内容\n",[129,121527,121528,121531],{"class":131,"line":1626},[129,121529,121530],{"class":1977},"head\u002Ftail",[129,121532,121533],{"class":198}," # 查看文件头部\u002F尾部\n",[129,121535,121536],{"class":131,"line":1631},[129,121537,2414],{"emptyLinePlaceholder":56},[129,121539,121540],{"class":131,"line":1637},[129,121541,121542],{"class":198},"# 权限管理\n",[129,121544,121545,121547],{"class":131,"line":1642},[129,121546,24612],{"class":1977},[129,121548,121549],{"class":198},"     # 修改文件权限\n",[129,121551,121552,121555],{"class":131,"line":1656},[129,121553,121554],{"class":1977},"chown",[129,121556,121557],{"class":198},"     # 修改文件所有者\n",[129,121559,121560,121562],{"class":131,"line":1661},[129,121561,24577],{"class":1977},[129,121563,121564],{"class":198},"      # 以管理员身份执行\n",[129,121566,121567],{"class":131,"line":1667},[129,121568,2414],{"emptyLinePlaceholder":56},[129,121570,121571],{"class":131,"line":1688},[129,121572,121573],{"class":198},"# 系统信息\n",[129,121575,121576,121578],{"class":131,"line":1693},[129,121577,70205],{"class":1977},[129,121579,121580],{"class":198},"     # 系统信息\n",[129,121582,121583,121586],{"class":131,"line":1707},[129,121584,121585],{"class":1977},"df",[129,121587,121588],{"class":198},"        # 磁盘使用情况\n",[129,121590,121591,121594],{"class":131,"line":1712},[129,121592,121593],{"class":1977},"free",[129,121595,121596],{"class":198},"      # 内存使用情况\n",[129,121598,121599,121602],{"class":131,"line":1741},[129,121600,121601],{"class":1977},"top\u002Fhtop",[129,121603,121604],{"class":198},"  # 进程监控\n",[129,121606,121607,121610],{"class":131,"line":1746},[129,121608,121609],{"class":1977},"ps",[129,121611,121612],{"class":198},"        # 查看进程\n",[129,121614,121615],{"class":131,"line":1763},[129,121616,2414],{"emptyLinePlaceholder":56},[129,121618,121619],{"class":131,"line":1768},[129,121620,121621],{"class":198},"# 网络\n",[129,121623,121624,121627],{"class":131,"line":1773},[129,121625,121626],{"class":1977},"ping",[129,121628,121629],{"class":198},"      # 测试网络连通性\n",[129,121631,121632,121634],{"class":131,"line":1778},[129,121633,26850],{"class":1977},[129,121635,121636],{"class":198},"      # 发送 HTTP 请求\n",[129,121638,121639,121641],{"class":131,"line":1792},[129,121640,120290],{"class":1977},[129,121642,121643],{"class":198},"      # 下载文件\n",[129,121645,121646,121649],{"class":131,"line":1797},[129,121647,121648],{"class":1977},"ssh",[129,121650,121651],{"class":198},"       # 远程登录\n",[129,121653,121654,121657],{"class":131,"line":2591},[129,121655,121656],{"class":1977},"scp",[129,121658,121659],{"class":198},"       # 远程文件传输\n",[129,121661,121662],{"class":131,"line":2605},[129,121663,2414],{"emptyLinePlaceholder":56},[129,121665,121666],{"class":131,"line":2613},[129,121667,121668],{"class":198},"# 包管理（Debian\u002FUbuntu）\n",[129,121670,121671,121673,121675],{"class":131,"line":2618},[129,121672,117369],{"class":1977},[129,121674,117348],{"class":244},[129,121676,121677],{"class":198},"   # 更新软件源\n",[129,121679,121680,121682,121684],{"class":131,"line":2624},[129,121681,117369],{"class":1977},[129,121683,23849],{"class":244},[129,121685,121686],{"class":198},"  # 安装软件包\n",[129,121688,121689,121691,121693],{"class":131,"line":2630},[129,121690,117369],{"class":1977},[129,121692,26080],{"class":244},[129,121694,121695],{"class":198},"   # 卸载软件包\n",[83,121697,121698],{"start":51},[86,121699,121700],{},"KDE Dolphin 以root打开",[14,121702,121703],{},"kde5",[120,121705,121707],{"className":117297,"code":121706,"language":117299,"meta":42,"style":42},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[126,121708,121709],{"__ignoreMap":42},[129,121710,121711,121714,121717,121720,121722,121724,121727,121730,121732,121735,121737],{"class":131,"line":132},[129,121712,121713],{"class":1977},"pkexec",[129,121715,121716],{"class":244}," env",[129,121718,121719],{"class":244}," DISPLAY=",[129,121721,28144],{"class":139},[129,121723,28202],{"class":244},[129,121725,121726],{"class":139},"$XAUTHORITY ",[129,121728,121729],{"class":244},"KDE_SESSION_VERSION=",[129,121731,458],{"class":188},[129,121733,121734],{"class":244}," KDE_FULL_SESSION=",[129,121736,1377],{"class":188},[129,121738,121739],{"class":244}," dolphin\n",[14,121741,121742],{},"kde6",[120,121744,121746],{"className":117297,"code":121745,"language":117299,"meta":42,"style":42},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[126,121747,121748],{"__ignoreMap":42},[129,121749,121750,121752,121754,121756,121758,121760,121762,121764,121766,121768,121770],{"class":131,"line":132},[129,121751,121713],{"class":1977},[129,121753,121716],{"class":244},[129,121755,121719],{"class":244},[129,121757,28144],{"class":139},[129,121759,28202],{"class":244},[129,121761,121726],{"class":139},[129,121763,121729],{"class":244},[129,121765,483],{"class":188},[129,121767,121734],{"class":244},[129,121769,1377],{"class":188},[129,121771,121739],{"class":244},[5141,121773,121774],{},"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":42,"searchDepth":51,"depth":51,"links":121776},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121436,"description":53},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121783,"title":121784,"body":121785,"description":53,"extension":54,"meta":121799,"navigation":56,"path":121800,"seo":121801,"stem":121802,"__hash__":121803},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121786,"toc":121797},[121787,121790],[10,121788,121784],{"id":121789},"_5-各种环境配置",[14,121791,121792],{},[20,121793,121796],{"href":121794,"rel":121795},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24],"电控组环境搭建大全",{"title":42,"searchDepth":51,"depth":51,"links":121798},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121784,"description":53},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121805,"title":121806,"body":121807,"description":53,"extension":54,"meta":122155,"navigation":56,"path":122156,"seo":122157,"stem":122158,"__hash__":122159},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121808,"toc":122147},[121809,121812,121816,121820,121824,121829,121836,121840,122133,122137,122144],[10,121810,121806],{"id":121811},"_6-拓展功能",[71,121813,121815],{"id":121814},"_61-wine","6.1 Wine",[71,121817,121819],{"id":121818},"_62-android","6.2 Android",[100,121821,121823],{"id":121822},"_621-i卡a卡","6.2.1 I卡、A卡",[83,121825,121826],{},[86,121827,121828],{},"Wayland-Waydroid(体验超级好)",[14,121830,121831,121832],{},"Waydroid 官网与安装指南：",[20,121833,121834],{"href":121834,"rel":121835},"https:\u002F\u002Fwaydro.id\u002F",[24],[100,121837,121839],{"id":121838},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[83,121841,121842],{},[86,121843,121844,121845,121847,121848,121852,121854,121857,121862,122059],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53717,121846],{},"BlissOS 官网下载：",[20,121849,121850],{"href":121850,"rel":121851},"https:\u002F\u002Fblissos.org\u002F",[24],[53717,121853],{},[40,121855],{"alt":42,"src":121856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[83,121858,121859],{"start":1194},[86,121860,121861],{},"比较推荐的配置",[120,121863,121865],{"className":117297,"code":121864,"language":117299,"meta":42,"style":42},"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",[126,121866,121867,121874,121884,121894,121904,121916,121926,121933,121943,121952,121961,121971,121981,121990,122000,122010,122022,122032,122041,122051],{"__ignoreMap":42},[129,121868,121869,121872],{"class":131,"line":132},[129,121870,121871],{"class":1977},"qemu-system-x86_64",[129,121873,24679],{"class":188},[129,121875,121876,121879,121882],{"class":131,"line":51},[129,121877,121878],{"class":188},"        -M",[129,121880,121881],{"class":244}," q35,vmport=off",[129,121883,24679],{"class":188},[129,121885,121886,121889,121892],{"class":131,"line":1194},[129,121887,121888],{"class":188},"        -accel",[129,121890,121891],{"class":244}," kvm",[129,121893,24679],{"class":188},[129,121895,121896,121899,121902],{"class":131,"line":1209},[129,121897,121898],{"class":188},"        -cpu",[129,121900,121901],{"class":244}," qemu64,+sse3,+sse4.2",[129,121903,24679],{"class":188},[129,121905,121906,121909,121912,121914],{"class":131,"line":1215},[129,121907,121908],{"class":188},"        -smp",[129,121910,121911],{"class":244}," 8,cores=",[129,121913,432],{"class":188},[129,121915,24679],{"class":188},[129,121917,121918,121921,121924],{"class":131,"line":1229},[129,121919,121920],{"class":188},"        -m",[129,121922,121923],{"class":244}," 6G",[129,121925,24679],{"class":188},[129,121927,121928,121931],{"class":131,"line":1235},[129,121929,121930],{"class":188},"        -usb",[129,121932,24679],{"class":188},[129,121934,121935,121938,121941],{"class":131,"line":1326},[129,121936,121937],{"class":188},"        -device",[129,121939,121940],{"class":244}," virtio-tablet",[129,121942,24679],{"class":188},[129,121944,121945,121947,121950],{"class":131,"line":1332},[129,121946,121937],{"class":188},[129,121948,121949],{"class":244}," virtio-keyboard",[129,121951,24679],{"class":188},[129,121953,121954,121956,121959],{"class":131,"line":1344},[129,121955,121937],{"class":188},[129,121957,121958],{"class":244}," usb-tablet",[129,121960,24679],{"class":188},[129,121962,121963,121966,121969],{"class":131,"line":1626},[129,121964,121965],{"class":188},"        -bios",[129,121967,121968],{"class":244}," OVMF-pure-efi64.fd",[129,121970,24679],{"class":188},[129,121972,121973,121976,121979],{"class":131,"line":1631},[129,121974,121975],{"class":188},"        -net",[129,121977,121978],{"class":244}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[129,121980,24679],{"class":188},[129,121982,121983,121985,121988],{"class":131,"line":1637},[129,121984,121975],{"class":188},[129,121986,121987],{"class":244}," nic,model=virtio",[129,121989,24679],{"class":188},[129,121991,121992,121995,121998],{"class":131,"line":1642},[129,121993,121994],{"class":188},"        -audio",[129,121996,121997],{"class":244}," sdl,model=hda",[129,121999,24679],{"class":188},[129,122001,122002,122005,122008],{"class":131,"line":1656},[129,122003,122004],{"class":188},"        -display",[129,122006,122007],{"class":244}," sdl,gl=on,show-cursor=on",[129,122009,24679],{"class":188},[129,122011,122012,122014,122017,122020],{"class":131,"line":1661},[129,122013,121937],{"class":188},[129,122015,122016],{"class":244}," virtio-vga-gl,xres=1920,yres=",[129,122018,122019],{"class":188},"1080",[129,122021,24679],{"class":188},[129,122023,122024,122027,122030],{"class":131,"line":1667},[129,122025,122026],{"class":188},"        -drive",[129,122028,122029],{"class":244}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[129,122031,24679],{"class":188},[129,122033,122034,122036,122039],{"class":131,"line":1688},[129,122035,122026],{"class":188},[129,122037,122038],{"class":244}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[129,122040,24679],{"class":188},[129,122042,122043,122046,122049],{"class":131,"line":1693},[129,122044,122045],{"class":188},"        -monitor",[129,122047,122048],{"class":244}," stdio",[129,122050,24679],{"class":188},[129,122052,122053,122056],{"class":131,"line":1707},[129,122054,122055],{"class":188},"        -serial",[129,122057,122058],{"class":244}," none\n",[83,122060,122061],{"start":1215},[86,122062,122063,122064],{},"常用操作：",[83,122065,122066,122069,122125],{},[86,122067,122068],{},"全屏：Ctrl+Alt+F",[86,122070,122071,122072,122077],{},"adb调试",[83,122073,122074],{},[86,122075,122076],{},"使Linux与Android用ADB连接。",[120,122078,122080],{"className":117297,"code":122079,"language":117299,"meta":42,"style":42},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[126,122081,122082,122087,122098,122103,122115,122120],{"__ignoreMap":42},[129,122083,122084],{"class":131,"line":132},[129,122085,122086],{"class":198},"# 连接安卓\n",[129,122088,122089,122092,122095],{"class":131,"line":51},[129,122090,122091],{"class":1977},"adb",[129,122093,122094],{"class":244}," connect",[129,122096,122097],{"class":188}," 127.0.0.1\n",[129,122099,122100],{"class":131,"line":1194},[129,122101,122102],{"class":198},"# 打开shell\n",[129,122104,122105,122107,122109,122112],{"class":131,"line":1209},[129,122106,122091],{"class":1977},[129,122108,26884],{"class":188},[129,122110,122111],{"class":244}," 127.0.0.1:5555",[129,122113,122114],{"class":244}," shell\n",[129,122116,122117],{"class":131,"line":1215},[129,122118,122119],{"class":198},"# 使用root权限\n",[129,122121,122122],{"class":131,"line":1229},[129,122123,122124],{"class":1977},"su\n",[86,122126,122127,122128],{},"中文输入法",[83,122129,122130],{},[86,122131,122132],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[71,122134,122136],{"id":122135},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122138,122139,122140],{},"rEFInd 官网与文档：",[20,122141,122142],{"href":122142,"rel":122143},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24],[5141,122145,122146],{},"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":42,"searchDepth":51,"depth":51,"links":122148},[122149,122150,122154],{"id":121814,"depth":51,"text":121815},{"id":121818,"depth":51,"text":121819,"children":122151},[122152,122153],{"id":121822,"depth":1194,"text":121823},{"id":121838,"depth":1194,"text":121839},{"id":122135,"depth":51,"text":122136},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121806,"description":53},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122161,"title":122162,"body":122163,"description":53,"extension":54,"meta":125462,"navigation":56,"path":125463,"seo":125464,"stem":125465,"__hash__":125466},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122164,"toc":125436},[122165,122168,122172,122175,122182,122432,122435,122507,122510,122514,122518,122523,122526,122529,122532,122537,122540,122543,122546,122551,122554,122559,122562,122565,122570,122573,122578,122581,122585,122589,122592,122597,122600,122614,122617,122620,122629,122632,122641,122644,122647,122656,122659,122668,122671,122674,122683,122686,122689,122704,122707,122710,122719,122724,122727,122730,122739,122742,122751,122754,122763,122766,122775,122780,122783,122791,122796,122799,122808,122811,122819,122824,122827,122836,122839,122842,122846,122849,122854,122857,122862,122876,122881,122886,122897,122902,122908,122913,122928,122933,122936,122941,122946,122951,122959,122964,122971,122976,122987,122992,122995,122999,123002,123005,123010,123013,123032,123037,123040,123049,123054,123057,123079,123082,123112,123115,123120,123123,123137,123142,123161,123164,123167,123172,123184,123189,123194,123197,123202,123205,123220,123223,123228,123233,123237,123242,123282,123285,123289,123295,123301,123306,123309,123316,123321,123328,123331,123334,123341,123355,123358,123418,123421,123435,123447,123450,123453,123456,123520,123523,123526,123529,123549,123552,123557,123564,123568,123571,123575,123580,123585,123589,123592,123595,123637,123642,123645,123667,123682,123684,123689,123701,123761,123763,123765,123819,123821,123823,123829,123834,123837,123842,123846,123849,123911,123916,123919,123921,123925,123937,124019,124021,124023,124077,124083,124085,124089,124094,124096,124101,124105,124125,124160,124164,124167,124170,124173,124180,124183,124195,124198,124213,124216,124235,124283,124286,124303,124306,124320,124325,124328,124337,124352,124364,124402,124407,124416,124421,124426,124452,124461,124465,124469,124474,124477,124481,124485,124490,124493,124498,124501,124506,124509,124514,124517,124521,124526,124529,124534,124537,124541,124546,124549,124554,124557,124562,124565,124569,124574,124577,124582,124585,124590,124593,124597,124602,124605,124610,124613,124618,124621,124626,124629,124634,124637,124642,124645,124649,124654,124657,124662,124669,124673,124678,124681,124686,124689,124693,124698,124701,124704,124707,124710,124713,124717,124720,124730,124735,124740,124762,124767,124772,124779,124783,124788,124791,124794,124799,124802,124805,124808,124811,124814,124817,124820,124823,124826,124829,124832,124835,124840,124845,124850,124855,124860,124865,124870,124873,124877,124880,124884,124889,124894,124899,124904,124908,124914,124922,124927,124930,124935,124950,124953,124958,124992,125007,125010,125065,125091,125103,125106,125115,125118,125133,125138,125141,125147,125152,125155,125160,125163,125168,125173,125180,125183,125198,125201,125236,125241,125249,125287,125290,125293,125298,125301,125306,125317,125351,125356,125359,125368,125373,125379,125382,125387,125396,125401,125404,125407,125412,125420,125423,125428,125433],[10,122166,122162],{"id":122167},"_7-其他操作",[71,122169,122171],{"id":122170},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122173,122174],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122176,122177,122178,122181],{},"进入工控机的硬盘目录，进入",[126,122179,122180],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[120,122183,122187],{"className":122184,"code":122185,"language":122186,"meta":42,"style":42},"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",[126,122188,122189,122197,122208,122215,122222,122234,122241,122253,122264,122275,122282,122289,122296,122308,122320,122327,122339,122351,122358,122370,122382,122394,122405,122412,122423],{"__ignoreMap":42},[129,122190,122191,122194],{"class":131,"line":132},[129,122192,122193],{"class":51301},"network",[129,122195,122196],{"class":139},": \n",[129,122198,122199,122202,122204,122206],{"class":131,"line":51},[129,122200,122201],{"class":51301},"  version",[129,122203,51438],{"class":139},[129,122205,217],{"class":188},[129,122207,2688],{"class":139},[129,122209,122210,122213],{"class":131,"line":1194},[129,122211,122212],{"class":51301},"  wifis",[129,122214,122196],{"class":139},[129,122216,122217,122220],{"class":131,"line":1209},[129,122218,122219],{"class":51301},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[129,122221,122196],{"class":139},[129,122223,122224,122227,122229,122232],{"class":131,"line":1215},[129,122225,122226],{"class":51301},"      renderer",[129,122228,51438],{"class":139},[129,122230,122231],{"class":244},"NetworkManager",[129,122233,2688],{"class":139},[129,122235,122236,122239],{"class":131,"line":1229},[129,122237,122238],{"class":51301},"      match",[129,122240,122196],{"class":139},[129,122242,122243,122246,122248,122251],{"class":131,"line":1235},[129,122244,122245],{"class":51301},"        name",[129,122247,51438],{"class":139},[129,122249,122250],{"class":244},"\"wlan0\"",[129,122252,2688],{"class":139},[129,122254,122255,122258,122260,122262],{"class":131,"line":1326},[129,122256,122257],{"class":51301},"      dhcp4",[129,122259,51438],{"class":139},[129,122261,1377],{"class":188},[129,122263,2688],{"class":139},[129,122265,122266,122269,122271,122273],{"class":131,"line":1332},[129,122267,122268],{"class":51301},"      dhcp6",[129,122270,51438],{"class":139},[129,122272,1377],{"class":188},[129,122274,2688],{"class":139},[129,122276,122277,122280],{"class":131,"line":1344},[129,122278,122279],{"class":51301},"      access-points",[129,122281,122196],{"class":139},[129,122283,122284,122287],{"class":131,"line":1626},[129,122285,122286],{"class":244},"        \"EMIS_Vinci_Robocon_5G\"",[129,122288,122196],{"class":139},[129,122290,122291,122294],{"class":131,"line":1631},[129,122292,122293],{"class":51301},"          auth",[129,122295,122196],{"class":139},[129,122297,122298,122301,122303,122306],{"class":131,"line":1637},[129,122299,122300],{"class":51301},"            key-management",[129,122302,51438],{"class":139},[129,122304,122305],{"class":244},"\"psk\"",[129,122307,2688],{"class":139},[129,122309,122310,122313,122315,122318],{"class":131,"line":1642},[129,122311,122312],{"class":51301},"            password",[129,122314,51438],{"class":139},[129,122316,122317],{"class":244},"\"vinci666\"",[129,122319,2688],{"class":139},[129,122321,122322,122325],{"class":131,"line":1656},[129,122323,122324],{"class":51301},"          networkmanager",[129,122326,122196],{"class":139},[129,122328,122329,122332,122334,122337],{"class":131,"line":1661},[129,122330,122331],{"class":51301},"            uuid",[129,122333,51438],{"class":139},[129,122335,122336],{"class":244},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[129,122338,2688],{"class":139},[129,122340,122341,122344,122346,122349],{"class":131,"line":1667},[129,122342,122343],{"class":51301},"            name",[129,122345,51438],{"class":139},[129,122347,122348],{"class":244},"\"EMIS_Vinci_Robocon_5G\"",[129,122350,2688],{"class":139},[129,122352,122353,122356],{"class":131,"line":1688},[129,122354,122355],{"class":51301},"            passthrough",[129,122357,122196],{"class":139},[129,122359,122360,122363,122365,122368],{"class":131,"line":1693},[129,122361,122362],{"class":51301},"              wifi-security.auth-alg",[129,122364,51438],{"class":139},[129,122366,122367],{"class":244},"\"open\"",[129,122369,2688],{"class":139},[129,122371,122372,122375,122377,122380],{"class":131,"line":1707},[129,122373,122374],{"class":51301},"              ipv6.addr-gen-mode",[129,122376,51438],{"class":139},[129,122378,122379],{"class":244},"\"default\"",[129,122381,2688],{"class":139},[129,122383,122384,122387,122389,122392],{"class":131,"line":1712},[129,122385,122386],{"class":51301},"              ipv6.ip6-privacy",[129,122388,51438],{"class":139},[129,122390,122391],{"class":244},"\"-1\"",[129,122393,2688],{"class":139},[129,122395,122396,122399,122401,122403],{"class":131,"line":1741},[129,122397,122398],{"class":51301},"              proxy._",[129,122400,51438],{"class":139},[129,122402,7667],{"class":244},[129,122404,2688],{"class":139},[129,122406,122407,122410],{"class":131,"line":1746},[129,122408,122409],{"class":51301},"      networkmanager",[129,122411,122196],{"class":139},[129,122413,122414,122417,122419,122421],{"class":131,"line":1763},[129,122415,122416],{"class":51301},"        uuid",[129,122418,51438],{"class":139},[129,122420,122336],{"class":244},[129,122422,2688],{"class":139},[129,122424,122425,122427,122429],{"class":131,"line":1768},[129,122426,122245],{"class":51301},[129,122428,51438],{"class":139},[129,122430,122431],{"class":244},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122433,122434],{},"将其改为新wifi的名和密码：",[120,122436,122438],{"className":122184,"code":122437,"language":122186,"meta":42,"style":42},"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",[126,122439,122440,122446,122455,122461,122468,122477,122485,122491,122497],{"__ignoreMap":42},[129,122441,122442,122444],{"class":131,"line":132},[129,122443,122193],{"class":51301},[129,122445,3753],{"class":139},[129,122447,122448,122450,122452],{"class":131,"line":51},[129,122449,122201],{"class":51301},[129,122451,51438],{"class":139},[129,122453,122454],{"class":188},"2\n",[129,122456,122457,122459],{"class":131,"line":1194},[129,122458,122212],{"class":51301},[129,122460,3753],{"class":139},[129,122462,122463,122466],{"class":131,"line":1209},[129,122464,122465],{"class":51301},"    wlan0",[129,122467,3753],{"class":139},[129,122469,122470,122472,122474],{"class":131,"line":1215},[129,122471,122257],{"class":51301},[129,122473,51438],{"class":139},[129,122475,122476],{"class":188},"true\n",[129,122478,122479,122481,122483],{"class":131,"line":1229},[129,122480,122268],{"class":51301},[129,122482,51438],{"class":139},[129,122484,122476],{"class":188},[129,122486,122487,122489],{"class":131,"line":1235},[129,122488,122279],{"class":51301},[129,122490,3753],{"class":139},[129,122492,122493,122495],{"class":131,"line":1326},[129,122494,122286],{"class":244},[129,122496,3753],{"class":139},[129,122498,122499,122502,122504],{"class":131,"line":1332},[129,122500,122501],{"class":51301},"          password",[129,122503,51438],{"class":139},[129,122505,122506],{"class":244},"\"vinci666\"\n",[14,122508,122509],{},"工控机开机即可连上网。",[71,122511,122513],{"id":122512},"_72-ssh远程开发","7.2 SSH远程开发",[100,122515,122517],{"id":122516},"_721-环境准备","7.2.1 环境准备",[14,122519,122520],{},[289,122521,122522],{},"1.硬件准备",[14,122524,122525],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122527,122528],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122530,122531],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122533,122534],{},[289,122535,122536],{},"2.设置固定IP",[14,122538,122539],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122541,122542],{},"1.进入设置界面",[14,122544,122545],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122547,122548],{},[40,122549],{"alt":42,"src":122550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122552,122553],{},"2.配置所连接的网络",[14,122555,122556],{},[40,122557],{"alt":42,"src":122558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122560,122561],{},"3.设置固定IP",[14,122563,122564],{},"查看当前IP地址。",[14,122566,122567],{},[40,122568],{"alt":42,"src":122569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122571,122572],{},"设置固定IP。",[14,122574,122575],{},[40,122576],{"alt":42,"src":122577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122579,122580],{},"至此，IP配置完毕。",[100,122582,122584],{"id":122583},"_722-环境搭建","7.2.2 环境搭建",[14,122586,122587],{},[289,122588,25754],{},[14,122590,122591],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122593,122594],{},[289,122595,122596],{},"实现",[14,122598,122599],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[83,122601,122602,122605,122608,122611],{},[86,122603,122604],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[86,122606,122607],{},"远程主机启动SSH服务；",[86,122609,122610],{},"本地主机登陆远程主机；",[86,122612,122613],{},"实现数据传输。",[14,122615,122616],{},"1.安装SSH客户端与服务端",[14,122618,122619],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[120,122621,122623],{"className":120817,"code":122622,"language":120819,"meta":120820,"style":42}," sudo apt install openssh-server\n",[126,122624,122625],{"__ignoreMap":42},[129,122626,122627],{"class":131,"line":132},[129,122628,122622],{},[14,122630,122631],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[120,122633,122635],{"className":120817,"code":122634,"language":120819,"meta":120820,"style":42},"sudo apt install openssh-client\n",[126,122636,122637],{"__ignoreMap":42},[129,122638,122639],{"class":131,"line":132},[129,122640,122634],{},[14,122642,122643],{},"2.远程主机启动SSH服务",[14,122645,122646],{},"远程主机启动 ssh 服务命令如下：",[120,122648,122650],{"className":120817,"code":122649,"language":120819,"meta":120820,"style":42},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[126,122651,122652],{"__ignoreMap":42},[129,122653,122654],{"class":131,"line":132},[129,122655,122649],{},[14,122657,122658],{},"启动后可使用如下命令查看服务是否正常运行：",[120,122660,122662],{"className":120817,"code":122661,"language":120819,"meta":120820,"style":42},"ps -e | grep ssh\n",[126,122663,122664],{"__ignoreMap":42},[129,122665,122666],{"class":131,"line":132},[129,122667,122661],{},[14,122669,122670],{},"如果启动成功，会包含 sshd 程序。",[14,122672,122673],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[120,122675,122677],{"className":120817,"code":122676,"language":120819,"meta":120820,"style":42},"sudo systemctl enable ssh\n",[126,122678,122679],{"__ignoreMap":42},[129,122680,122681],{"class":131,"line":132},[129,122682,122676],{},[14,122684,122685],{},"3.本地远程登录",[14,122687,122688],{},"登录远程主机可以调用如下命令:",[120,122690,122692],{"className":117297,"code":122691,"language":117299,"meta":42,"style":42},"ssh -X 用户名@ip地址\n",[126,122693,122694],{"__ignoreMap":42},[129,122695,122696,122698,122701],{"class":131,"line":132},[129,122697,121648],{"class":1977},[129,122699,122700],{"class":188}," -X",[129,122702,122703],{"class":244}," 用户名@ip地址\n",[14,122705,122706],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122708,122709],{},"如果退出，可以调用exit命令：",[120,122711,122713],{"className":120817,"code":122712,"language":120819,"meta":120820,"style":42},"exit\n",[126,122714,122715],{"__ignoreMap":42},[129,122716,122717],{"class":131,"line":132},[129,122718,122712],{},[14,122720,122721],{},[289,122722,122723],{},"4.实现数据传输",[14,122725,122726],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122728,122729],{},"上传文件指令格式如下：",[120,122731,122733],{"className":120817,"code":122732,"language":120819,"meta":120820,"style":42},"scp 本地文件路径 账号@ip:路径\n",[126,122734,122735],{"__ignoreMap":42},[129,122736,122737],{"class":131,"line":132},[129,122738,122732],{},[14,122740,122741],{},"上传文件夹指令格式如下：",[120,122743,122745],{"className":120817,"code":122744,"language":120819,"meta":120820,"style":42},"scp -r 本地文件夹路径 账号@ip:路径\n",[126,122746,122747],{"__ignoreMap":42},[129,122748,122749],{"class":131,"line":132},[129,122750,122744],{},[14,122752,122753],{},"下载文件指令格式如下：",[120,122755,122757],{"className":120817,"code":122756,"language":120819,"meta":120820,"style":42},"scp 账号@ip:路径 本地文件夹路径\n",[126,122758,122759],{"__ignoreMap":42},[129,122760,122761],{"class":131,"line":132},[129,122762,122756],{},[14,122764,122765],{},"下载文件夹指令格式如下：",[120,122767,122769],{"className":120817,"code":122768,"language":120819,"meta":120820,"style":42},"scp -r 账号@ip:路径 本地文件夹路径\n",[126,122770,122771],{"__ignoreMap":42},[129,122772,122773],{"class":131,"line":132},[129,122774,122768],{},[14,122776,122777],{},[289,122778,122779],{},"优化",[14,122781,122782],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[83,122784,122785,122788],{},[86,122786,122787],{},"本地生成密钥对；",[86,122789,122790],{},"将公钥上传至远程主机。",[14,122792,122793],{},[289,122794,122795],{},"1.生成密钥对",[14,122797,122798],{},"本地客户端生成公私钥：（一路回车默认即可）",[120,122800,122802],{"className":120817,"code":122801,"language":120819,"meta":120820,"style":42},"ssh-keygen\n",[126,122803,122804],{"__ignoreMap":42},[129,122805,122806],{"class":131,"line":132},[129,122807,122801],{},[14,122809,122810],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[83,122812,122813,122816],{},[86,122814,122815],{},"id_rsa （私钥）；",[86,122817,122818],{},"id_rsa.pub (公钥)。",[14,122820,122821],{},[289,122822,122823],{},"2.公钥上传",[14,122825,122826],{},"上传指令如下：",[120,122828,122830],{"className":120817,"code":122829,"language":120819,"meta":120820,"style":42},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[126,122831,122832],{"__ignoreMap":42},[129,122833,122834],{"class":131,"line":132},[129,122835,122829],{},[14,122837,122838],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122840,122841],{},"以后再远程登录就无需录入密码了。",[100,122843,122845],{"id":122844},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122847,122848],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122850,122851],{},[289,122852,122853],{},"1.准备工作",[14,122855,122856],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122858,122859],{},[289,122860,122861],{},"2.为VScode安装远程开发插件",[14,122863,122864,122865,122868,122869,122872,122873,28386],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[126,122866,122867],{},"扩展：商店","的搜索栏输入",[126,122870,122871],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[126,122874,122875],{},"安装",[14,122877,122878],{},[40,122879],{"alt":42,"src":122880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122882,122883],{},[289,122884,122885],{},"3.配置远程连接",[14,122887,122888,122889,122892,122893,122896],{},"步骤1：使用快捷键",[126,122890,122891],{},"ctrl + shift + p","打开命令输入窗口，并输入",[126,122894,122895],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122898,122899],{},[40,122900],{"alt":42,"src":122901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122903,122904,122905,28386],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[126,122906,122907],{},"Add New SSH Host",[14,122909,122910],{},[40,122911],{"alt":42,"src":122912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122914,122915,122916,122919,122920,122923,122924,122927],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[126,122917,122918],{},"ssh +X ubuntu@192.168.43.164","，其中，",[126,122921,122922],{},"ubuntu","需要替换为你的登录用户名，",[126,122925,122926],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122929,122930],{},[40,122931],{"alt":42,"src":122932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122934,122935],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122937,122938],{},[40,122939],{"alt":42,"src":122940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,122942,122943],{},[40,122944],{"alt":42,"src":122945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,122947,122948],{},[289,122949,122950],{},"4.使用",[14,122952,122953,122954,122892,122956,122958],{},"步骤1：继续使用快捷键",[126,122955,122891],{},[126,122957,122895],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,122960,122961],{},[40,122962],{"alt":42,"src":122963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,122965,122966,122967,122970],{},"或者，也可以点击侧边栏的",[126,122968,122969],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,122972,122973],{},[40,122974],{"alt":42,"src":122975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,122977,122978,122979,122982,122983,122986],{},"步骤2：选择菜单栏的",[126,122980,122981],{},"文件","下的",[126,122984,122985],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,122988,122989],{},[40,122990],{"alt":42,"src":122991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,122993,122994],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[71,122996,122998],{"id":122997},"_73-远程桌面","7.3 远程桌面",[14,123000,123001],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123003,123004],{},"我们选择使用VNC来看。",[83,123006,123007],{},[86,123008,123009],{},"安装VNC服务器：",[14,123011,123012],{},"这里以TigerVNC为例进行安装：",[120,123014,123016],{"className":117297,"code":123015,"language":117299,"meta":42,"style":42},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[126,123017,123018],{"__ignoreMap":42},[129,123019,123020,123022,123024,123026,123029],{"class":131,"line":132},[129,123021,24577],{"class":1977},[129,123023,117318],{"class":244},[129,123025,23849],{"class":244},[129,123027,123028],{"class":244}," tigervnc-standalone-server",[129,123030,123031],{"class":244}," tigervnc-common\n",[83,123033,123034],{"start":51},[86,123035,123036],{},"设置VNC密码：",[14,123038,123039],{},"为VNC用户设置密码，运行以下命令：",[120,123041,123043],{"className":117297,"code":123042,"language":117299,"meta":42,"style":42},"vncpasswd\n",[126,123044,123045],{"__ignoreMap":42},[129,123046,123047],{"class":131,"line":132},[129,123048,123042],{"class":1977},[83,123050,123051],{"start":1194},[86,123052,123053],{},"配置VNC启动脚本:",[14,123055,123056],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[120,123058,123060],{"className":117297,"code":123059,"language":117299,"meta":42,"style":42},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[126,123061,123062,123071],{"__ignoreMap":42},[129,123063,123064,123066,123068],{"class":131,"line":132},[129,123065,101267],{"class":1977},[129,123067,29217],{"class":188},[129,123069,123070],{"class":244}," ~\u002F.vnc\n",[129,123072,123073,123076],{"class":131,"line":51},[129,123074,123075],{"class":1977},"nano",[129,123077,123078],{"class":244}," ~\u002F.vnc\u002Fxstartup\n",[14,123080,123081],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[120,123083,123085],{"className":117297,"code":123084,"language":117299,"meta":42,"style":42},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[126,123086,123087,123092,123100,123107],{"__ignoreMap":42},[129,123088,123089],{"class":131,"line":132},[129,123090,123091],{"class":198},"#!\u002Fbin\u002Fsh\n",[129,123093,123094,123097],{"class":131,"line":51},[129,123095,123096],{"class":188},"unset",[129,123098,123099],{"class":244}," SESSION_MANAGER\n",[129,123101,123102,123104],{"class":131,"line":1194},[129,123103,123096],{"class":188},[129,123105,123106],{"class":244}," DBUS_SESSION_BUS_ADDRESS\n",[129,123108,123109],{"class":131,"line":1209},[129,123110,123111],{"class":1977},"gnome-session\n",[14,123113,123114],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[83,123116,123117],{"start":1209},[86,123118,123119],{},"给予执行权限：",[14,123121,123122],{},"为xstartup文件设置执行权限：",[120,123124,123126],{"className":117297,"code":123125,"language":117299,"meta":42,"style":42},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[126,123127,123128],{"__ignoreMap":42},[129,123129,123130,123132,123135],{"class":131,"line":132},[129,123131,24612],{"class":1977},[129,123133,123134],{"class":244}," +x",[129,123136,123078],{"class":244},[83,123138,123139],{"start":1215},[86,123140,123141],{},"启动VNC服务器：",[120,123143,123145],{"className":117297,"code":123144,"language":117299,"meta":42,"style":42},"vncserver -geometry 1920x1080 -localhost=0\n",[126,123146,123147],{"__ignoreMap":42},[129,123148,123149,123152,123155,123158],{"class":131,"line":132},[129,123150,123151],{"class":1977},"vncserver",[129,123153,123154],{"class":188}," -geometry",[129,123156,123157],{"class":244}," 1920x1080",[129,123159,123160],{"class":188}," -localhost=0\n",[14,123162,123163],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123165,123166],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[83,123168,123169],{"start":1229},[86,123170,123171],{},"查看已开启的VNC服务器：",[120,123173,123175],{"className":117297,"code":123174,"language":117299,"meta":42,"style":42},"vncserver -list\n",[126,123176,123177],{"__ignoreMap":42},[129,123178,123179,123181],{"class":131,"line":132},[129,123180,123151],{"class":1977},[129,123182,123183],{"class":188}," -list\n",[14,123185,123186],{},[40,123187],{"alt":42,"src":123188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[83,123190,123191],{"start":1235},[86,123192,123193],{},"连接到VNC服务器：",[14,123195,123196],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[83,123198,123199],{"start":1326},[86,123200,123201],{},"停止VNC服务器：",[14,123203,123204],{},"如果需要停止VNC服务器，可以使用以下命令：",[120,123206,123208],{"className":117297,"code":123207,"language":117299,"meta":42,"style":42},"vncserver -kill :1\n",[126,123209,123210],{"__ignoreMap":42},[129,123211,123212,123214,123217],{"class":131,"line":132},[129,123213,123151],{"class":1977},[129,123215,123216],{"class":188}," -kill",[129,123218,123219],{"class":244}," :1\n",[14,123221,123222],{},"将:1替换为你实际使用的显示编号。",[14,123224,123225],{},[40,123226],{"alt":42,"src":123227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123229,123230],{},[40,123231],{"alt":42,"src":123232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[71,123234,123236],{"id":123235},"_74-usb端口设置","7.4 USB端口设置",[14,123238,123239],{},[289,123240,123241],{},"首先先配置好权限",[120,123243,123245],{"className":117297,"code":123244,"language":117299,"meta":42,"style":42},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[126,123246,123247,123252,123265,123272,123277],{"__ignoreMap":42},[129,123248,123249],{"class":131,"line":132},[129,123250,123251],{"class":198},"# 将用户权限提高\n",[129,123253,123254,123256,123258,123260,123263],{"class":131,"line":51},[129,123255,24577],{"class":1977},[129,123257,26575],{"class":244},[129,123259,26578],{"class":188},[129,123261,123262],{"class":244}," dialout",[129,123264,26583],{"class":139},[129,123266,123267,123269],{"class":131,"line":1194},[129,123268,26602],{"class":1977},[129,123270,123271],{"class":244}," dialout\n",[129,123273,123274],{"class":131,"line":1209},[129,123275,123276],{"class":198},"# 查看下面命令是否输出dialout（若输出才正常）\n",[129,123278,123279],{"class":131,"line":1215},[129,123280,123281],{"class":1977},"groups\n",[14,123283,123284],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[100,123286,123288],{"id":123287},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123290,123291,123294],{},[289,123292,123293],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123296,123297,123300],{},[289,123298,123299],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123302,123303],{},[289,123304,123305],{},"流程如下：",[14,123307,123308],{},"（1）.查找设备idVendor和idProduct",[14,123310,123311,123312,123315],{},"接入两个USB设备，在终端调用指令",[126,123313,123314],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123317,123318],{},[40,123319],{"alt":42,"src":123320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123322,123323,123324,123327],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[126,123325,123326],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123329,123330],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123332,123333],{},"（2）.编写映射规则",[14,123335,123336,123337,123340],{},"在",[126,123338,123339],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[120,123342,123344],{"className":117297,"code":123343,"language":117299,"meta":42,"style":42},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[126,123345,123346],{"__ignoreMap":42},[129,123347,123348,123350,123352],{"class":131,"line":132},[129,123349,24577],{"class":1977},[129,123351,118584],{"class":244},[129,123353,123354],{"class":244}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123356,123357],{},"输入如下内容：",[120,123359,123361],{"className":117297,"code":123360,"language":117299,"meta":42,"style":42},"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",[126,123362,123363,123393],{"__ignoreMap":42},[129,123364,123365,123368,123370,123373,123376,123379,123382,123384,123387,123390],{"class":131,"line":132},[129,123366,123367],{"class":139},"KERNEL",[129,123369,185],{"class":135},[129,123371,123372],{"class":244},"=\"ttyUSB*\",",[129,123374,123375],{"class":1977}," ATTRS",[129,123377,123378],{"class":244},"{idVendor}==",[129,123380,123381],{"class":1977},"\"10c4\"",[129,123383,517],{"class":1977},[129,123385,123386],{"class":244}," ATTRS{idProduct}==\"ea60\",",[129,123388,123389],{"class":244}," MODE:=\"0777\",",[129,123391,123392],{"class":244}," SYMLINK+=\"mylidar\"\n",[129,123394,123395,123397,123399,123401,123403,123405,123408,123410,123413,123415],{"class":131,"line":51},[129,123396,123367],{"class":139},[129,123398,185],{"class":135},[129,123400,123372],{"class":244},[129,123402,123375],{"class":1977},[129,123404,123378],{"class":244},[129,123406,123407],{"class":1977},"\"1a86\"",[129,123409,517],{"class":1977},[129,123411,123412],{"class":244}," ATTRS{idProduct}==\"7523\",",[129,123414,123389],{"class":244},[129,123416,123417],{"class":244}," SYMLINK+=\"mycar\"\n",[14,123419,123420],{},"代码解释：",[1146,123422,123423,123426,123429,123432],{},[86,123424,123425],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[86,123427,123428],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[86,123430,123431],{},"SYMLINK是符号连接，即绑定的别名；",[86,123433,123434],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123436,123437,123438,123441,123444],{},"***小提示：***",[23568,123439,123440],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[126,123442,123443],{},"\u002Fetc\u002Fudev\u002Frule.d",[23568,123445,123446],{},"目录即可。",[14,123448,123449],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123451,123452],{},"（3）.使规则生效",[14,123454,123455],{},"在终端下输入如下指令：",[120,123457,123459],{"className":117297,"code":123458,"language":117299,"meta":42,"style":42},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[126,123460,123461,123466,123478,123489,123493,123498,123511],{"__ignoreMap":42},[129,123462,123463],{"class":131,"line":132},[129,123464,123465],{"class":198},"# Ubuntu用下方命令\n",[129,123467,123468,123470,123472,123475],{"class":131,"line":51},[129,123469,24577],{"class":1977},[129,123471,120049],{"class":244},[129,123473,123474],{"class":244}," udev",[129,123476,123477],{"class":244}," reload\n",[129,123479,123480,123482,123484,123486],{"class":131,"line":1194},[129,123481,24577],{"class":1977},[129,123483,120049],{"class":244},[129,123485,123474],{"class":244},[129,123487,123488],{"class":244}," restart\n",[129,123490,123491],{"class":131,"line":1209},[129,123492,2414],{"emptyLinePlaceholder":56},[129,123494,123495],{"class":131,"line":1215},[129,123496,123497],{"class":198},"#Fedora用下方命令\n",[129,123499,123500,123502,123505,123508],{"class":131,"line":1229},[129,123501,24577],{"class":1977},[129,123503,123504],{"class":244}," udevadm",[129,123506,123507],{"class":244}," control",[129,123509,123510],{"class":188}," --reload\n",[129,123512,123513,123515,123517],{"class":131,"line":1235},[129,123514,24577],{"class":1977},[129,123516,123504],{"class":244},[129,123518,123519],{"class":244}," trigger\n",[14,123521,123522],{},"再重新插拔设备即可。",[14,123524,123525],{},"（4）.测试",[14,123527,123528],{},"终端下输入如下指令",[120,123530,123532],{"className":117297,"code":123531,"language":117299,"meta":42,"style":42},"ll \u002Fdev | grep ttyUSB\n",[126,123533,123534],{"__ignoreMap":42},[129,123535,123536,123539,123542,123544,123546],{"class":131,"line":132},[129,123537,123538],{"class":1977},"ll",[129,123540,123541],{"class":244}," \u002Fdev",[129,123543,25110],{"class":135},[129,123545,30237],{"class":1977},[129,123547,123548],{"class":244}," ttyUSB\n",[14,123550,123551],{},"运行结果如下：",[14,123553,123554],{},[40,123555],{"alt":42,"src":123556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123558,123559,123560,123563],{},"也可以多次插拔USB设备，会发现设备端口",[126,123561,123562],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123565,123566],{},[289,123567,117965],{},[14,123569,123570],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[100,123572,123574],{"id":123573},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123576,123577,123579],{},[289,123578,123293],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123581,123582,123584],{},[289,123583,123299],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123586,123587],{},[289,123588,123305],{},[14,123590,123591],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123593,123594],{},"调用如下指令查看第一台雷达的USB信息：",[120,123596,123598],{"className":117297,"code":123597,"language":117299,"meta":42,"style":42},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[126,123599,123600,123620],{"__ignoreMap":42},[129,123601,123602,123605,123607,123610,123613,123615,123617],{"class":131,"line":132},[129,123603,123604],{"class":1977},"udevadm",[129,123606,69822],{"class":244},[129,123608,123609],{"class":188}," --attribute-walk",[129,123611,123612],{"class":188}," --name=\u002Fdev\u002FttyUSB0",[129,123614,25110],{"class":135},[129,123616,30237],{"class":1977},[129,123618,123619],{"class":244}," KERNELS\n",[129,123621,123622,123624,123626,123628,123631,123633,123635],{"class":131,"line":51},[129,123623,123604],{"class":1977},[129,123625,69822],{"class":244},[129,123627,123609],{"class":188},[129,123629,123630],{"class":188}," --name=\u002Fdev\u002FttyACM0",[129,123632,25110],{"class":135},[129,123634,30237],{"class":1977},[129,123636,123619],{"class":244},[14,123638,123639],{},[40,123640],{"alt":42,"src":123641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123643,123644],{},"调用如下指令查看第二台雷达的USB信息：",[120,123646,123648],{"className":117297,"code":123647,"language":117299,"meta":42,"style":42},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[126,123649,123650],{"__ignoreMap":42},[129,123651,123652,123654,123656,123658,123661,123663,123665],{"class":131,"line":132},[129,123653,123604],{"class":1977},[129,123655,69822],{"class":244},[129,123657,123609],{"class":188},[129,123659,123660],{"class":188}," --name=\u002Fdev\u002FttyUSB1",[129,123662,25110],{"class":135},[129,123664,30237],{"class":1977},[129,123666,123619],{"class":244},[14,123668,123669,123670,123673,123674,123677,123678,123681],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[126,123671,123672],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[126,123675,123676],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[289,123679,123680],{},"唯一性标识","”。",[14,123683,123333],{},[14,123685,123336,123686,123688],{},[126,123687,123339],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[120,123690,123691],{"className":117297,"code":123343,"language":117299,"meta":42,"style":42},[126,123692,123693],{"__ignoreMap":42},[129,123694,123695,123697,123699],{"class":131,"line":132},[129,123696,24577],{"class":1977},[129,123698,118584],{"class":244},[129,123700,123354],{"class":244},[120,123702,123704],{"className":117297,"code":123703,"language":117299,"meta":42,"style":42},"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",[126,123705,123706,123735],{"__ignoreMap":42},[129,123707,123708,123710,123712,123714,123717,123719,123722,123725,123727,123730,123732],{"class":131,"line":132},[129,123709,123367],{"class":139},[129,123711,185],{"class":135},[129,123713,123372],{"class":244},[129,123715,123716],{"class":139}," KERNELS",[129,123718,185],{"class":135},[129,123720,123721],{"class":244},"=\"1-1.3:1.0\",",[129,123723,123724],{"class":1977}," MODE:",[129,123726,185],{"class":244},[129,123728,123729],{"class":1977},"\"0777\"",[129,123731,517],{"class":1977},[129,123733,123734],{"class":244}," SYMLINK+=\"rplidar_front\"\n",[129,123736,123737,123739,123741,123743,123745,123747,123750,123752,123754,123756,123758],{"class":131,"line":51},[129,123738,123367],{"class":139},[129,123740,185],{"class":135},[129,123742,123372],{"class":244},[129,123744,123716],{"class":139},[129,123746,185],{"class":135},[129,123748,123749],{"class":244},"=\"1-1.4:1.0\",",[129,123751,123724],{"class":1977},[129,123753,185],{"class":244},[129,123755,123729],{"class":1977},[129,123757,517],{"class":1977},[129,123759,123760],{"class":244}," SYMLINK+=\"rplidar_back\"\n",[14,123762,123452],{},[14,123764,123455],{},[120,123766,123767],{"className":117297,"code":123458,"language":117299,"meta":42,"style":42},[126,123768,123769,123773,123783,123793,123797,123801,123811],{"__ignoreMap":42},[129,123770,123771],{"class":131,"line":132},[129,123772,123465],{"class":198},[129,123774,123775,123777,123779,123781],{"class":131,"line":51},[129,123776,24577],{"class":1977},[129,123778,120049],{"class":244},[129,123780,123474],{"class":244},[129,123782,123477],{"class":244},[129,123784,123785,123787,123789,123791],{"class":131,"line":1194},[129,123786,24577],{"class":1977},[129,123788,120049],{"class":244},[129,123790,123474],{"class":244},[129,123792,123488],{"class":244},[129,123794,123795],{"class":131,"line":1209},[129,123796,2414],{"emptyLinePlaceholder":56},[129,123798,123799],{"class":131,"line":1215},[129,123800,123497],{"class":198},[129,123802,123803,123805,123807,123809],{"class":131,"line":1229},[129,123804,24577],{"class":1977},[129,123806,123504],{"class":244},[129,123808,123507],{"class":244},[129,123810,123510],{"class":188},[129,123812,123813,123815,123817],{"class":131,"line":1235},[129,123814,24577],{"class":1977},[129,123816,123504],{"class":244},[129,123818,123519],{"class":244},[14,123820,123522],{},[14,123822,123525],{},[14,123824,123528,123825,123828],{},[126,123826,123827],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123830,123831],{},[40,123832],{"alt":42,"src":123833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123835,123836],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123838,123839,123841],{},[289,123840,117965],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[100,123843,123845],{"id":123844},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123847,123848],{},"（1）.查看所连接的主机USB接口的信息",[120,123850,123852],{"className":117297,"code":123851,"language":117299,"meta":42,"style":42},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[126,123853,123854,123884],{"__ignoreMap":42},[129,123855,123856,123858,123860,123863,123865,123867,123869,123871,123874,123877,123879,123882],{"class":131,"line":132},[129,123857,123604],{"class":1977},[129,123859,69822],{"class":244},[129,123861,123862],{"class":188}," -a",[129,123864,29217],{"class":188},[129,123866,28423],{"class":139},[129,123868,123604],{"class":1977},[129,123870,69822],{"class":244},[129,123872,123873],{"class":188}," -q",[129,123875,123876],{"class":244}," path",[129,123878,25116],{"class":188},[129,123880,123881],{"class":244}," \u002Fdev\u002FttyACM0",[129,123883,146],{"class":139},[129,123885,123886,123888,123890,123892,123894,123896,123898,123900,123902,123904,123906,123909],{"class":131,"line":51},[129,123887,123604],{"class":1977},[129,123889,69822],{"class":244},[129,123891,123862],{"class":188},[129,123893,29217],{"class":188},[129,123895,28423],{"class":139},[129,123897,123604],{"class":1977},[129,123899,69822],{"class":244},[129,123901,123873],{"class":188},[129,123903,123876],{"class":244},[129,123905,25116],{"class":188},[129,123907,123908],{"class":244}," \u002Fdev\u002FttyUSB0",[129,123910,146],{"class":139},[14,123912,123913],{},[40,123914],{"alt":42,"src":123915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123917,123918],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123920,123333],{},[14,123922,123336,123923,123688],{},[126,123924,123339],{},[120,123926,123927],{"className":117297,"code":123343,"language":117299,"meta":42,"style":42},[126,123928,123929],{"__ignoreMap":42},[129,123930,123931,123933,123935],{"class":131,"line":132},[129,123932,24577],{"class":1977},[129,123934,118584],{"class":244},[129,123936,123354],{"class":244},[120,123938,123940],{"className":117297,"code":123939,"language":117299,"meta":42,"style":42},"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",[126,123941,123942,123970,123996],{"__ignoreMap":42},[129,123943,123944,123946,123948,123951,123953,123955,123957,123959,123962,123965,123967],{"class":131,"line":132},[129,123945,123367],{"class":139},[129,123947,185],{"class":135},[129,123949,123950],{"class":244},"=\"ttyACM*\",",[129,123952,123375],{"class":1977},[129,123954,123378],{"class":244},[129,123956,123407],{"class":1977},[129,123958,517],{"class":1977},[129,123960,123961],{"class":244}," ATTRS{idProduct}==\"55d4\",",[129,123963,123964],{"class":244}," ATTRS{serial}==\"0001\",",[129,123966,123389],{"class":244},[129,123968,123969],{"class":244}," SYMLINK+=\"ttyACM_MCU\"\n",[129,123971,123972,123974,123976,123978,123980,123982,123984,123986,123988,123991,123993],{"class":131,"line":51},[129,123973,123367],{"class":139},[129,123975,185],{"class":135},[129,123977,123950],{"class":244},[129,123979,123375],{"class":1977},[129,123981,123378],{"class":244},[129,123983,123407],{"class":1977},[129,123985,517],{"class":1977},[129,123987,123961],{"class":244},[129,123989,123990],{"class":244}," ATTRS{serial}==\"0002\",",[129,123992,123389],{"class":244},[129,123994,123995],{"class":244}," SYMLINK+=\"ttyACM_Lidar\"\n",[129,123997,123998,124000,124002,124004,124006,124008,124010,124012,124014,124016],{"class":131,"line":1194},[129,123999,123367],{"class":139},[129,124001,185],{"class":135},[129,124003,123372],{"class":244},[129,124005,123375],{"class":1977},[129,124007,123378],{"class":244},[129,124009,123407],{"class":1977},[129,124011,517],{"class":1977},[129,124013,123412],{"class":244},[129,124015,123389],{"class":244},[129,124017,124018],{"class":244}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124020,123452],{},[14,124022,123455],{},[120,124024,124025],{"className":117297,"code":123458,"language":117299,"meta":42,"style":42},[126,124026,124027,124031,124041,124051,124055,124059,124069],{"__ignoreMap":42},[129,124028,124029],{"class":131,"line":132},[129,124030,123465],{"class":198},[129,124032,124033,124035,124037,124039],{"class":131,"line":51},[129,124034,24577],{"class":1977},[129,124036,120049],{"class":244},[129,124038,123474],{"class":244},[129,124040,123477],{"class":244},[129,124042,124043,124045,124047,124049],{"class":131,"line":1194},[129,124044,24577],{"class":1977},[129,124046,120049],{"class":244},[129,124048,123474],{"class":244},[129,124050,123488],{"class":244},[129,124052,124053],{"class":131,"line":1209},[129,124054,2414],{"emptyLinePlaceholder":56},[129,124056,124057],{"class":131,"line":1215},[129,124058,123497],{"class":198},[129,124060,124061,124063,124065,124067],{"class":131,"line":1229},[129,124062,24577],{"class":1977},[129,124064,123504],{"class":244},[129,124066,123507],{"class":244},[129,124068,123510],{"class":188},[129,124070,124071,124073,124075],{"class":131,"line":1235},[129,124072,24577],{"class":1977},[129,124074,123504],{"class":244},[129,124076,123519],{"class":244},[14,124078,124079,124080],{},"再重新插拔设备即可，或者 ",[289,124081,124082],{},"直接重启系统。",[14,124084,123525],{},[14,124086,123528,124087,123828],{},[126,124088,123827],{},[14,124090,124091],{},[40,124092],{"alt":42,"src":124093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124095,123836],{},[14,124097,124098,124100],{},[289,124099,117965],{}," 一些设备可能没有串口号等。",[100,124102,124104],{"id":124103},"_744-其他注意事项","7.4.4 其他注意事项",[14,124106,124107,124108,124110,124111,124114,124115,18425,124118,124121,124122,124124],{},"并非所有的USB设备端口号都是",[126,124109,123562],{},"的格式，比如Arduino的端口号可能是",[126,124112,124113],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[126,124116,124117],{},"videon",[126,124119,124120],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[126,124123,124117],{},"端口，绑定时需要关联的也是该接口。",[14,124126,124127,124128,124131,124132,124135,124136,124138,124139,124142,124143,124146,124147,124150,124151,124150,124154,124150,124157,28386],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[126,124129,124130],{},"KERNEL==\"ttyUSB*\"","修改为",[126,124133,124134],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[126,124137,124130],{},"修改为类似于",[126,124140,124141],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[126,124144,124145],{},"video[0,2,4,6]","表示可以绑定的端口为",[126,124148,124149],{},"video0","或",[126,124152,124153],{},"video2",[126,124155,124156],{},"video4",[126,124158,124159],{},"video6",[71,124161,124163],{"id":124162},"_75-挂载内网网页","7.5 挂载内网网页",[14,124165,124166],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124168,124169],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124171,124172],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124174,124175,124176],{},"Termux 下载地址（F-Droid）：",[20,124177,124178],{"href":124178,"rel":124179},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24],[14,124181,124182],{},"首先打开app后，先更新软件缓存：",[120,124184,124186],{"className":117297,"code":124185,"language":117299,"meta":42,"style":42},"pkg update\n",[126,124187,124188],{"__ignoreMap":42},[129,124189,124190,124193],{"class":131,"line":132},[129,124191,124192],{"class":1977},"pkg",[129,124194,26243],{"class":244},[14,124196,124197],{},"然后换源",[120,124199,124201],{"className":117297,"code":124200,"language":117299,"meta":42,"style":42},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[126,124202,124203],{"__ignoreMap":42},[129,124204,124205,124207,124210],{"class":131,"line":132},[129,124206,123075],{"class":1977},[129,124208,124209],{"class":139}," $PREFIX",[129,124211,124212],{"class":244},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124214,124215],{},"将该文件内容替换为下面：",[120,124217,124219],{"className":117297,"code":124218,"language":117299,"meta":42,"style":42},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[126,124220,124221],{"__ignoreMap":42},[129,124222,124223,124226,124229,124232],{"class":131,"line":132},[129,124224,124225],{"class":1977},"deb",[129,124227,124228],{"class":244}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[129,124230,124231],{"class":244}," stable",[129,124233,124234],{"class":244}," main\n",[1146,124236,124237,124264],{},[86,124238,124239,124240,124242,124243],{},"如果你使用的是",[126,124241,123075],{},"编辑器：",[1146,124244,124245,124252,124258],{},[86,124246,124247,124248,124251],{},"按 ",[126,124249,124250],{},"Ctrl+O"," 保存文件。",[86,124253,124247,124254,124257],{},[126,124255,124256],{},"Enter"," 确认文件名。",[86,124259,124247,124260,124263],{},[126,124261,124262],{},"Ctrl+X"," 退出编辑器。",[86,124265,124239,124266,124242,124269],{},[126,124267,124268],{},"vim",[1146,124270,124271,124277],{},[86,124272,124247,124273,124276],{},[126,124274,124275],{},"Esc"," 退出编辑模式。",[86,124278,124279,124280,124282],{},"输入 ",[126,124281,119222],{}," 保存并退出。",[14,124284,124285],{},"接下来重新更新软件源：",[120,124287,124289],{"className":117297,"code":124288,"language":117299,"meta":42,"style":42},"pkg update && pkg upgrade\n",[126,124290,124291],{"__ignoreMap":42},[129,124292,124293,124295,124297,124299,124301],{"class":131,"line":132},[129,124294,124192],{"class":1977},[129,124296,117348],{"class":244},[129,124298,26191],{"class":139},[129,124300,124192],{"class":1977},[129,124302,117334],{"class":244},[14,124304,124305],{},"安装python：",[120,124307,124309],{"className":117297,"code":124308,"language":117299,"meta":42,"style":42},"pkg install python\n",[126,124310,124311],{"__ignoreMap":42},[129,124312,124313,124315,124317],{"class":131,"line":132},[129,124314,124192],{"class":1977},[129,124316,23849],{"class":244},[129,124318,124319],{"class":244}," python\n",[14,124321,124322,26474],{},[289,124323,124324],{},"通过Termux访问设备存储",[14,124326,124327],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[120,124329,124331],{"className":117297,"code":124330,"language":117299,"meta":42,"style":42},"termux-setup-storage\n",[126,124332,124333],{"__ignoreMap":42},[129,124334,124335],{"class":131,"line":132},[129,124336,124330],{"class":1977},[83,124338,124339],{},[86,124340,124341,26474,124344],{},[289,124342,124343],{},"进入HTML文件所在的目录",[83,124345,124346],{},[86,124347,124348,124349,124351],{},"使用",[126,124350,101277],{},"命令进入HTML文件所在的目录：",[120,124353,124355],{"className":117297,"code":124354,"language":117299,"meta":42,"style":42},"cd ~\u002Fyour_html_folder\n",[126,124356,124357],{"__ignoreMap":42},[129,124358,124359,124361],{"class":131,"line":132},[129,124360,101277],{"class":188},[129,124362,124363],{"class":244}," ~\u002Fyour_html_folder\n",[83,124365,124366],{"start":51},[86,124367,124368,26474,124371,124376,124393],{},[289,124369,124370],{},"启动Python HTTP服务器",[83,124372,124373],{},[86,124374,124375],{},"运行以下命令启动一个简单的HTTP服务器：",[120,124377,124379],{"className":117297,"code":124378,"language":117299,"meta":42,"style":42},"python -m http.server 8000\n",[126,124380,124381],{"__ignoreMap":42},[129,124382,124383,124385,124387,124390],{"class":131,"line":132},[129,124384,30381],{"class":1977},[129,124386,100883],{"class":188},[129,124388,124389],{"class":244}," http.server",[129,124391,124392],{"class":188}," 8000\n",[83,124394,124395],{"start":1194},[86,124396,124397,124398,124401],{},"这会在端口",[126,124399,124400],{},"8000","上启动一个Web服务器。",[1146,124403,124404],{},[86,124405,124406],{},"启动服务器后，Termux会显示日志信息，例如：",[120,124408,124410],{"className":120817,"code":124409,"language":120819,"meta":120820,"style":42},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[126,124411,124412],{"__ignoreMap":42},[129,124413,124414],{"class":131,"line":132},[129,124415,124409],{},[1146,124417,124418],{},[86,124419,124420],{},"这表示服务器已成功启动。",[14,124422,124423],{},[289,124424,124425],{},"在浏览器中访问HTML文件",[83,124427,124428],{},[86,124429,124430,26474,124433,124438],{},[289,124431,124432],{},"在同一设备上访问",[83,124434,124435],{},[86,124436,124437],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[120,124439,124442],{"className":124440,"code":124441,"language":71665,"meta":42,"style":42},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[126,124443,124444],{"__ignoreMap":42},[129,124445,124446,124449],{"class":131,"line":132},[129,124447,124448],{"class":139},"http:",[129,124450,124451],{"class":198},"\u002F\u002Flocalhost:8000\n",[1146,124453,124454],{},[86,124455,124456,124457,124460],{},"如果HTML文件中有",[126,124458,124459],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[71,124462,124464],{"id":124463},"_76-linux重点知识","7.6 Linux重点知识",[100,124466,124468],{"id":124467},"_761-关于点的说明","7.6.1 关于点的说明",[14,124470,124471],{},[40,124472],{"alt":42,"src":124473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124475,124476],{},"一点本目录，两点上目录",[100,124478,124480],{"id":124479},"_762-目录","7.6.2 目录",[22013,124482,124484],{"id":124483},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124486,124487],{},[289,124488,124489],{},"\u002Fboot:",[14,124491,124492],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124494,124495],{},[289,124496,124497],{},"\u002Fetc:",[14,124499,124500],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124502,124503],{},[289,124504,124505],{},"\u002Flib：",[14,124507,124508],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124510,124511],{},[289,124512,124513],{},"\u002Fsys:",[14,124515,124516],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22013,124518,124520],{"id":124519},"_7622-指令集合","7.6.2.2 指令集合",[14,124522,124523],{},[289,124524,124525],{},"\u002Fbin:",[14,124527,124528],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124530,124531],{},[289,124532,124533],{},"\u002Fsbin:",[14,124535,124536],{},"只有系统管理员才能使用的程序和指令",[22013,124538,124540],{"id":124539},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124542,124543],{},[289,124544,124545],{},"\u002Fdev:",[14,124547,124548],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124550,124551],{},[289,124552,124553],{},"\u002Fmedia:",[14,124555,124556],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124558,124559],{},[289,124560,124561],{},"\u002Fmnt:",[14,124563,124564],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22013,124566,124568],{"id":124567},"_7624-临时文件","7.6.2.4 临时文件",[14,124570,124571],{},[289,124572,124573],{},"\u002Frun:",[14,124575,124576],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124578,124579],{},[289,124580,124581],{},"\u002Flost+found:",[14,124583,124584],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124586,124587],{},[289,124588,124589],{},"\u002Ftmp:",[14,124591,124592],{},"这个目录是用来存放一些临时文件的",[22013,124594,124596],{"id":124595},"_7625-账户","7.6.2.5 账户",[14,124598,124599],{},[289,124600,124601],{},"\u002Froot：",[14,124603,124604],{},"系统管理员的用户主目录",[14,124606,124607,26474],{},[289,124608,124609],{},"\u002Fhome",[14,124611,124612],{},"用户的主目录，以用户的账号命名的",[14,124614,124615,26474],{},[289,124616,124617],{},"\u002Fusr",[14,124619,124620],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124622,124623],{},[289,124624,124625],{},"\u002Fusr\u002Fbin：",[14,124627,124628],{},"系统用户使用的应用程序与指令",[14,124630,124631],{},[289,124632,124633],{},"\u002Fusr\u002Fsbin：",[14,124635,124636],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124638,124639],{},[289,124640,124641],{},"\u002Fusr\u002Fsrc：",[14,124643,124644],{},"内核源代码默认的放置目录",[22013,124646,124648],{"id":124647},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124650,124651],{},[289,124652,124653],{},"\u002Fvar：",[14,124655,124656],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124658,124659],{},[289,124660,124661],{},"\u002Fproc:",[14,124663,124664,124665,124668],{},"管理 ",[289,124666,124667],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22013,124670,124672],{"id":124671},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124674,124675],{},[289,124676,124677],{},"\u002Fopt:",[14,124679,124680],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124682,124683],{},[289,124684,124685],{},"\u002Fsrv:",[14,124687,124688],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[100,124690,124692],{"id":124691},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124694,124695],{},[40,124696],{"alt":42,"src":124697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124699,124700],{},"windows-->linux:",[14,124702,124703],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124705,124706],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124708,124709],{},"linux传输文件到windows",[14,124711,124712],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[100,124714,124716],{"id":124715},"_764-易忘知识","7.6.4 易忘知识",[14,124718,124719],{},"操作系统内核查看",[120,124721,124722],{"className":117297,"code":121291,"language":117299,"meta":42,"style":42},[126,124723,124724],{"__ignoreMap":42},[129,124725,124726,124728],{"class":131,"line":132},[129,124727,70205],{"class":1977},[129,124729,121300],{"class":188},[14,124731,124732],{},[40,124733],{"alt":42,"src":124734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124736,124737],{},[40,124738],{"alt":42,"src":124739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[120,124741,124743],{"className":117297,"code":124742,"language":117299,"meta":42,"style":42},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[126,124744,124745,124757],{"__ignoreMap":42},[129,124746,124747,124749,124752,124755],{"class":131,"line":132},[129,124748,121508],{"class":1977},[129,124750,124751],{"class":244}," mvtest",[129,124753,124754],{"class":244}," mvtest2",[129,124756,2688],{"class":139},[129,124758,124759],{"class":131,"line":51},[129,124760,124761],{"class":1977},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124763,124764],{},[40,124765],{"alt":42,"src":124766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124768,124769],{},[40,124770],{"alt":42,"src":124771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124773,124774,124775,124778],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[126,124776,124777],{},"du -a"," 可以快速查看磁盘使用细节。",[100,124780,124782],{"id":124781},"_765-vim","7.6.5 Vim",[14,124784,124785],{},[40,124786],{"alt":42,"src":124787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124789,124790],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124792,124793],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124795,124796],{},[289,124797,124798],{},"1.命令模式：",[14,124800,124801],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124803,124804],{},"x 删除当前光标所在处的字符",[14,124806,124807],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124809,124810],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124812,124813],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124815,124816],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124818,124819],{},"dd 剪切当前行",[14,124821,124822],{},"yy 复制当前行",[14,124824,124825],{},"p 粘贴剪贴板内容到光标下方",[14,124827,124828],{},"P 粘贴剪贴板内容到光标上方",[14,124830,124831],{},"u 撤销上一次操作",[14,124833,124834],{},"ctrl+r 重做上一次操作",[14,124836,124837,124839],{},[934,124838],{}," 保存文件",[14,124841,124842,124844],{},[784,124843],{}," 退出Vim编辑器",[14,124846,124847,124849],{},[784,124848],{},"! 强制退出Vim编辑器，不保存修改",[14,124851,124852],{},[289,124853,124854],{},"2.输入模式：",[14,124856,124857],{},[40,124858],{"alt":42,"src":124859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124861,124862],{},[289,124863,124864],{},"3.底线命令模式：",[14,124866,124867],{},[40,124868],{"alt":42,"src":124869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124871,124872],{},"按下esc可以退出底线命令模式",[100,124874,124876],{"id":124875},"_766-apt","7.6.6 apt",[14,124878,124879],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[100,124881,124883],{"id":124882},"_767-home与root的区别","7.6.7 home与root的区别",[14,124885,124886],{},[40,124887],{"alt":42,"src":124888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124890,124891],{},[40,124892],{"alt":42,"src":124893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124895,124896],{},[40,124897],{"alt":42,"src":124898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124900,124901],{},[40,124902],{"alt":42,"src":124903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[100,124905,124907],{"id":124906},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124909,124910],{},[20,124911,124912],{"href":124912,"rel":124913},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24],[83,124915,124916,124919],{},[86,124917,124918],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[86,124920,124921],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124923,124924],{},[40,124925],{"alt":42,"src":124926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124928,124929],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124931,124932],{},[40,124933],{"alt":42,"src":124934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[120,124936,124938],{"className":120817,"code":124937,"language":120819,"meta":120820,"style":42},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[126,124939,124940,124945],{"__ignoreMap":42},[129,124941,124942],{"class":131,"line":132},[129,124943,124944],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[129,124946,124947],{"class":131,"line":51},[129,124948,124949],{},".\u002Fpycharm.sh\n",[14,124951,124952],{},"3️⃣创建.desktop文件",[14,124954,124955],{},[289,124956,124957],{},"原理：",[1146,124959,124960,124970],{},[86,124961,124962,124963,124969],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[289,124964,124965,124968],{},[126,124966,124967],{},".desktop"," 文件"," 来识别应用。",[86,124971,124972,124974,124975],{},[126,124973,124967],{}," 文件相当于一个“应用注册表”，告诉系统：",[1146,124976,124977,124980,124983,124986,124989],{},[86,124978,124979],{},"应用名字（Name）",[86,124981,124982],{},"图标（Icon）",[86,124984,124985],{},"执行命令（Exec）",[86,124987,124988],{},"分类（Categories）",[86,124990,124991],{},"是否需要终端（Terminal）",[120,124993,124995],{"className":120817,"code":124994,"language":120819,"meta":120820,"style":42},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[126,124996,124997,125002],{"__ignoreMap":42},[129,124998,124999],{"class":131,"line":132},[129,125000,125001],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[129,125003,125004],{"class":131,"line":51},[129,125005,125006],{},"nano pycharm.desktop\n",[14,125008,125009],{},"nano是一个命令行下的编辑器，也可以使用vim",[120,125011,125013],{"className":120817,"code":125012,"language":120819,"meta":120820,"style":42},"[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",[126,125014,125015,125020,125025,125030,125035,125040,125045,125050,125055,125060],{"__ignoreMap":42},[129,125016,125017],{"class":131,"line":132},[129,125018,125019],{},"[Desktop Entry]\n",[129,125021,125022],{"class":131,"line":51},[129,125023,125024],{},"Version=1.0\n",[129,125026,125027],{"class":131,"line":1194},[129,125028,125029],{},"Type=Application\n",[129,125031,125032],{"class":131,"line":1209},[129,125033,125034],{},"Name=PyCharm\n",[129,125036,125037],{"class":131,"line":1215},[129,125038,125039],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[129,125041,125042],{"class":131,"line":1229},[129,125043,125044],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[129,125046,125047],{"class":131,"line":1235},[129,125048,125049],{},"Comment=JetBrains PyCharm IDE\n",[129,125051,125052],{"class":131,"line":1326},[129,125053,125054],{},"Categories=Development;IDE;\n",[129,125056,125057],{"class":131,"line":1332},[129,125058,125059],{},"Terminal=false\n",[129,125061,125062],{"class":131,"line":1344},[129,125063,125064],{},"StartupWMClass=jetbrains-pycharm\n",[1146,125066,125067,125073,125079,125085],{},[86,125068,125069,125072],{},[126,125070,125071],{},"Exec"," → 点击图标时执行的命令",[86,125074,125075,125078],{},[126,125076,125077],{},"Icon"," → 显示在菜单和桌面上的图标",[86,125080,125081,125084],{},[126,125082,125083],{},"Terminal=false"," → 不打开终端",[86,125086,125087,125090],{},[126,125088,125089],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125092,125093,125094],"blockquote",{},[14,125095,125096,125097,125099,125100],{},"可以理解成 ",[126,125098,124967],{}," 文件是 Linux 的 ",[289,125101,125102],{},"快捷方式配置文件",[14,125104,125105],{},"4️⃣设置可执行权限",[120,125107,125109],{"className":120817,"code":125108,"language":120819,"meta":120820,"style":42},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[126,125110,125111],{"__ignoreMap":42},[129,125112,125113],{"class":131,"line":132},[129,125114,125108],{},[14,125116,125117],{},"5️⃣桌面图标启动的话如下：",[120,125119,125121],{"className":120817,"code":125120,"language":120819,"meta":120820,"style":42},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[126,125122,125123,125128],{"__ignoreMap":42},[129,125124,125125],{"class":131,"line":132},[129,125126,125127],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[129,125129,125130],{"class":131,"line":51},[129,125131,125132],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[83,125134,125135],{"start":1194},[86,125136,125137],{},"下载Appimage文件实现软件的安装",[14,125139,125140],{},"1️⃣先下载appimage",[14,125142,125143],{},[20,125144,125145],{"href":125145,"rel":125146},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24],[14,125148,125149],{},[40,125150],{"alt":42,"src":125151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125153,125154],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125156,125157],{},[40,125158],{"alt":42,"src":125159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125161,125162],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125164,125165],{},[40,125166],{"alt":42,"src":125167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125169,125170],{},[40,125171],{"alt":42,"src":125172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125174,125175,125176,125179],{},"3️⃣给他们放在",[126,125177,125178],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125181,125182],{},"4️⃣给软件执行权限",[120,125184,125186],{"className":120817,"code":125185,"language":120819,"meta":120820,"style":42},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[126,125187,125188,125193],{"__ignoreMap":42},[129,125189,125190],{"class":131,"line":132},[129,125191,125192],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[129,125194,125195],{"class":131,"line":51},[129,125196,125197],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125199,125200],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[120,125202,125204],{"className":117297,"code":125203,"language":117299,"meta":42,"style":42},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[126,125205,125206,125213,125220,125226],{"__ignoreMap":42},[129,125207,125208,125210],{"class":131,"line":132},[129,125209,101277],{"class":188},[129,125211,125212],{"class":244}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[129,125214,125215,125217],{"class":131,"line":51},[129,125216,101284],{"class":1977},[129,125218,125219],{"class":244}," .\u002Fqqmusic.desktop\n",[129,125221,125222,125224],{"class":131,"line":1194},[129,125223,124268],{"class":1977},[129,125225,125219],{"class":244},[129,125227,125228,125230,125232,125234],{"class":131,"line":1209},[129,125229,24577],{"class":1977},[129,125231,24580],{"class":244},[129,125233,123134],{"class":244},[129,125235,125219],{"class":244},[14,125237,125238,125240],{},[126,125239,101284],{},"：一个 Linux 命令，主要功能是：",[1146,125242,125243,125246],{},[86,125244,125245],{},"如果文件不存在，就创建一个新的空文件",[86,125247,125248],{},"如果文件已存在，就更新该文件的最后修改时间",[120,125250,125252],{"className":120817,"code":125251,"language":120819,"meta":120820,"style":42},"[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",[126,125253,125254,125258,125263,125268,125273,125277,125282],{"__ignoreMap":42},[129,125255,125256],{"class":131,"line":132},[129,125257,125019],{},[129,125259,125260],{"class":131,"line":51},[129,125261,125262],{},"Name=QQ音乐\n",[129,125264,125265],{"class":131,"line":1194},[129,125266,125267],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[129,125269,125270],{"class":131,"line":1209},[129,125271,125272],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[129,125274,125275],{"class":131,"line":1215},[129,125276,125029],{},[129,125278,125279],{"class":131,"line":1229},[129,125280,125281],{},"Categories=Audio;Music;Player;\n",[129,125283,125284],{"class":131,"line":1235},[129,125285,125286],{},"Comment=QQ Music Client for Linux\n",[14,125288,125289],{},"将文件复制进去",[14,125291,125292],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125294,125295],{},[40,125296],{"alt":42,"src":125297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125299,125300],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125302,125303],{},[40,125304],{"alt":42,"src":125305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125307,125308,125309,125312,125313,125316],{},"如果你用的不是KDE，那么也可以直接修改",[126,125310,125311],{},"qqmuic.desktop","：在exec的末尾加上",[126,125314,125315],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[120,125318,125320],{"className":120817,"code":125319,"language":120819,"meta":120820,"style":42},"[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",[126,125321,125322,125326,125330,125335,125339,125343,125347],{"__ignoreMap":42},[129,125323,125324],{"class":131,"line":132},[129,125325,125019],{},[129,125327,125328],{"class":131,"line":51},[129,125329,125262],{},[129,125331,125332],{"class":131,"line":1194},[129,125333,125334],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[129,125336,125337],{"class":131,"line":1209},[129,125338,125272],{},[129,125340,125341],{"class":131,"line":1215},[129,125342,125029],{},[129,125344,125345],{"class":131,"line":1229},[129,125346,125281],{},[129,125348,125349],{"class":131,"line":1235},[129,125350,125286],{},[14,125352,125353],{},[40,125354],{"alt":42,"src":125355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125357,125358],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[120,125360,125362],{"className":120817,"code":125361,"language":120819,"meta":120820,"style":42},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[126,125363,125364],{"__ignoreMap":42},[129,125365,125366],{"class":131,"line":132},[129,125367,125361],{},[83,125369,125370],{"start":1209},[86,125371,125372],{},"去Flathub上安装软件",[14,125374,125375],{},[20,125376,125377],{"href":125377,"rel":125378},"https:\u002F\u002Fflathub.org\u002F",[24],[14,125380,125381],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125383,125384],{},[40,125385],{"alt":42,"src":125386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[120,125388,125390],{"className":120817,"code":125389,"language":120819,"meta":120820,"style":42},"flatpak install flathub com.obsproject.Studio\n",[126,125391,125392],{"__ignoreMap":42},[129,125393,125394],{"class":131,"line":132},[129,125395,125389],{},[14,125397,125398],{},[40,125399],{"alt":42,"src":125400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125402,125403],{},"2️⃣运行软件",[14,125405,125406],{},"a.官方方式：",[14,125408,125409],{},[40,125410],{"alt":42,"src":125411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[120,125413,125414],{"className":120817,"code":125389,"language":120819,"meta":120820,"style":42},[126,125415,125416],{"__ignoreMap":42},[129,125417,125418],{"class":131,"line":132},[129,125419,125389],{},[14,125421,125422],{},"b.当普通软件运行：",[14,125424,125425],{},[40,125426],{"alt":42,"src":125427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125429,125430],{},[40,125431],{"alt":42,"src":125432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5141,125434,125435],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":42,"searchDepth":51,"depth":51,"links":125437},[125438,125439,125444,125445,125451,125452],{"id":122170,"depth":51,"text":122171},{"id":122512,"depth":51,"text":122513,"children":125440},[125441,125442,125443],{"id":122516,"depth":1194,"text":122517},{"id":122583,"depth":1194,"text":122584},{"id":122844,"depth":1194,"text":122845},{"id":122997,"depth":51,"text":122998},{"id":123235,"depth":51,"text":123236,"children":125446},[125447,125448,125449,125450],{"id":123287,"depth":1194,"text":123288},{"id":123573,"depth":1194,"text":123574},{"id":123844,"depth":1194,"text":123845},{"id":124103,"depth":1194,"text":124104},{"id":124162,"depth":51,"text":124163},{"id":124463,"depth":51,"text":124464,"children":125453},[125454,125455,125456,125457,125458,125459,125460,125461],{"id":124467,"depth":1194,"text":124468},{"id":124479,"depth":1194,"text":124480},{"id":124691,"depth":1194,"text":124692},{"id":124715,"depth":1194,"text":124716},{"id":124781,"depth":1194,"text":124782},{"id":124875,"depth":1194,"text":124876},{"id":124882,"depth":1194,"text":124883},{"id":124906,"depth":1194,"text":124907},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122162,"description":53},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125468,"title":125469,"body":125470,"description":53,"extension":54,"meta":125474,"navigation":56,"path":125475,"seo":125476,"stem":125477,"__hash__":125478},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125471,"toc":125472},[],{"title":42,"searchDepth":51,"depth":51,"links":125473},[],{"category":30264},"\u002Fwiki\u002F2025-01-27-linux",{"title":125469,"description":53},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125480,"title":125481,"body":125482,"description":125486,"extension":54,"meta":125877,"navigation":56,"path":125878,"seo":125879,"stem":125880,"__hash__":125881},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125483,"toc":125875},[125484,125487,125491,125508,125511,125564,125568,125570,125610,125619,125623,125626,125867,125872],[14,125485,125486],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125488,125490],{"id":125489},"_1ubuntu环境配置","1.Ubuntu环境配置",[83,125492,125493,125496,125499,125502,125505],{},[86,125494,125495],{},"ubuntu环境换源",[86,125497,125498],{},"安装cuda",[86,125500,125501],{},"安装miniconda",[86,125503,125504],{},"安装pytorch",[86,125506,125507],{},"安装genesis",[14,125509,125510],{},"参考链接：",[120,125512,125514],{"className":23837,"code":125513,"language":23839,"meta":42,"style":42},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[126,125515,125516],{"__ignoreMap":42},[129,125517,125518,125521,125524,125527,125529,125532,125535,125537,125540,125543,125545,125548,125551,125553,125556,125559,125561],{"class":131,"line":132},[129,125519,125520],{"class":1977},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[129,125522,125523],{"class":244},"=blogdetail",[129,125525,125526],{"class":139},"&sharetype",[129,125528,185],{"class":135},[129,125530,125531],{"class":244},"blogdetail",[129,125533,125534],{"class":139},"&sharerId",[129,125536,185],{"class":135},[129,125538,125539],{"class":244},"144728092",[129,125541,125542],{"class":139},"&sharerefer",[129,125544,185],{"class":135},[129,125546,125547],{"class":244},"PC",[129,125549,125550],{"class":139},"&sharesource",[129,125552,185],{"class":135},[129,125554,125555],{"class":244},"qq_69379513",[129,125557,125558],{"class":139},"&sharefrom",[129,125560,185],{"class":135},[129,125562,125563],{"class":244},"from_link\n",[10,125565,125567],{"id":125566},"_2genesis-报错issue","2.Genesis 报错issue",[14,125569,125510],{},[120,125571,125572],{"className":23837,"code":125513,"language":23839,"meta":42,"style":42},[126,125573,125574],{"__ignoreMap":42},[129,125575,125576,125578,125580,125582,125584,125586,125588,125590,125592,125594,125596,125598,125600,125602,125604,125606,125608],{"class":131,"line":132},[129,125577,125520],{"class":1977},[129,125579,125523],{"class":244},[129,125581,125526],{"class":139},[129,125583,185],{"class":135},[129,125585,125531],{"class":244},[129,125587,125534],{"class":139},[129,125589,185],{"class":135},[129,125591,125539],{"class":244},[129,125593,125542],{"class":139},[129,125595,185],{"class":135},[129,125597,125547],{"class":244},[129,125599,125550],{"class":139},[129,125601,185],{"class":135},[129,125603,125555],{"class":244},[129,125605,125558],{"class":139},[129,125607,185],{"class":135},[129,125609,125563],{"class":244},[120,125611,125613],{"className":23837,"code":125612,"language":23839,"meta":42,"style":42},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[126,125614,125615],{"__ignoreMap":42},[129,125616,125617],{"class":131,"line":132},[129,125618,125612],{"class":1977},[10,125620,125622],{"id":125621},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125624,125625],{},"hello_robot.py",[120,125627,125629],{"className":30379,"code":125628,"language":30381,"meta":42,"style":42},"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",[126,125630,125631,125637,125652,125656,125668,125680,125684,125697,125701,125720,125730,125740,125754,125758,125762,125767,125771,125781,125788,125802,125809,125819,125824,125828,125846,125851,125855,125862],{"__ignoreMap":42},[129,125632,125633,125635],{"class":131,"line":132},[129,125634,30393],{"class":135},[129,125636,45306],{"class":139},[129,125638,125639,125642,125645,125647,125649],{"class":131,"line":51},[129,125640,125641],{"class":139},"os.environ[",[129,125643,125644],{"class":244},"'PYOPENGL_PLATFORM'",[129,125646,4457],{"class":139},[129,125648,185],{"class":135},[129,125650,125651],{"class":244}," 'glx'\n",[129,125653,125654],{"class":131,"line":1194},[129,125655,2414],{"emptyLinePlaceholder":56},[129,125657,125658,125660,125663,125665],{"class":131,"line":1209},[129,125659,30393],{"class":135},[129,125661,125662],{"class":139}," genesis ",[129,125664,31384],{"class":135},[129,125666,125667],{"class":139}," gs\n",[129,125669,125670,125672,125675,125677],{"class":131,"line":1215},[129,125671,30738],{"class":135},[129,125673,125674],{"class":139}," pynput ",[129,125676,30393],{"class":135},[129,125678,125679],{"class":139}," keyboard\n",[129,125681,125682],{"class":131,"line":1229},[129,125683,2414],{"emptyLinePlaceholder":56},[129,125685,125686,125689,125692,125694],{"class":131,"line":1235},[129,125687,125688],{"class":139},"gs.init(",[129,125690,125691],{"class":5231},"backend",[129,125693,185],{"class":135},[129,125695,125696],{"class":139},"gs.gpu)\n",[129,125698,125699],{"class":131,"line":1326},[129,125700,2414],{"emptyLinePlaceholder":56},[129,125702,125703,125706,125708,125711,125714,125716,125718],{"class":131,"line":1332},[129,125704,125705],{"class":139},"scene ",[129,125707,185],{"class":135},[129,125709,125710],{"class":139}," gs.Scene(",[129,125712,125713],{"class":5231},"show_viewer",[129,125715,185],{"class":135},[129,125717,31477],{"class":188},[129,125719,146],{"class":139},[129,125721,125722,125725,125727],{"class":131,"line":1344},[129,125723,125724],{"class":139},"plane ",[129,125726,185],{"class":135},[129,125728,125729],{"class":139}," scene.add_entity(gs.morphs.Plane())\n",[129,125731,125732,125735,125737],{"class":131,"line":1626},[129,125733,125734],{"class":139},"franka ",[129,125736,185],{"class":135},[129,125738,125739],{"class":139}," scene.add_entity(\n",[129,125741,125742,125745,125747,125749,125752],{"class":131,"line":1631},[129,125743,125744],{"class":139},"    gs.morphs.MJCF(",[129,125746,45355],{"class":5231},[129,125748,185],{"class":135},[129,125750,125751],{"class":244},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[129,125753,38048],{"class":139},[129,125755,125756],{"class":131,"line":1637},[129,125757,146],{"class":139},[129,125759,125760],{"class":131,"line":1642},[129,125761,2414],{"emptyLinePlaceholder":56},[129,125763,125764],{"class":131,"line":1656},[129,125765,125766],{"class":139},"scene.build()\n",[129,125768,125769],{"class":131,"line":1661},[129,125770,2414],{"emptyLinePlaceholder":56},[129,125772,125773,125775,125778],{"class":131,"line":1667},[129,125774,31948],{"class":135},[129,125776,125777],{"class":1977}," on_press",[129,125779,125780],{"class":139},"(key):\n",[129,125782,125783,125786],{"class":131,"line":1688},[129,125784,125785],{"class":135},"    try",[129,125787,3753],{"class":139},[129,125789,125790,125792,125795,125797,125800],{"class":131,"line":1693},[129,125791,2511],{"class":135},[129,125793,125794],{"class":139}," key.char ",[129,125796,2963],{"class":135},[129,125798,125799],{"class":244}," 'q'",[129,125801,3753],{"class":139},[129,125803,125804,125806],{"class":131,"line":1707},[129,125805,15747],{"class":135},[129,125807,125808],{"class":188}," False\n",[129,125810,125811,125814,125817],{"class":131,"line":1712},[129,125812,125813],{"class":135},"    except",[129,125815,125816],{"class":188}," AttributeError",[129,125818,3753],{"class":139},[129,125820,125821],{"class":131,"line":1741},[129,125822,125823],{"class":135},"        pass\n",[129,125825,125826],{"class":131,"line":1746},[129,125827,2414],{"emptyLinePlaceholder":56},[129,125829,125830,125833,125835,125838,125841,125843],{"class":131,"line":1763},[129,125831,125832],{"class":139},"listener ",[129,125834,185],{"class":135},[129,125836,125837],{"class":139}," keyboard.Listener(",[129,125839,125840],{"class":5231},"on_press",[129,125842,185],{"class":135},[129,125844,125845],{"class":139},"on_press)\n",[129,125847,125848],{"class":131,"line":1768},[129,125849,125850],{"class":139},"listener.start()\n",[129,125852,125853],{"class":131,"line":1773},[129,125854,2414],{"emptyLinePlaceholder":56},[129,125856,125857,125859],{"class":131,"line":1778},[129,125858,108664],{"class":135},[129,125860,125861],{"class":139}," listener.running:\n",[129,125863,125864],{"class":131,"line":1792},[129,125865,125866],{"class":139},"    scene.step()\n",[14,125868,125869],{},[40,125870],{"alt":42,"src":125871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5141,125873,125874],{},"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":42,"searchDepth":51,"depth":51,"links":125876},[],{"category":23393},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125481,"description":125486},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125883,"title":125884,"body":125885,"description":53,"extension":54,"meta":125900,"navigation":56,"path":125901,"seo":125902,"stem":125903,"__hash__":125904},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125886,"toc":125897},[125887,125890,125894],[10,125888,125884],{"id":125889},"_1-基础知识",[71,125891,125893],{"id":125892},"_11-js的组成","1.1 js的组成",[14,125895,125896],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":42,"searchDepth":51,"depth":51,"links":125898},[125899],{"id":125892,"depth":51,"text":125893},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125884,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125906,"title":125907,"body":125908,"description":53,"extension":54,"meta":126047,"navigation":56,"path":126048,"seo":126049,"stem":126050,"__hash__":126051},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125909,"toc":126035},[125910,125913,125917,125920,125924,125934,125938,125941,125944,125947,125951,125958,125964,125968,125974,125985,125989,125992,125996,125999,126003,126006,126010,126013,126017,126020,126023,126026,126029,126032],[10,125911,125907],{"id":125912},"_2-vscode必备内容",[71,125914,125916],{"id":125915},"_21-标签分类","2.1 标签分类",[14,125918,125919],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[71,125921,125923],{"id":125922},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125925,125926,125927,125929,125930,125933],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[126,125928,366],{}," 然后按 ",[126,125931,125932],{},"Tab","，快速自动生成基本结构。",[71,125935,125937],{"id":125936},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125939,125940],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125942,125943],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125945,125946],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[71,125948,125950],{"id":125949},"_24-视图缩放","2.4 视图缩放",[14,125952,125953,125954,125957],{},"缩放视图 ",[126,125955,125956],{},"ctrl+"," 可实现代码增大。",[14,125959,125960,125963],{},[126,125961,125962],{},"ctrl-"," 可实现代码减小。",[71,125965,125967],{"id":125966},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,125969,125970,125971,28386],{},"VSCode 新建文件快捷键为 ",[126,125972,125973],{},"ctrl+N",[14,125975,125976,125977,125980,125981,125984],{},"保存快捷键为 ",[126,125978,125979],{},"ctrl+S","，将文本保存为 ",[126,125982,125983],{},".html"," 文件。",[71,125986,125988],{"id":125987},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,125990,125991],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[71,125993,125995],{"id":125994},"_27-vscode-icons","2.7 vscode-icons",[14,125997,125998],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[71,126000,126002],{"id":126001},"_28-easy-less","2.8 Easy LESS",[14,126004,126005],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[71,126007,126009],{"id":126008},"_29-会了吧插件","2.9 会了吧插件",[14,126011,126012],{},"会了吧插件可以展示代码中英语单词的意思。",[71,126014,126016],{"id":126015},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126018,126019],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126021,126022],{},"②选定多个相同的单词:ctrl+D",[14,126024,126025],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126027,126028],{},"④全局替换某些单词:ctrl+h",[14,126030,126031],{},"⑤快速定位到某一行:ctrl+g",[14,126033,126034],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":42,"searchDepth":51,"depth":51,"links":126036},[126037,126038,126039,126040,126041,126042,126043,126044,126045,126046],{"id":125915,"depth":51,"text":125916},{"id":125922,"depth":51,"text":125923},{"id":125936,"depth":51,"text":125937},{"id":125949,"depth":51,"text":125950},{"id":125966,"depth":51,"text":125967},{"id":125987,"depth":51,"text":125988},{"id":125994,"depth":51,"text":125995},{"id":126001,"depth":51,"text":126002},{"id":126008,"depth":51,"text":126009},{"id":126015,"depth":51,"text":126016},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125907,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126053,"title":126054,"body":126055,"description":53,"extension":54,"meta":126214,"navigation":56,"path":126215,"seo":126216,"stem":126217,"__hash__":126218},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126056,"toc":126206},[126057,126060,126064,126074,126080,126086,126090,126099,126103,126108,126111,126114,126118,126121,126131,126140,126149,126158,126168,126175,126180,126185,126198],[10,126058,126054],{"id":126059},"_3-html文本与容器标签",[71,126061,126063],{"id":126062},"_31-标题标签","3.1 标题标签",[14,126065,126066,126069,126070,126073],{},[126,126067,126068],{},"\u003Ch1>","我是一级标签",[126,126071,126072],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126075,126076,126069,126078],{},[126,126077,126068],{},[126,126079,126072],{},[14,126081,123336,126082,126085],{},[126,126083,126084],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[71,126087,126089],{"id":126088},"_32-段落标签","3.2 段落标签",[14,126091,126092,126095,126096],{},[126,126093,126094],{},"\u003Cp>","....",[126,126097,126098],{},"\u003C\u002Fp>",[71,126100,126102],{"id":126101},"_33-换行标签","3.3 换行标签",[14,126104,126105],{},[126,126106,126107],{},"\u003Cbr \u002F>",[14,126109,126110],{},"具有强制换行的作用",[14,126112,126113],{},"单标签",[71,126115,126117],{"id":126116},"_34-文本格式化标签","3.4 文本格式化标签",[14,126119,126120],{},"提供粗体、斜体和下划线等效果",[14,126122,126123,126124,82540,126127,126130],{},"加粗：",[126,126125,126126],{},"\u003Cstrong>...\u003C\u002Fstrong>",[126,126128,126129],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126132,126133,126134,82540,126137,126130],{},"斜体：",[126,126135,126136],{},"\u003Cem>...\u003C\u002Fem>",[126,126138,126139],{},"\u003Ci>...\u003C\u002Fi>",[14,126141,126142,126143,82540,126146,126130],{},"删除线：",[126,126144,126145],{},"\u003Cdel>...\u003C\u002Fdel>",[126,126147,126148],{},"\u003Cs>...\u003C\u002Fs>",[14,126150,126151,126152,82540,126155,126130],{},"下划线：",[126,126153,126154],{},"\u003Cins>...\u003C\u002Fins>",[126,126156,126157],{},"\u003Cu>...\u003C\u002Fu>",[71,126159,126161,126162,18425,126165,102694],{"id":126160},"_35-div和span标签","3.5 ",[126,126163,126164],{},"\u003Cdiv>",[126,126166,126167],{},"\u003Cspan>",[14,126169,126170,101019,126172,126174],{},[126,126171,126164],{},[126,126173,126167],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126176,126177],{},[126,126178,126179],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126181,126182],{},[126,126183,126184],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126186,126187,126188,126190,126191,126193,126194,126197],{},"两者特点：①",[126,126189,126164],{}," 标签用来布局，但一行通常只放一个 ",[126,126192,126164],{},"。可以理解为一个大盒子，独占一行，在 ",[126,126195,126196],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126199,77250,126200,126202,126203,126205],{},[126,126201,126167],{}," 标签也可用于布局，一行可以放多个 ",[126,126204,126167],{},"，可理解为小盒子。",{"title":42,"searchDepth":51,"depth":51,"links":126207},[126208,126209,126210,126211,126212],{"id":126062,"depth":51,"text":126063},{"id":126088,"depth":51,"text":126089},{"id":126101,"depth":51,"text":126102},{"id":126116,"depth":51,"text":126117},{"id":126160,"depth":51,"text":126213},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126054,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126220,"title":126221,"body":126222,"description":53,"extension":54,"meta":126419,"navigation":56,"path":126420,"seo":126421,"stem":126422,"__hash__":126423},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126223,"toc":126411},[126224,126227,126231,126234,126240,126247,126253,126259,126262,126265,126268,126271,126274,126277,126280,126284,126287,126290,126293,126299,126305,126311,126318,126322,126328,126334,126337,126340,126346,126352,126358,126361,126364,126368,126371,126381,126387,126391,126400,126404,126407],[10,126225,126221],{"id":126226},"_4-html图像与链接",[71,126228,126230],{"id":126229},"_41-图像标签","4.1 图像标签",[14,126232,126233],{},"（1）标签",[14,126235,126236,126239],{},[126,126237,126238],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126241,126242,126243,126246],{},"src是",[126,126244,126245],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126248,126249,126250],{},"alt:文本，替换文本。图像不能显示的文字 ",[126,126251,126252],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126254,126255,126256],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[126,126257,126258],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126260,126261],{},"width:像素，设置图像的宽度",[14,126263,126264],{},"height:像素，设置图像的高度",[14,126266,126267],{},"border：像素，设置图像的边框粗细",[14,126269,126270],{},"（2）图像标签属性的注意点：",[14,126272,126273],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126275,126276],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126278,126279],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[71,126281,126283],{"id":126282},"_42-路径注意要点","4.2 路径注意要点：",[14,126285,126286],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126288,126289],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126291,126292],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126294,126295,126296],{},"①同一级路径：图像文件位于HTML文件同一级，如",[126,126297,126298],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126300,126301,126302],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[126,126303,126304],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126306,126307,126308],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[126,126309,126310],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126312,126313,126314,390],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[20,126315,126316],{"href":126316,"rel":126317},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24],[71,126319,126321],{"id":126320},"_43-超链接标签","4.3 超链接标签",[14,126323,126324,126327],{},[126,126325,126326],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126329,126330,126331],{},"①语法格式：",[126,126332,126333],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126335,126336],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126338,126339],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126341,126342,126343],{},"③链接分类：外部链接：",[126,126344,126345],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126347,126348,126349],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[126,126350,126351],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126353,126354,126355],{},"空链接：如果当时没有确定链接目标时，",[126,126356,126357],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126359,126360],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126362,126363],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[71,126365,126367],{"id":126366},"_44-锚点链接","4.4 锚点链接",[14,126369,126370],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126372,126373,126374,126377,126378],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[126,126375,126376],{},"\u003Ca href=\"#two\">","第二级",[126,126379,126380],{},"\u003C\u002Fa>",[14,126382,126383,126384],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[126,126385,126386],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[71,126388,126390],{"id":126389},"_45-注释标签","4.5 注释标签",[14,126392,126393,126396,126397],{},[126,126394,126395],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[126,126398,126399],{},"ctrl+\u002F",[71,126401,126403],{"id":126402},"_46-特殊字符","4.6 特殊字符",[14,126405,126406],{},"可以实现添加多个空格",[40,126408],{"style":126409,"src":126410},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":42,"searchDepth":51,"depth":51,"links":126412},[126413,126414,126415,126416,126417,126418],{"id":126229,"depth":51,"text":126230},{"id":126282,"depth":51,"text":126283},{"id":126320,"depth":51,"text":126321},{"id":126366,"depth":51,"text":126367},{"id":126389,"depth":51,"text":126390},{"id":126402,"depth":51,"text":126403},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126221,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126425,"title":126426,"body":126427,"description":53,"extension":54,"meta":126720,"navigation":56,"path":126721,"seo":126722,"stem":126723,"__hash__":126724},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126428,"toc":126711},[126429,126432,126436,126439,126442,126445,126448,126451,126454,126457,126460,126463,126483,126489,126493,126496,126499,126502,126505,126508,126511,126515,126518,126521,126524,126527,126540,126545,126548,126551,126566,126569,126572,126575,126578,126581,126585,126588,126595,126598,126601,126604,126607,126610,126616,126619,126622,126628,126631,126634,126637,126643,126646,126649,126663,126670,126673,126676,126683,126692,126695,126698,126701,126705,126708],[10,126430,126426],{"id":126431},"_5-html表格列表与表单",[71,126433,126435],{"id":126434},"_51-表格标签","5.1 表格标签",[14,126437,126438],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126440,126441],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126443,126444],{},"②表格基本语法：",[40,126446],{"style":126409,"src":126447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126449,126450],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[40,126452],{"style":126409,"src":126453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126455,126456],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[40,126458],{"style":126409,"src":126459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126461,126462],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126464,126465,126468,126469,126471,126472,126475,126476,126478,126479,126482],{},[126,126466,126467],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[126,126470,126467],{},"内部必须拥有",[126,126473,126474],{},"\u003Ctr>","标签，一般位于第一行，",[126,126477,126467],{},"比",[126,126480,126481],{},"\u003Cth>","范围广",[14,126484,126485,126488],{},[126,126486,126487],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[71,126490,126492],{"id":126491},"_52-合并单元格","5.2 合并单元格",[14,126494,126495],{},"（1）合并单元格方式：",[14,126497,126498],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126500,126501],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126503,126504],{},"（2）目标单元格：",[14,126506,126507],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126509,126510],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[71,126512,126514],{"id":126513},"_53-列表标签","5.3 列表标签",[14,126516,126517],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126519,126520],{},"①无序列表：",[40,126522],{"style":126409,"src":126523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126525,126526],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126528,126529,126532,126533,126536,126537,126539],{},[126,126530,126531],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[126,126534,126535],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[126,126538,126531],{},"中输入其他标签或文字是不对的",[14,126541,126542,126544],{},[126,126543,126535],{},"之间相当于一个容器，可以容纳所有元素",[14,126546,126547],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126549,126550],{},"在css中去除前边的小圆点采用如下代码:",[120,126552,126556],{"className":126553,"code":126554,"language":126555,"meta":42,"style":42},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[126,126557,126558],{"__ignoreMap":42},[129,126559,126560,126563],{"class":131,"line":132},[129,126561,126562],{"class":51301},"list-style",[129,126564,126565],{"class":139},": none;\n",[14,126567,126568],{},"②有序列表：",[40,126570],{"style":126409,"src":126571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126573,126574],{},"③自定义列表：",[40,126576],{"style":126409,"src":126577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[40,126579],{"style":126409,"src":126580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[71,126582,126584],{"id":126583},"_54-表单标签","5.4 表单标签",[14,126586,126587],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126589,126590,126591,126594],{},"（1）表单域：包含单元素的区域，",[126,126592,126593],{},"\u003Cform>","标签可以实现信息的收集和传递。",[40,126596],{"style":126409,"src":126597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126599,126600],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126602,126603],{},"表单元素提交必须有name属性",[14,126605,126606],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126608,126609],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126611,77227,126612,126615],{},[126,126613,126614],{},"\u003Cinput>","输入表单元素",[40,126617],{"style":126409,"src":126618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[40,126620],{"style":126409,"src":126621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126623,126624,126625],{},"单选按钮：",[126,126626,126627],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[40,126629],{"style":126409,"src":126630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126632,126633],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[40,126635],{"style":126409,"src":126636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126638,126639,126642],{},[289,126640,126641],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126644,126645],{},"②select下拉表单元素：可以节约页面控件",[40,126647],{"style":126409,"src":126648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126650,126651,13810,126653,126656,126657,126659,126660,126662],{},[289,126652,169],{},[126,126654,126655],{},"\u003Cselect>","中至少包含一对",[126,126658,102715],{},"；在",[126,126661,102715],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126664,126665,126666,126669],{},"③",[126,126667,126668],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[40,126671],{"style":126409,"src":126672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126674,126675],{},"3行20列",[71,126677,126679,126680,102694],{"id":126678},"_55-lable标签","5.5 ",[126,126681,126682],{},"\u003Clable>",[14,126684,126685,126686,126688,126689,126691],{},"它不是表单标签，但常常与表单标签搭配使用，",[126,126687,126682],{},"标签用于绑定一个表单标签，当点击",[126,126690,126682],{},"标签内的文本",[14,126693,126694],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[40,126696],{"style":126409,"src":126697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[40,126699],{"style":126409,"src":126700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[71,126702,126704],{"id":126703},"_56-实例","5.6 实例",[40,126706],{"style":126409,"src":126707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5141,126709,126710],{},"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":42,"searchDepth":51,"depth":51,"links":126712},[126713,126714,126715,126716,126717,126719],{"id":126434,"depth":51,"text":126435},{"id":126491,"depth":51,"text":126492},{"id":126513,"depth":51,"text":126514},{"id":126583,"depth":51,"text":126584},{"id":126678,"depth":51,"text":126718},"5.5 \u003Clable>标签",{"id":126703,"depth":51,"text":126704},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126426,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126726,"title":126727,"body":126728,"description":53,"extension":54,"meta":127277,"navigation":56,"path":127278,"seo":127279,"stem":127280,"__hash__":127281},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126729,"toc":127252},[126730,126733,126737,126740,126743,126747,126750,126753,126756,126759,126762,126765,126768,126772,126775,126779,126782,126785,126788,126792,126795,126798,126801,126807,126810,126813,126816,126819,126822,126825,126828,126861,126865,126868,126871,126874,126878,126881,126884,126887,126890,126893,126897,126900,126903,126906,126910,126913,126917,126920,126924,126927,126932,126936,126939,126943,126946,126949,126952,126955,126982,126985,126989,126992,126995,127000,127003,127006,127010,127013,127018,127021,127024,127027,127031,127034,127037,127040,127044,127047,127050,127053,127057,127061,127064,127104,127107,127111,127118,127121,127125,127128,127174,127178,127181,127184,127187,127215,127219,127222,127249],[10,126731,126727],{"id":126732},"_6-css语法与文本样式",[71,126734,126736],{"id":126735},"_61-css语法规范","6.1 css语法规范",[14,126738,126739],{},"由两部分组成，选择器及一条或多条声明",[40,126741],{"style":126409,"src":126742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126744,126745],{},[289,126746,169],{},[14,126748,126749],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126751,126752],{},"②属性与属性值以“键值对”的形式出现",[14,126754,126755],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126757,126758],{},"④属性和属性值之间用英文“;”分开",[40,126760],{"style":126409,"src":126761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[40,126763],{"style":126409,"src":126764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[40,126766],{"style":126409,"src":126767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[71,126769,126771],{"id":126770},"_62-css选择器","6.2 css选择器",[14,126773,126774],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[100,126776,126778],{"id":126777},"_621-标签选择器","6.2.1 标签选择器",[14,126780,126781],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126783,126784],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[40,126786],{"style":126409,"src":126787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[100,126789,126791],{"id":126790},"_622-类选择器","6.2.2 类选择器",[14,126793,126794],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126796,126797],{},"②样例",[40,126799],{"style":126409,"src":126800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126802,126803,126804,126806],{},"③ ",[289,126805,126641],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126808,126809],{},"可以理解为给这个标签起了个名字，来表示；",[14,126811,126812],{},"长名称或词组可以使用横线来为选择器命名；",[14,126814,126815],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126817,126818],{},"命名要有意义；",[40,126820],{"style":126409,"src":126821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126823,126824],{},"类选择器也可以指定特殊的元素p.center{}",[14,126826,126827],{},"p.center和.center都对",[120,126829,126831],{"className":126553,"code":126830,"language":126555,"meta":42,"style":42},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[126,126832,126833,126838,126847,126857],{"__ignoreMap":42},[129,126834,126835],{"class":131,"line":132},[129,126836,126837],{"class":198},"\u002F* 类选择器指定特殊元素 *\u002F\n",[129,126839,126840,126842,126845],{"class":131,"line":51},[129,126841,14],{"class":51301},[129,126843,126844],{"class":1977},".center",[129,126846,15587],{"class":139},[129,126848,126849,126851,126853,126855],{"class":131,"line":1194},[129,126850,70527],{"class":188},[129,126852,51438],{"class":139},[129,126854,51593],{"class":188},[129,126856,1305],{"class":139},[129,126858,126859],{"class":131,"line":1209},[129,126860,1579],{"class":139},[100,126862,126864],{"id":126863},"_623-多类名使用","6.2.3 多类名使用",[14,126866,126867],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[40,126869],{"style":126409,"src":126870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126872,126873],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[100,126875,126877],{"id":126876},"_624-id选择器","6.2.4 id选择器",[14,126879,126880],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126882,126883],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[40,126885],{"style":126409,"src":126886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126888,126889],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126891,126892],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[100,126894,126896],{"id":126895},"_625-通配符选择器","6.2.5 通配符选择器",[14,126898,126899],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126901,126902],{},"* {",[14,126904,126905],{},"color=\"red\"}",[100,126907,126909],{"id":126908},"_626-总结","6.2.6 总结",[40,126911],{"style":126409,"src":126912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[71,126914,126916],{"id":126915},"_63-css字体属性","6.3 css字体属性",[14,126918,126919],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[100,126921,126923],{"id":126922},"_631-字体系列","6.3.1 字体系列",[14,126925,126926],{},"font-family: '宋体';",[14,126928,126929,126931],{},[289,126930,169],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[100,126933,126935],{"id":126934},"_632-字体大小","6.3.2 字体大小",[14,126937,126938],{},"font-size: 20px",[14,126940,126941,26474],{},[289,126942,126641],{},[14,126944,126945],{},"①px（像素）大小是网页的最常用单位",[14,126947,126948],{},"②谷歌浏览器默认为16px",[14,126950,126951],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,126953,126954],{},"④可以给body指定整个页面的大小：会自动引用",[120,126956,126958],{"className":126553,"code":126957,"language":126555,"meta":42,"style":42},"body {\n  font-size: 16px;\n}\n",[126,126959,126960,126966,126978],{"__ignoreMap":42},[129,126961,126962,126964],{"class":131,"line":132},[129,126963,51801],{"class":51301},[129,126965,15587],{"class":139},[129,126967,126968,126970,126972,126974,126976],{"class":131,"line":51},[129,126969,70627],{"class":188},[129,126971,51438],{"class":139},[129,126973,740],{"class":188},[129,126975,51493],{"class":135},[129,126977,1305],{"class":139},[129,126979,126980],{"class":131,"line":1194},[129,126981,1579],{"class":139},[14,126983,126984],{},"⑤标题标签比较特殊，需要单独指定大小",[100,126986,126988],{"id":126987},"_633-字体粗细","6.3.3 字体粗细",[14,126990,126991],{},"font-weight: bold;",[14,126993,126994],{},"font-weight: 100；",[14,126996,126997,126999],{},[289,126998,169],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127001,127002],{},"font-weight= 400;",[14,127004,127005],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[100,127007,127009],{"id":127008},"_634-文字样式","6.3.4 文字样式",[14,127011,127012],{},"font-style: normal；",[14,127014,127015,26474],{},[289,127016,127017],{},"属性值",[14,127019,127020],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127022,127023],{},"②italic：浏览器会显示斜体的字体样式",[40,127025],{"style":126409,"src":127026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[100,127028,127030],{"id":127029},"_635-字体符合属性","6.3.5 字体符合属性",[40,127032],{"style":126409,"src":127033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[40,127035],{"style":126409,"src":127036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127038,127039],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127041,127042,26474],{},[289,127043,126641],{},[14,127045,127046],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127048,127049],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127051,127052],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[71,127054,127056],{"id":127055},"_64-css-test文本属性","6.4 css test文本属性",[100,127058,127060],{"id":127059},"_641-文本颜色","6.4.1 文本颜色",[14,127062,127063],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[120,127065,127067],{"className":126553,"code":127066,"language":126555,"meta":42,"style":42},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[126,127068,127069,127074,127080,127090,127095,127100],{"__ignoreMap":42},[129,127070,127071],{"class":131,"line":132},[129,127072,127073],{"class":198},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[129,127075,127076,127078],{"class":131,"line":51},[129,127077,14],{"class":51301},[129,127079,15587],{"class":139},[129,127081,127082,127084,127086,127088],{"class":131,"line":1194},[129,127083,70906],{"class":188},[129,127085,51438],{"class":139},[129,127087,57422],{"class":188},[129,127089,1305],{"class":139},[129,127091,127092],{"class":131,"line":1209},[129,127093,127094],{"class":198},"  \u002F* color: #ff0000; *\u002F\n",[129,127096,127097],{"class":131,"line":1215},[129,127098,127099],{"class":198},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[129,127101,127102],{"class":131,"line":1229},[129,127103,1579],{"class":139},[40,127105],{"style":126409,"src":127106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[100,127108,127110],{"id":127109},"_642-对齐文本","6.4.2 对齐文本",[14,127112,127113,127114,127117],{},"text-align属于用于设置元素内文本内容的 ",[289,127115,127116],{},"水平对齐"," 方式",[14,127119,127120],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[100,127122,127124],{"id":127123},"_643-装饰文本","6.4.3 装饰文本",[14,127126,127127],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[120,127129,127131],{"className":126553,"code":127130,"language":126555,"meta":42,"style":42},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[126,127132,127133,127139,127149,127153,127159,127170],{"__ignoreMap":42},[129,127134,127135,127137],{"class":131,"line":132},[129,127136,20],{"class":51301},[129,127138,15587],{"class":139},[129,127140,127141,127143,127145,127147],{"class":131,"line":51},[129,127142,70503],{"class":188},[129,127144,51438],{"class":139},[129,127146,54738],{"class":188},[129,127148,1305],{"class":139},[129,127150,127151],{"class":131,"line":1194},[129,127152,1579],{"class":139},[129,127154,127155,127157],{"class":131,"line":1209},[129,127156,14],{"class":51301},[129,127158,15587],{"class":139},[129,127160,127161,127163,127165,127168],{"class":131,"line":1215},[129,127162,70503],{"class":188},[129,127164,51438],{"class":139},[129,127166,127167],{"class":188},"underline",[129,127169,1305],{"class":139},[129,127171,127172],{"class":131,"line":1229},[129,127173,1579],{"class":139},[100,127175,127177],{"id":127176},"_644-文本缩进","6.4.4 文本缩进",[14,127179,127180],{},"实现文本的第一行首行缩进自己指定的距离",[14,127182,127183],{},"20px往右边走；-20px往左边走",[14,127185,127186],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[120,127188,127190],{"className":126553,"code":127189,"language":126555,"meta":42,"style":42},"p {\n  text-indent: 2em;\n}\n",[126,127191,127192,127198,127211],{"__ignoreMap":42},[129,127193,127194,127196],{"class":131,"line":132},[129,127195,14],{"class":51301},[129,127197,15587],{"class":139},[129,127199,127200,127203,127205,127207,127209],{"class":131,"line":51},[129,127201,127202],{"class":188},"  text-indent",[129,127204,51438],{"class":139},[129,127206,217],{"class":188},[129,127208,23568],{"class":135},[129,127210,1305],{"class":139},[129,127212,127213],{"class":131,"line":1194},[129,127214,1579],{"class":139},[100,127216,127218],{"id":127217},"_645-行间距","6.4.5 行间距",[14,127220,127221],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[120,127223,127225],{"className":126553,"code":127224,"language":126555,"meta":42,"style":42},"p {\n  line-height: 1.6;\n}\n",[126,127226,127227,127233,127245],{"__ignoreMap":42},[129,127228,127229,127231],{"class":131,"line":132},[129,127230,14],{"class":51301},[129,127232,15587],{"class":139},[129,127234,127235,127238,127240,127243],{"class":131,"line":51},[129,127236,127237],{"class":188},"  line-height",[129,127239,51438],{"class":139},[129,127241,127242],{"class":188},"1.6",[129,127244,1305],{"class":139},[129,127246,127247],{"class":131,"line":1194},[129,127248,1579],{"class":139},[5141,127250,127251],{},"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":42,"searchDepth":51,"depth":51,"links":127253},[127254,127255,127263,127270],{"id":126735,"depth":51,"text":126736},{"id":126770,"depth":51,"text":126771,"children":127256},[127257,127258,127259,127260,127261,127262],{"id":126777,"depth":1194,"text":126778},{"id":126790,"depth":1194,"text":126791},{"id":126863,"depth":1194,"text":126864},{"id":126876,"depth":1194,"text":126877},{"id":126895,"depth":1194,"text":126896},{"id":126908,"depth":1194,"text":126909},{"id":126915,"depth":51,"text":126916,"children":127264},[127265,127266,127267,127268,127269],{"id":126922,"depth":1194,"text":126923},{"id":126934,"depth":1194,"text":126935},{"id":126987,"depth":1194,"text":126988},{"id":127008,"depth":1194,"text":127009},{"id":127029,"depth":1194,"text":127030},{"id":127055,"depth":51,"text":127056,"children":127271},[127272,127273,127274,127275,127276],{"id":127059,"depth":1194,"text":127060},{"id":127109,"depth":1194,"text":127110},{"id":127123,"depth":1194,"text":127124},{"id":127176,"depth":1194,"text":127177},{"id":127217,"depth":1194,"text":127218},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126727,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127283,"title":127284,"body":127285,"description":53,"extension":54,"meta":127934,"navigation":56,"path":127935,"seo":127936,"stem":127937,"__hash__":127938},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127286,"toc":127915},[127287,127290,127294,127298,127358,127362,127372,127375,127378,127382,127407,127411,127414,127417,127420,127423,127426,127430,127433,127436,127478,127481,127507,127513,127516,127520,127524,127530,127533,127536,127539,127542,127545,127548,127593,127597,127600,127603,127607,127611,127640,127643,127648,127651,127654,127657,127660,127664,127668,127671,127673,127676,127680,127683,127687,127690,127693,127696,127700,127704,127710,127720,127723,127726,127729,127732,127735,127858,127866,127874,127912],[10,127288,127284],{"id":127289},"_7-css引入方式与选择器进阶",[71,127291,127293],{"id":127292},"_71-css引入方式","7.1 css引入方式",[100,127295,127297],{"id":127296},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[120,127299,127303],{"className":127300,"code":127301,"language":127302,"meta":42,"style":42},"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",[126,127304,127305,127313,127320,127332,127345,127350],{"__ignoreMap":42},[129,127306,127307,127309,127311],{"class":131,"line":132},[129,127308,1049],{"class":139},[129,127310,5141],{"class":51301},[129,127312,51308],{"class":139},[129,127314,127315,127318],{"class":131,"line":51},[129,127316,127317],{"class":51301},"  h1",[129,127319,15587],{"class":139},[129,127321,127322,127325,127327,127330],{"class":131,"line":1194},[129,127323,127324],{"class":188},"    color",[129,127326,51438],{"class":139},[129,127328,127329],{"class":188},"blue",[129,127331,1305],{"class":139},[129,127333,127334,127337,127339,127341,127343],{"class":131,"line":1209},[129,127335,127336],{"class":188},"    font-size",[129,127338,51438],{"class":139},[129,127340,939],{"class":188},[129,127342,51493],{"class":135},[129,127344,1305],{"class":139},[129,127346,127347],{"class":131,"line":1215},[129,127348,127349],{"class":139},"  }\n",[129,127351,127352,127354,127356],{"class":131,"line":1229},[129,127353,51786],{"class":139},[129,127355,5141],{"class":51301},[129,127357,51308],{"class":139},[14,127359,127360,26474],{},[289,127361,126641],{},[14,127363,77227,127364,127367,127368,127371],{},[126,127365,127366],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[126,127369,127370],{},"\u003Chead>","标签中",[14,127373,127374],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127376,127377],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[100,127379,127381],{"id":127380},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[120,127383,127385],{"className":127300,"code":127384,"language":127302,"meta":42,"style":42},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[126,127386,127387],{"__ignoreMap":42},[129,127388,127389,127391,127393,127395,127397,127400,127403,127405],{"class":131,"line":132},[129,127390,1049],{"class":139},[129,127392,14],{"class":51301},[129,127394,62627],{"class":1977},[129,127396,185],{"class":139},[129,127398,127399],{"class":244},"\"color: red; font-size: 16px;\"",[129,127401,127402],{"class":139},">这是一个段落\u003C\u002F",[129,127404,14],{"class":51301},[129,127406,51308],{"class":139},[14,127408,127409,26474],{},[289,127410,126641],{},[14,127412,127413],{},"①style其实就是标签的属性",[14,127415,127416],{},"②在双引号中间，写法要符合css规范",[14,127418,127419],{},"③可以控制当前的标签设置样式",[14,127421,127422],{},"④书写繁琐，简单时才用",[14,127424,127425],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[100,127427,127429],{"id":127428},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127431,127432],{},"使用最多，单独建一个css文件，然后html引用",[14,127434,127435],{},"①css文件部分： style.css",[120,127437,127439],{"className":126553,"code":127438,"language":126555,"meta":42,"style":42},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[126,127440,127441,127446,127452,127462,127474],{"__ignoreMap":42},[129,127442,127443],{"class":131,"line":132},[129,127444,127445],{"class":198},"\u002F* style.css *\u002F\n",[129,127447,127448,127450],{"class":131,"line":51},[129,127449,10],{"class":51301},[129,127451,15587],{"class":139},[129,127453,127454,127456,127458,127460],{"class":131,"line":1194},[129,127455,70906],{"class":188},[129,127457,51438],{"class":139},[129,127459,127329],{"class":188},[129,127461,1305],{"class":139},[129,127463,127464,127466,127468,127470,127472],{"class":131,"line":1209},[129,127465,70627],{"class":188},[129,127467,51438],{"class":139},[129,127469,939],{"class":188},[129,127471,51493],{"class":135},[129,127473,1305],{"class":139},[129,127475,127476],{"class":131,"line":1215},[129,127477,1579],{"class":139},[14,127479,127480],{},"②html部分",[120,127482,127484],{"className":127300,"code":127483,"language":127302,"meta":42,"style":42},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[126,127485,127486],{"__ignoreMap":42},[129,127487,127488,127490,127492,127494,127496,127498,127500,127502,127505],{"class":131,"line":132},[129,127489,1049],{"class":139},[129,127491,69006],{"class":51301},[129,127493,69009],{"class":1977},[129,127495,185],{"class":139},[129,127497,69014],{"class":244},[129,127499,61058],{"class":1977},[129,127501,185],{"class":139},[129,127503,127504],{"class":244},"\"style.css\"",[129,127506,51308],{"class":139},[14,127508,127509,127512],{},[126,127510,127511],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127514,127515],{},"ctrl+0回到页面原来大小",[71,127517,127519],{"id":127518},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[100,127521,127523],{"id":127522},"_721-快速生成html","7.2.1 快速生成html",[14,127525,127526,127527],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[126,127528,127529],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127531,127532],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127534,127535],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127537,127538],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127540,127541],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127543,127544],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127546,127547],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[120,127549,127551],{"className":127300,"code":127550,"language":127302,"meta":42,"style":42},"\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",[126,127552,127553,127558,127563,127568,127573,127578,127583,127588],{"__ignoreMap":42},[129,127554,127555],{"class":131,"line":132},[129,127556,127557],{"class":198},"\u003C!-- Emmet 语法示例 -->\n",[129,127559,127560],{"class":131,"line":51},[129,127561,127562],{"class":198},"\u003C!-- div*3        → 生成3个div -->\n",[129,127564,127565],{"class":131,"line":1194},[129,127566,127567],{"class":198},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[129,127569,127570],{"class":131,"line":1209},[129,127571,127572],{"class":198},"\u003C!-- div+p        → 兄弟div和p -->\n",[129,127574,127575],{"class":131,"line":1215},[129,127576,127577],{"class":198},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[129,127579,127580],{"class":131,"line":1229},[129,127581,127582],{"class":198},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[129,127584,127585],{"class":131,"line":1235},[129,127586,127587],{"class":198},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[129,127589,127590],{"class":131,"line":1326},[129,127591,127592],{"class":198},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[100,127594,127596],{"id":127595},"_722-快速生成css","7.2.2 快速生成css",[14,127598,127599],{},"简写开头",[14,127601,127602],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[71,127604,127606],{"id":127605},"_73-css复合选择器","7.3 css复合选择器",[100,127608,127610],{"id":127609},"_731-后代选择器","7.3.1 后代选择器",[120,127612,127614],{"className":126553,"code":127613,"language":126555,"meta":42,"style":42},".parent .child {\n  color: blue;\n}\n",[126,127615,127616,127626,127636],{"__ignoreMap":42},[129,127617,127618,127621,127624],{"class":131,"line":132},[129,127619,127620],{"class":1977},".parent",[129,127622,127623],{"class":1977}," .child",[129,127625,15587],{"class":139},[129,127627,127628,127630,127632,127634],{"class":131,"line":51},[129,127629,70906],{"class":188},[129,127631,51438],{"class":139},[129,127633,127329],{"class":188},[129,127635,1305],{"class":139},[129,127637,127638],{"class":131,"line":1194},[129,127639,1579],{"class":139},[14,127641,127642],{},"元素1 元素2 {样式声明}",[14,127644,127645],{},[289,127646,127647],{},"注意点:",[14,127649,127650],{},"①元素1和元素2中间用空格隔开",[14,127652,127653],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127655,127656],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127658,127659],{},"④元素1和元素2可以是任意基础选择器",[100,127661,127663],{"id":127662},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127665,127666],{},[289,127667,127647],{},[14,127669,127670],{},"①元素1和元素2中间用大于号隔开",[14,127672,127653],{},[14,127674,127675],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[100,127677,127679],{"id":127678},"_733-并集选择器","7.3.3 并集选择器",[14,127681,127682],{},"元素1，元素2 {样式声明}",[14,127684,127685],{},[289,127686,127647],{},[14,127688,127689],{},"①元素1和元素2中间用逗号隔开",[14,127691,127692],{},"②逗号可以理解为和的意思",[14,127694,127695],{},"③并集选择器通常用于集体声明",[100,127697,127699],{"id":127698},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127701,127702],{},[289,127703,127647],{},[14,127705,127706,127707,127709],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69006,127708],{},"－:visited－:hover－:active。",[14,127711,127712,127713,127716,127717,25741],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127714,127715],"hover",{}," 、 ",[127718,127719],"first-child",{},[14,127721,127722],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127724,127725],{},"link对没访问的进行设置",[14,127727,127728],{},"vistied对已访问的进行改变",[14,127730,127731],{},"hover鼠标经过就会变",[14,127733,127734],{},"active常按(点)就会变",[120,127736,127738],{"className":126553,"code":127737,"language":126555,"meta":42,"style":42},"\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",[126,127739,127740,127745,127754,127764,127774,127778,127787,127798,127802,127810,127820,127830,127834,127843,127854],{"__ignoreMap":42},[129,127741,127742],{"class":131,"line":132},[129,127743,127744],{"class":198},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[129,127746,127747,127749,127752],{"class":131,"line":51},[129,127748,20],{"class":51301},[129,127750,127751],{"class":1977},":link",[129,127753,15587],{"class":139},[129,127755,127756,127758,127760,127762],{"class":131,"line":1194},[129,127757,70906],{"class":188},[129,127759,51438],{"class":139},[129,127761,62370],{"class":188},[129,127763,1305],{"class":139},[129,127765,127766,127768,127770,127772],{"class":131,"line":1209},[129,127767,70503],{"class":188},[129,127769,51438],{"class":139},[129,127771,54738],{"class":188},[129,127773,1305],{"class":139},[129,127775,127776],{"class":131,"line":1215},[129,127777,1579],{"class":139},[129,127779,127780,127782,127785],{"class":131,"line":1229},[129,127781,20],{"class":51301},[129,127783,127784],{"class":1977},":visited",[129,127786,15587],{"class":139},[129,127788,127789,127791,127793,127796],{"class":131,"line":1235},[129,127790,70906],{"class":188},[129,127792,51438],{"class":139},[129,127794,127795],{"class":188},"purple",[129,127797,1305],{"class":139},[129,127799,127800],{"class":131,"line":1326},[129,127801,1579],{"class":139},[129,127803,127804,127806,127808],{"class":131,"line":1332},[129,127805,20],{"class":51301},[129,127807,60941],{"class":1977},[129,127809,15587],{"class":139},[129,127811,127812,127814,127816,127818],{"class":131,"line":1344},[129,127813,70906],{"class":188},[129,127815,51438],{"class":139},[129,127817,54890],{"class":188},[129,127819,1305],{"class":139},[129,127821,127822,127824,127826,127828],{"class":131,"line":1626},[129,127823,70503],{"class":188},[129,127825,51438],{"class":139},[129,127827,127167],{"class":188},[129,127829,1305],{"class":139},[129,127831,127832],{"class":131,"line":1631},[129,127833,1579],{"class":139},[129,127835,127836,127838,127841],{"class":131,"line":1637},[129,127837,20],{"class":51301},[129,127839,127840],{"class":1977},":active",[129,127842,15587],{"class":139},[129,127844,127845,127847,127849,127852],{"class":131,"line":1642},[129,127846,70906],{"class":188},[129,127848,51438],{"class":139},[129,127850,127851],{"class":188},"green",[129,127853,1305],{"class":139},[129,127855,127856],{"class":131,"line":1656},[129,127857,1579],{"class":139},[100,127859,127861,127862,127865],{"id":127860},"_735-伪类选择器","7.3.5 ",[127863,127864],"focus",{},"伪类选择器",[14,127867,127868,127870,127871,127873],{},[127863,127869],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[126,127872,126614],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[120,127875,127877],{"className":126553,"code":127876,"language":126555,"meta":42,"style":42},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[126,127878,127879,127887,127898,127908],{"__ignoreMap":42},[129,127880,127881,127883,127885],{"class":131,"line":132},[129,127882,53822],{"class":51301},[129,127884,61901],{"class":1977},[129,127886,15587],{"class":139},[129,127888,127889,127892,127894,127896],{"class":131,"line":51},[129,127890,127891],{"class":188},"  border-color",[129,127893,51438],{"class":139},[129,127895,54890],{"class":188},[129,127897,1305],{"class":139},[129,127899,127900,127902,127904,127906],{"class":131,"line":1194},[129,127901,70799],{"class":188},[129,127903,51438],{"class":139},[129,127905,54738],{"class":188},[129,127907,1305],{"class":139},[129,127909,127910],{"class":131,"line":1209},[129,127911,1579],{"class":139},[5141,127913,127914],{},"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":42,"searchDepth":51,"depth":51,"links":127916},[127917,127922,127926],{"id":127292,"depth":51,"text":127293,"children":127918},[127919,127920,127921],{"id":127296,"depth":1194,"text":127297},{"id":127380,"depth":1194,"text":127381},{"id":127428,"depth":1194,"text":127429},{"id":127518,"depth":51,"text":127519,"children":127923},[127924,127925],{"id":127522,"depth":1194,"text":127523},{"id":127595,"depth":1194,"text":127596},{"id":127605,"depth":51,"text":127606,"children":127927},[127928,127929,127930,127931,127932],{"id":127609,"depth":1194,"text":127610},{"id":127662,"depth":1194,"text":127663},{"id":127678,"depth":1194,"text":127679},{"id":127698,"depth":1194,"text":127699},{"id":127860,"depth":1194,"text":127933},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127284,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127940,"title":127941,"body":127942,"description":53,"extension":54,"meta":129865,"navigation":56,"path":129866,"seo":129867,"stem":129868,"__hash__":129869},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127943,"toc":129839},[127944,127947,127951,127960,127964,127990,127995,127998,128001,128004,128007,128011,128014,128024,128032,128036,128071,128076,128079,128082,128085,128088,128092,128095,128104,128108,128121,128126,128129,128132,128135,128139,128142,128146,128149,128204,128207,128238,128241,128295,128299,128302,128468,128591,128594,128597,128600,128603,128607,128610,128614,128617,128620,128624,128627,128658,128685,128713,128716,128720,128746,128789,128793,128887,128890,128917,128920,128923,128926,128929,128932,128935,128938,128941,128944,128948,129005,129032,129036,129084,129088,129129,129131,129134,129137,129140,129143,129147,129239,129242,129245,129248,129252,129375,129576,129580,129584,129587,129590,129593,129597,129600,129603,129628,129631,129634,129637,129640,129643,129647,129655,129717,129720,129778,129781,129784,129787,129790,129793,129796,129799,129836],[10,127945,127941],{"id":127946},"_8-css显示模式与背景特性",[71,127948,127950],{"id":127949},"_81-css元素显示模式","8.1 css元素显示模式",[14,127952,127953,127954,127956,127957,127959],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[126,127955,126164],{},"自己占一行，比如一行可以放多个",[126,127958,126167],{},"，HTML 元素一般分为块元素和行内元素两种类型",[100,127961,127963],{"id":127962},"_811-块元素","8.1.1 块元素",[14,127965,127966,127967,127969,127970,352,127973,352,127975,352,127977,352,127980,352,127983,127986,127987,127989],{},"常见的块元素有",[126,127968,126068],{},"~",[126,127971,127972],{},"\u003Ch6>",[126,127974,126094],{},[126,127976,126164],{},[126,127978,127979],{},"\u003Cul>",[126,127981,127982],{},"\u003Col>",[126,127984,127985],{},"\u003Cli>","等，其中 ",[126,127988,126164],{}," 标签是最典型的块元素",[14,127991,127992],{},[289,127993,127994],{},"块级元素的特点：",[14,127996,127997],{},"① 比较霸道，自己独占一行。",[14,127999,128000],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128002,128003],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128005,128006],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128008,128009],{},[289,128010,169],{},[14,128012,128013],{},"①文字类的元素内不能使用块级元素",[14,128015,77250,128016,128018,128019,128021,128022],{},[126,128017,126094],{}," 标签主要用于存放文字，因此 ",[126,128020,126094],{}," 里面不能放块级元素，特别是不能放",[126,128023,126164],{},[14,128025,128026,128027,127969,128029,128031],{},"⑥同理， ",[126,128028,126068],{},[126,128030,127972],{},"等都是文字类块级标签，里面也不能放其他块级元素",[100,128033,128035],{"id":128034},"_812-行内元素","8.1.2 行内元素",[14,128037,128038,128039,352,128041,352,128044,352,128047,352,128050,352,128053,352,128056,352,128059,352,128062,352,128065,128067,128068,128070],{},"常见的行内元素有 ",[126,128040,126326],{},[126,128042,128043],{},"\u003Cstrong>",[126,128045,128046],{},"\u003Cb>",[126,128048,128049],{},"\u003Cem>",[126,128051,128052],{},"\u003Ci>",[126,128054,128055],{},"\u003Cdel>",[126,128057,128058],{},"\u003Cs>",[126,128060,128061],{},"\u003Cins>",[126,128063,128064],{},"\u003Cu>",[126,128066,126167],{}," 等，其中 ",[126,128069,126167],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128072,128073],{},[289,128074,128075],{},"特点：",[14,128077,128078],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128080,128081],{},"② 高、宽直接设置是无效的。",[14,128083,128084],{},"③ 默认宽度就是它本身内容的宽度。",[14,128086,128087],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128089,128090],{},[289,128091,169],{},[14,128093,128094],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128096,128097,128098,128100,128101,128103],{},"②特殊情况链接 ",[126,128099,126326],{}," 里面可以放块级元素，但是给 ",[126,128102,126326],{}," 转换一下块级模式最安全",[100,128105,128107],{"id":128106},"_813-行内块元素","8.1.3 行内块元素",[14,128109,128110,128111,352,128114,352,128117,128120],{},"在行内元素中有几个特殊的标签 —— ",[126,128112,128113],{},"\u003Cimg \u002F>",[126,128115,128116],{},"\u003Cinput \u002F>",[126,128118,128119],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128122,128123],{},[289,128124,128125],{},"行内块元素的特点：",[14,128127,128128],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128130,128131],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128133,128134],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[100,128136,128138],{"id":128137},"_814-总结","8.1.4 总结",[40,128140],{"style":126409,"src":128141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[100,128143,128145],{"id":128144},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128147,128148],{},"①转换为块元素：display:block;",[120,128150,128152],{"className":126553,"code":128151,"language":126555,"meta":42,"style":42},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[126,128153,128154,128159,128165,128176,128188,128200],{"__ignoreMap":42},[129,128155,128156],{"class":131,"line":132},[129,128157,128158],{"class":198},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[129,128160,128161,128163],{"class":131,"line":51},[129,128162,20],{"class":51301},[129,128164,15587],{"class":139},[129,128166,128167,128170,128172,128174],{"class":131,"line":1194},[129,128168,128169],{"class":188},"  display",[129,128171,51438],{"class":139},[129,128173,60870],{"class":188},[129,128175,1305],{"class":139},[129,128177,128178,128180,128182,128184,128186],{"class":131,"line":1209},[129,128179,70569],{"class":188},[129,128181,51438],{"class":139},[129,128183,450],{"class":188},[129,128185,51493],{"class":135},[129,128187,1305],{"class":139},[129,128189,128190,128192,128194,128196,128198],{"class":131,"line":1215},[129,128191,70789],{"class":188},[129,128193,51438],{"class":139},[129,128195,540],{"class":188},[129,128197,51493],{"class":135},[129,128199,1305],{"class":139},[129,128201,128202],{"class":131,"line":1229},[129,128203,1579],{"class":139},[14,128205,128206],{},"②转换为行内元素：display:inline;",[120,128208,128210],{"className":126553,"code":128209,"language":126555,"meta":42,"style":42},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[126,128211,128212,128217,128223,128234],{"__ignoreMap":42},[129,128213,128214],{"class":131,"line":132},[129,128215,128216],{"class":198},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[129,128218,128219,128221],{"class":131,"line":51},[129,128220,51612],{"class":51301},[129,128222,15587],{"class":139},[129,128224,128225,128227,128229,128232],{"class":131,"line":1194},[129,128226,128169],{"class":188},[129,128228,51438],{"class":139},[129,128230,128231],{"class":188},"inline",[129,128233,1305],{"class":139},[129,128235,128236],{"class":131,"line":1209},[129,128237,1579],{"class":139},[14,128239,128240],{},"③转换为行内块：display:inline-block;",[120,128242,128244],{"className":126553,"code":128243,"language":126555,"meta":42,"style":42},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[126,128245,128246,128251,128257,128267,128279,128291],{"__ignoreMap":42},[129,128247,128248],{"class":131,"line":132},[129,128249,128250],{"class":198},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[129,128252,128253,128255],{"class":131,"line":51},[129,128254,129],{"class":51301},[129,128256,15587],{"class":139},[129,128258,128259,128261,128263,128265],{"class":131,"line":1194},[129,128260,128169],{"class":188},[129,128262,51438],{"class":139},[129,128264,72384],{"class":188},[129,128266,1305],{"class":139},[129,128268,128269,128271,128273,128275,128277],{"class":131,"line":1209},[129,128270,70569],{"class":188},[129,128272,51438],{"class":139},[129,128274,751],{"class":188},[129,128276,51493],{"class":135},[129,128278,1305],{"class":139},[129,128280,128281,128283,128285,128287,128289],{"class":131,"line":1215},[129,128282,70789],{"class":188},[129,128284,51438],{"class":139},[129,128286,1090],{"class":188},[129,128288,51493],{"class":135},[129,128290,1305],{"class":139},[129,128292,128293],{"class":131,"line":1229},[129,128294,1579],{"class":139},[100,128296,128298],{"id":128297},"_816-小米侧边栏","8.1.6 小米侧边栏",[40,128300],{"style":126409,"src":128301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[120,128303,128305],{"className":127300,"code":128304,"language":127302,"meta":42,"style":42},"\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",[126,128306,128307,128312,128327,128346,128365,128384,128403,128422,128441,128460],{"__ignoreMap":42},[129,128308,128309],{"class":131,"line":132},[129,128310,128311],{"class":198},"\u003C!-- 小米侧边栏案例 -->\n",[129,128313,128314,128316,128318,128320,128322,128325],{"class":131,"line":51},[129,128315,1049],{"class":139},[129,128317,51612],{"class":51301},[129,128319,53487],{"class":1977},[129,128321,185],{"class":139},[129,128323,128324],{"class":244},"\"sidebar\"",[129,128326,51308],{"class":139},[129,128328,128329,128331,128333,128335,128337,128339,128342,128344],{"class":131,"line":1194},[129,128330,52145],{"class":139},[129,128332,20],{"class":51301},[129,128334,61058],{"class":1977},[129,128336,185],{"class":139},[129,128338,61063],{"class":244},[129,128340,128341],{"class":139},">手机 电话卡\u003C\u002F",[129,128343,20],{"class":51301},[129,128345,51308],{"class":139},[129,128347,128348,128350,128352,128354,128356,128358,128361,128363],{"class":131,"line":1209},[129,128349,52145],{"class":139},[129,128351,20],{"class":51301},[129,128353,61058],{"class":1977},[129,128355,185],{"class":139},[129,128357,61063],{"class":244},[129,128359,128360],{"class":139},">电视 盒子\u003C\u002F",[129,128362,20],{"class":51301},[129,128364,51308],{"class":139},[129,128366,128367,128369,128371,128373,128375,128377,128380,128382],{"class":131,"line":1215},[129,128368,52145],{"class":139},[129,128370,20],{"class":51301},[129,128372,61058],{"class":1977},[129,128374,185],{"class":139},[129,128376,61063],{"class":244},[129,128378,128379],{"class":139},">笔记本 平板\u003C\u002F",[129,128381,20],{"class":51301},[129,128383,51308],{"class":139},[129,128385,128386,128388,128390,128392,128394,128396,128399,128401],{"class":131,"line":1229},[129,128387,52145],{"class":139},[129,128389,20],{"class":51301},[129,128391,61058],{"class":1977},[129,128393,185],{"class":139},[129,128395,61063],{"class":244},[129,128397,128398],{"class":139},">出行 穿戴\u003C\u002F",[129,128400,20],{"class":51301},[129,128402,51308],{"class":139},[129,128404,128405,128407,128409,128411,128413,128415,128418,128420],{"class":131,"line":1235},[129,128406,52145],{"class":139},[129,128408,20],{"class":51301},[129,128410,61058],{"class":1977},[129,128412,185],{"class":139},[129,128414,61063],{"class":244},[129,128416,128417],{"class":139},">智能 路由器\u003C\u002F",[129,128419,20],{"class":51301},[129,128421,51308],{"class":139},[129,128423,128424,128426,128428,128430,128432,128434,128437,128439],{"class":131,"line":1326},[129,128425,52145],{"class":139},[129,128427,20],{"class":51301},[129,128429,61058],{"class":1977},[129,128431,185],{"class":139},[129,128433,61063],{"class":244},[129,128435,128436],{"class":139},">健康 儿童\u003C\u002F",[129,128438,20],{"class":51301},[129,128440,51308],{"class":139},[129,128442,128443,128445,128447,128449,128451,128453,128456,128458],{"class":131,"line":1332},[129,128444,52145],{"class":139},[129,128446,20],{"class":51301},[129,128448,61058],{"class":1977},[129,128450,185],{"class":139},[129,128452,61063],{"class":244},[129,128454,128455],{"class":139},">耳机 音响\u003C\u002F",[129,128457,20],{"class":51301},[129,128459,51308],{"class":139},[129,128461,128462,128464,128466],{"class":131,"line":1344},[129,128463,51786],{"class":139},[129,128465,51612],{"class":51301},[129,128467,51308],{"class":139},[120,128469,128471],{"className":126553,"code":128470,"language":126555,"meta":42,"style":42},".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",[126,128472,128473,128482,128492,128505,128517,128529,128541,128551,128562,128566,128576,128587],{"__ignoreMap":42},[129,128474,128475,128478,128480],{"class":131,"line":132},[129,128476,128477],{"class":1977},".sidebar",[129,128479,1413],{"class":51301},[129,128481,15587],{"class":139},[129,128483,128484,128486,128488,128490],{"class":131,"line":51},[129,128485,128169],{"class":188},[129,128487,51438],{"class":139},[129,128489,60870],{"class":188},[129,128491,1305],{"class":139},[129,128493,128494,128496,128498,128501,128503],{"class":131,"line":1194},[129,128495,70569],{"class":188},[129,128497,51438],{"class":139},[129,128499,128500],{"class":188},"234",[129,128502,51493],{"class":135},[129,128504,1305],{"class":139},[129,128506,128507,128509,128511,128513,128515],{"class":131,"line":1209},[129,128508,70789],{"class":188},[129,128510,51438],{"class":139},[129,128512,591],{"class":188},[129,128514,51493],{"class":135},[129,128516,1305],{"class":139},[129,128518,128519,128521,128523,128525,128527],{"class":131,"line":1215},[129,128520,127237],{"class":188},[129,128522,51438],{"class":139},[129,128524,591],{"class":188},[129,128526,51493],{"class":135},[129,128528,1305],{"class":139},[129,128530,128531,128533,128535,128537,128539],{"class":131,"line":1229},[129,128532,70824],{"class":188},[129,128534,51438],{"class":139},[129,128536,1090],{"class":188},[129,128538,51493],{"class":135},[129,128540,1305],{"class":139},[129,128542,128543,128545,128547,128549],{"class":131,"line":1235},[129,128544,70906],{"class":188},[129,128546,51438],{"class":139},[129,128548,60843],{"class":188},[129,128550,1305],{"class":139},[129,128552,128553,128555,128557,128560],{"class":131,"line":1326},[129,128554,70879],{"class":188},[129,128556,51438],{"class":139},[129,128558,128559],{"class":188},"#55585a",[129,128561,1305],{"class":139},[129,128563,128564],{"class":131,"line":1332},[129,128565,1579],{"class":139},[129,128567,128568,128570,128572,128574],{"class":131,"line":1344},[129,128569,128477],{"class":1977},[129,128571,1413],{"class":51301},[129,128573,60941],{"class":1977},[129,128575,15587],{"class":139},[129,128577,128578,128580,128582,128585],{"class":131,"line":1626},[129,128579,70879],{"class":188},[129,128581,51438],{"class":139},[129,128583,128584],{"class":188},"#ff6700",[129,128586,1305],{"class":139},[129,128588,128589],{"class":131,"line":1631},[129,128590,1579],{"class":139},[40,128592],{"style":126409,"src":128593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128595,128596],{},"行高=盒子高度：实现文字的垂直居中",[14,128598,128599],{},"原理讲解：",[40,128601],{"style":126409,"src":128602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[71,128604,128606],{"id":128605},"_82-css背景","8.2 css背景",[14,128608,128609],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[100,128611,128613],{"id":128612},"_821-背景颜色","8.2.1 背景颜色",[14,128615,128616],{},"background-color:颜色值;",[14,128618,128619],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[100,128621,128623],{"id":128622},"_822-背景图片","8.2.2 背景图片",[14,128625,128626],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[120,128628,128630],{"className":126553,"code":128629,"language":126555,"meta":42,"style":42},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[126,128631,128632,128638,128654],{"__ignoreMap":42},[129,128633,128634,128636],{"class":131,"line":132},[129,128635,51612],{"class":51301},[129,128637,15587],{"class":139},[129,128639,128640,128643,128645,128647,128649,128652],{"class":131,"line":51},[129,128641,128642],{"class":188},"  background-image",[129,128644,51438],{"class":139},[129,128646,61727],{"class":188},[129,128648,140],{"class":139},[129,128650,128651],{"class":5231},"images\u002Fbg.png",[129,128653,2733],{"class":139},[129,128655,128656],{"class":131,"line":1194},[129,128657,1579],{"class":139},[277,128659,128660,128669],{},[280,128661,128662],{},[283,128663,128664,128667],{},[286,128665,128666],{"align":23751},"参数值",[286,128668,102697],{"align":23751},[324,128670,128671,128678],{},[283,128672,128673,128675],{},[329,128674,54738],{"align":23751},[329,128676,128677],{"align":23751},"无背景图（默认的）",[283,128679,128680,128682],{},[329,128681,61727],{"align":23751},[329,128683,128684],{"align":23751},"使用绝对或相对地址指定背景图像",[120,128686,128687],{"className":126553,"code":128629,"language":126555,"meta":42,"style":42},[126,128688,128689,128695,128709],{"__ignoreMap":42},[129,128690,128691,128693],{"class":131,"line":132},[129,128692,51612],{"class":51301},[129,128694,15587],{"class":139},[129,128696,128697,128699,128701,128703,128705,128707],{"class":131,"line":51},[129,128698,128642],{"class":188},[129,128700,51438],{"class":139},[129,128702,61727],{"class":188},[129,128704,140],{"class":139},[129,128706,128651],{"class":5231},[129,128708,2733],{"class":139},[129,128710,128711],{"class":131,"line":1194},[129,128712,1579],{"class":139},[14,128714,128715],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[100,128717,128719],{"id":128718},"_823-背景平铺","8.2.3 背景平铺",[120,128721,128723],{"className":126553,"code":128722,"language":126555,"meta":42,"style":42},"div {\n  background-repeat: no-repeat;\n}\n",[126,128724,128725,128731,128742],{"__ignoreMap":42},[129,128726,128727,128729],{"class":131,"line":132},[129,128728,51612],{"class":51301},[129,128730,15587],{"class":139},[129,128732,128733,128736,128738,128740],{"class":131,"line":51},[129,128734,128735],{"class":188},"  background-repeat",[129,128737,51438],{"class":139},[129,128739,61737],{"class":188},[129,128741,1305],{"class":139},[129,128743,128744],{"class":131,"line":1194},[129,128745,1579],{"class":139},[277,128747,128748,128756],{},[280,128749,128750],{},[283,128751,128752,128754],{},[286,128753,128666],{"align":23751},[286,128755,102697],{"align":23751},[324,128757,128758,128766,128773,128781],{},[283,128759,128760,128763],{},[329,128761,128762],{"align":23751},"repeat",[329,128764,128765],{"align":23751},"背景图像在纵向和横向上平铺（默认的）",[283,128767,128768,128770],{},[329,128769,61737],{"align":23751},[329,128771,128772],{"align":23751},"背景图像不平铺",[283,128774,128775,128778],{},[329,128776,128777],{"align":23751},"repeat-x",[329,128779,128780],{"align":23751},"背景图像在横向上平铺",[283,128782,128783,128786],{},[329,128784,128785],{"align":23751},"repeat-y",[329,128787,128788],{"align":23751},"背景图像在纵向平铺",[100,128790,128792],{"id":128791},"_824-背景图片位置","8.2.4 背景图片位置",[120,128794,128796],{"className":126553,"code":128795,"language":126555,"meta":42,"style":42},"\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",[126,128797,128798,128803,128809,128823,128827,128832,128838,128854,128858,128863,128869,128883],{"__ignoreMap":42},[129,128799,128800],{"class":131,"line":132},[129,128801,128802],{"class":198},"\u002F* 方位名词 *\u002F\n",[129,128804,128805,128807],{"class":131,"line":51},[129,128806,51612],{"class":51301},[129,128808,15587],{"class":139},[129,128810,128811,128814,128816,128818,128821],{"class":131,"line":1194},[129,128812,128813],{"class":188},"  background-position",[129,128815,51438],{"class":139},[129,128817,51593],{"class":188},[129,128819,128820],{"class":188}," top",[129,128822,1305],{"class":139},[129,128824,128825],{"class":131,"line":1209},[129,128826,1579],{"class":139},[129,128828,128829],{"class":131,"line":1215},[129,128830,128831],{"class":198},"\u002F* 精确单位 *\u002F\n",[129,128833,128834,128836],{"class":131,"line":1229},[129,128835,51612],{"class":51301},[129,128837,15587],{"class":139},[129,128839,128840,128842,128844,128846,128848,128850,128852],{"class":131,"line":1235},[129,128841,128813],{"class":188},[129,128843,51438],{"class":139},[129,128845,839],{"class":188},[129,128847,51493],{"class":135},[129,128849,57505],{"class":188},[129,128851,51493],{"class":135},[129,128853,1305],{"class":139},[129,128855,128856],{"class":131,"line":1326},[129,128857,1579],{"class":139},[129,128859,128860],{"class":131,"line":1332},[129,128861,128862],{"class":198},"\u002F* 混合单位 *\u002F\n",[129,128864,128865,128867],{"class":131,"line":1344},[129,128866,51612],{"class":51301},[129,128868,15587],{"class":139},[129,128870,128871,128873,128875,128877,128879,128881],{"class":131,"line":1626},[129,128872,128813],{"class":188},[129,128874,51438],{"class":139},[129,128876,839],{"class":188},[129,128878,51493],{"class":135},[129,128880,17159],{"class":188},[129,128882,1305],{"class":139},[129,128884,128885],{"class":131,"line":1631},[129,128886,1579],{"class":139},[14,128888,128889],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[277,128891,128892,128900],{},[280,128893,128894],{},[283,128895,128896,128898],{},[286,128897,128666],{"align":23751},[286,128899,25870],{"align":23751},[324,128901,128902,128909],{},[283,128903,128904,128906],{},[329,128905,51969],{"align":23751},[329,128907,128908],{"align":23751},"百分数|由浮点数和单位标识符组成的长度值",[283,128910,128911,128914],{},[329,128912,128913],{"align":23751},"position",[329,128915,128916],{"align":23751},"top|center|bottom|left|center|right 方位名词",[14,128918,128919],{},"其他说明：",[14,128921,128922],{},"①参数是方位名词",[14,128924,128925],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128927,128928],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128930,128931],{},"②参数是精确单位",[14,128933,128934],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128936,128937],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128939,128940],{},"③参数是混合单位",[14,128942,128943],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[100,128945,128947],{"id":128946},"_825-背景图片固定","8.2.5 背景图片固定",[120,128949,128951],{"className":126553,"code":128950,"language":126555,"meta":42,"style":42},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[126,128952,128953,128958,128964,128976,128980,128985,128991,129001],{"__ignoreMap":42},[129,128954,128955],{"class":131,"line":132},[129,128956,128957],{"class":198},"\u002F* 背景滚动（默认） *\u002F\n",[129,128959,128960,128962],{"class":131,"line":51},[129,128961,51612],{"class":51301},[129,128963,15587],{"class":139},[129,128965,128966,128969,128971,128974],{"class":131,"line":1194},[129,128967,128968],{"class":188},"  background-attachment",[129,128970,51438],{"class":139},[129,128972,128973],{"class":188},"scroll",[129,128975,1305],{"class":139},[129,128977,128978],{"class":131,"line":1209},[129,128979,1579],{"class":139},[129,128981,128982],{"class":131,"line":1215},[129,128983,128984],{"class":198},"\u002F* 背景固定 *\u002F\n",[129,128986,128987,128989],{"class":131,"line":1229},[129,128988,51612],{"class":51301},[129,128990,15587],{"class":139},[129,128992,128993,128995,128997,128999],{"class":131,"line":1235},[129,128994,128968],{"class":188},[129,128996,51438],{"class":139},[129,128998,86234],{"class":188},[129,129000,1305],{"class":139},[129,129002,129003],{"class":131,"line":1326},[129,129004,1579],{"class":139},[277,129006,129007,129016],{},[280,129008,129009],{},[283,129010,129011,129014],{},[286,129012,129013],{"align":23751},"参数",[286,129015,102697],{"align":23751},[324,129017,129018,129025],{},[283,129019,129020,129022],{},[329,129021,128973],{"align":23751},[329,129023,129024],{"align":23751},"背景图像是随对象内容滚动",[283,129026,129027,129029],{},[329,129028,86234],{"align":23751},[329,129030,129031],{"align":23751},"背景图像固定",[100,129033,129035],{"id":129034},"_826-背景样式合写","8.2.6 背景样式合写",[120,129037,129039],{"className":126553,"code":129038,"language":126555,"meta":42,"style":42},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[126,129040,129041,129046,129052,129080],{"__ignoreMap":42},[129,129042,129043],{"class":131,"line":132},[129,129044,129045],{"class":198},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[129,129047,129048,129050],{"class":131,"line":51},[129,129049,51612],{"class":51301},[129,129051,15587],{"class":139},[129,129053,129054,129056,129058,129060,129063,129065,129067,129069,129071,129074,129076,129078],{"class":131,"line":1194},[129,129055,70612],{"class":188},[129,129057,51438],{"class":139},[129,129059,60843],{"class":188},[129,129061,129062],{"class":188}," url",[129,129064,140],{"class":139},[129,129066,128651],{"class":5231},[129,129068,13729],{"class":139},[129,129070,61737],{"class":188},[129,129072,129073],{"class":188}," fixed",[129,129075,17159],{"class":188},[129,129077,128820],{"class":188},[129,129079,1305],{"class":139},[129,129081,129082],{"class":131,"line":1209},[129,129083,1579],{"class":139},[100,129085,129087],{"id":129086},"_827-背景色半透明","8.2.7 背景色半透明",[120,129089,129091],{"className":126553,"code":129090,"language":126555,"meta":42,"style":42},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[126,129092,129093,129099,129125],{"__ignoreMap":42},[129,129094,129095,129097],{"class":131,"line":132},[129,129096,51612],{"class":51301},[129,129098,15587],{"class":139},[129,129100,129101,129103,129105,129107,129109,129111,129113,129115,129117,129119,129121,129123],{"class":131,"line":51},[129,129102,70612],{"class":188},[129,129104,51438],{"class":139},[129,129106,55111],{"class":188},[129,129108,140],{"class":139},[129,129110,331],{"class":188},[129,129112,12450],{"class":139},[129,129114,331],{"class":188},[129,129116,12450],{"class":139},[129,129118,331],{"class":188},[129,129120,12450],{"class":139},[129,129122,100522],{"class":188},[129,129124,2733],{"class":139},[129,129126,129127],{"class":131,"line":1194},[129,129128,1579],{"class":139},[14,129130,99397],{},[14,129132,129133],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129135,129136],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129138,129139],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129141,129142],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[100,129144,129146],{"id":129145},"_828-总结","8.2.8 总结",[277,129148,129149,129160],{},[280,129150,129151],{},[283,129152,129153,129156,129158],{},[286,129154,129155],{"align":23751},"属性",[286,129157,102697],{"align":23751},[286,129159,292],{"align":23751},[324,129161,129162,129173,129184,129195,129206,129217,129228],{},[283,129163,129164,129167,129170],{},[329,129165,129166],{"align":23751},"background-color",[329,129168,129169],{"align":23751},"背景颜色",[329,129171,129172],{"align":23751},"预定义的颜色值\u002F十六进制\u002FRGB代码",[283,129174,129175,129178,129181],{},[329,129176,129177],{"align":23751},"background-image",[329,129179,129180],{"align":23751},"背景图片",[329,129182,129183],{"align":23751},"url(图片路径)",[283,129185,129186,129189,129192],{},[329,129187,129188],{"align":23751},"background-repeat",[329,129190,129191],{"align":23751},"是否平铺",[329,129193,129194],{"align":23751},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[283,129196,129197,129200,129203],{},[329,129198,129199],{"align":23751},"background-position",[329,129201,129202],{"align":23751},"背景位置",[329,129204,129205],{"align":23751},"length\u002Fposition 分别是x和y坐标",[283,129207,129208,129211,129214],{},[329,129209,129210],{"align":23751},"background-attachment",[329,129212,129213],{"align":23751},"背景附着",[329,129215,129216],{"align":23751},"scroll(背景滚动) \u002Ffixed (背景固定)",[283,129218,129219,129222,129225],{},[329,129220,129221],{"align":23751},"背景简写",[329,129223,129224],{"align":23751},"书写更简单",[329,129226,129227],{"align":23751},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[283,129229,129230,129233,129236],{},[329,129231,129232],{"align":23751},"背景半透明",[329,129234,129235],{"align":23751},"背景颜色半透明",[329,129237,129238],{"align":23751},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129240,129241],{},"颜色渐变：",[40,129243],{"style":126409,"src":129244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[40,129246],{"style":126409,"src":129247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[100,129249,129251],{"id":129250},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[120,129253,129255],{"className":127300,"code":129254,"language":127302,"meta":42,"style":42},"\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",[126,129256,129257,129272,129291,129310,129329,129348,129367],{"__ignoreMap":42},[129,129258,129259,129261,129263,129265,129267,129270],{"class":131,"line":132},[129,129260,1049],{"class":139},[129,129262,51612],{"class":51301},[129,129264,53487],{"class":1977},[129,129266,185],{"class":139},[129,129268,129269],{"class":244},"\"nav\"",[129,129271,51308],{"class":139},[129,129273,129274,129276,129278,129280,129282,129284,129287,129289],{"class":131,"line":51},[129,129275,52145],{"class":139},[129,129277,20],{"class":51301},[129,129279,61058],{"class":1977},[129,129281,185],{"class":139},[129,129283,61063],{"class":244},[129,129285,129286],{"class":139},">五彩导航1\u003C\u002F",[129,129288,20],{"class":51301},[129,129290,51308],{"class":139},[129,129292,129293,129295,129297,129299,129301,129303,129306,129308],{"class":131,"line":1194},[129,129294,52145],{"class":139},[129,129296,20],{"class":51301},[129,129298,61058],{"class":1977},[129,129300,185],{"class":139},[129,129302,61063],{"class":244},[129,129304,129305],{"class":139},">五彩导航2\u003C\u002F",[129,129307,20],{"class":51301},[129,129309,51308],{"class":139},[129,129311,129312,129314,129316,129318,129320,129322,129325,129327],{"class":131,"line":1209},[129,129313,52145],{"class":139},[129,129315,20],{"class":51301},[129,129317,61058],{"class":1977},[129,129319,185],{"class":139},[129,129321,61063],{"class":244},[129,129323,129324],{"class":139},">五彩导航3\u003C\u002F",[129,129326,20],{"class":51301},[129,129328,51308],{"class":139},[129,129330,129331,129333,129335,129337,129339,129341,129344,129346],{"class":131,"line":1215},[129,129332,52145],{"class":139},[129,129334,20],{"class":51301},[129,129336,61058],{"class":1977},[129,129338,185],{"class":139},[129,129340,61063],{"class":244},[129,129342,129343],{"class":139},">五彩导航4\u003C\u002F",[129,129345,20],{"class":51301},[129,129347,51308],{"class":139},[129,129349,129350,129352,129354,129356,129358,129360,129363,129365],{"class":131,"line":1229},[129,129351,52145],{"class":139},[129,129353,20],{"class":51301},[129,129355,61058],{"class":1977},[129,129357,185],{"class":139},[129,129359,61063],{"class":244},[129,129361,129362],{"class":139},">五彩导航5\u003C\u002F",[129,129364,20],{"class":51301},[129,129366,51308],{"class":139},[129,129368,129369,129371,129373],{"class":131,"line":1235},[129,129370,51786],{"class":139},[129,129372,51612],{"class":51301},[129,129374,51308],{"class":139},[120,129376,129378],{"className":126553,"code":129377,"language":126555,"meta":42,"style":42},".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",[126,129379,129380,129389,129399,129411,129423,129433,129445,129455,129459,129484,129507,129530,129553],{"__ignoreMap":42},[129,129381,129382,129385,129387],{"class":131,"line":132},[129,129383,129384],{"class":1977},".nav",[129,129386,1413],{"class":51301},[129,129388,15587],{"class":139},[129,129390,129391,129393,129395,129397],{"class":131,"line":51},[129,129392,128169],{"class":188},[129,129394,51438],{"class":139},[129,129396,72384],{"class":188},[129,129398,1305],{"class":139},[129,129400,129401,129403,129405,129407,129409],{"class":131,"line":1194},[129,129402,70569],{"class":188},[129,129404,51438],{"class":139},[129,129406,956],{"class":188},[129,129408,51493],{"class":135},[129,129410,1305],{"class":139},[129,129412,129413,129415,129417,129419,129421],{"class":131,"line":1209},[129,129414,70789],{"class":188},[129,129416,51438],{"class":139},[129,129418,995],{"class":188},[129,129420,51493],{"class":135},[129,129422,1305],{"class":139},[129,129424,129425,129427,129429,129431],{"class":131,"line":1215},[129,129426,70527],{"class":188},[129,129428,51438],{"class":139},[129,129430,51593],{"class":188},[129,129432,1305],{"class":139},[129,129434,129435,129437,129439,129441,129443],{"class":131,"line":1229},[129,129436,127237],{"class":188},[129,129438,51438],{"class":139},[129,129440,995],{"class":188},[129,129442,51493],{"class":135},[129,129444,1305],{"class":139},[129,129446,129447,129449,129451,129453],{"class":131,"line":1235},[129,129448,70906],{"class":188},[129,129450,51438],{"class":139},[129,129452,60843],{"class":188},[129,129454,1305],{"class":139},[129,129456,129457],{"class":131,"line":1326},[129,129458,1579],{"class":139},[129,129460,129461,129463,129465,129468,129470,129472,129475,129477,129479,129481],{"class":131,"line":1332},[129,129462,129384],{"class":1977},[129,129464,1413],{"class":51301},[129,129466,129467],{"class":1977},":nth-child",[129,129469,140],{"class":139},[129,129471,357],{"class":188},[129,129473,129474],{"class":139},") { ",[129,129476,129166],{"class":188},[129,129478,51438],{"class":139},[129,129480,128584],{"class":188},[129,129482,129483],{"class":139},"; }\n",[129,129485,129486,129488,129490,129492,129494,129496,129498,129500,129502,129505],{"class":131,"line":1344},[129,129487,129384],{"class":1977},[129,129489,1413],{"class":51301},[129,129491,129467],{"class":1977},[129,129493,140],{"class":139},[129,129495,217],{"class":188},[129,129497,129474],{"class":139},[129,129499,129166],{"class":188},[129,129501,51438],{"class":139},[129,129503,129504],{"class":188},"#ff0000",[129,129506,129483],{"class":139},[129,129508,129509,129511,129513,129515,129517,129519,129521,129523,129525,129528],{"class":131,"line":1626},[129,129510,129384],{"class":1977},[129,129512,1413],{"class":51301},[129,129514,129467],{"class":1977},[129,129516,140],{"class":139},[129,129518,211],{"class":188},[129,129520,129474],{"class":139},[129,129522,129166],{"class":188},[129,129524,51438],{"class":139},[129,129526,129527],{"class":188},"#00a4ff",[129,129529,129483],{"class":139},[129,129531,129532,129534,129536,129538,129540,129542,129544,129546,129548,129551],{"class":131,"line":1631},[129,129533,129384],{"class":1977},[129,129535,1413],{"class":51301},[129,129537,129467],{"class":1977},[129,129539,140],{"class":139},[129,129541,432],{"class":188},[129,129543,129474],{"class":139},[129,129545,129166],{"class":188},[129,129547,51438],{"class":139},[129,129549,129550],{"class":188},"#ff00ff",[129,129552,129483],{"class":139},[129,129554,129555,129557,129559,129561,129563,129565,129567,129569,129571,129574],{"class":131,"line":1637},[129,129556,129384],{"class":1977},[129,129558,1413],{"class":51301},[129,129560,129467],{"class":1977},[129,129562,140],{"class":139},[129,129564,458],{"class":188},[129,129566,129474],{"class":139},[129,129568,129166],{"class":188},[129,129570,51438],{"class":139},[129,129572,129573],{"class":188},"#00ff00",[129,129575,129483],{"class":139},[71,129577,129579],{"id":129578},"_83-css三大特性","8.3 css三大特性",[100,129581,129583],{"id":129582},"_831-层叠性","8.3.1 层叠性",[14,129585,129586],{},"为了解决样式冲突问题",[14,129588,129589],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129591,129592],{},"   ②样式不冲突，不会层叠",[100,129594,129596],{"id":129595},"_832-继承性","8.3.2 继承性",[14,129598,129599],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129601,129602],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[120,129604,129606],{"className":126553,"code":129605,"language":126555,"meta":42,"style":42},"p {\n  color: #333;\n}\n",[126,129607,129608,129614,129624],{"__ignoreMap":42},[129,129609,129610,129612],{"class":131,"line":132},[129,129611,14],{"class":51301},[129,129613,15587],{"class":139},[129,129615,129616,129618,129620,129622],{"class":131,"line":51},[129,129617,70906],{"class":188},[129,129619,51438],{"class":139},[129,129621,62370],{"class":188},[129,129623,1305],{"class":139},[129,129625,129626],{"class":131,"line":1194},[129,129627,1579],{"class":139},[40,129629],{"style":126409,"src":129630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129632,129633],{},"解释：①行高可以跟单位也可以不跟单位",[14,129635,129636],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129638,129639],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129641,129642],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[100,129644,129646],{"id":129645},"_833-优先级","8.3.3 优先级",[83,129648,129649,129652],{},[86,129650,129651],{},"选择器相同，则执行层叠性",[86,129653,129654],{},"选择器不同，则根据选择器权重执行",[277,129656,129657,129667],{},[280,129658,129659],{},[283,129660,129661,129664],{},[286,129662,129663],{"align":23751},"选择器",[286,129665,129666],{"align":23751},"选择器权重",[324,129668,129669,129677,129685,129693,129701,129709],{},[283,129670,129671,129674],{},[329,129672,129673],{"align":23751},"继承 或者*",[329,129675,129676],{"align":23751},"0，0，0，0",[283,129678,129679,129682],{},[329,129680,129681],{"align":23751},"标签选择器",[329,129683,129684],{"align":23751},"0，0，0，1",[283,129686,129687,129690],{},[329,129688,129689],{"align":23751},"类选择器，伪类选择器",[329,129691,129692],{"align":23751},"0，0，1，0",[283,129694,129695,129698],{},[329,129696,129697],{"align":23751},"ID选择器",[329,129699,129700],{"align":23751},"0，1，0，0",[283,129702,129703,129706],{},[329,129704,129705],{"align":23751},"行内样式",[329,129707,129708],{"align":23751},"1，0，0，0",[283,129710,129711,129714],{},[329,129712,129713],{"align":23751},"！important",[329,129715,129716],{"align":23751},"无穷大",[14,129718,129719],{},"! important用法：",[120,129721,129723],{"className":126553,"code":129722,"language":126555,"meta":42,"style":42},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[126,129724,129725,129730,129736,129749,129753,129758,129764,129774],{"__ignoreMap":42},[129,129726,129727],{"class":131,"line":132},[129,129728,129729],{"class":198},"\u002F* !important 拥有最高优先级 *\u002F\n",[129,129731,129732,129734],{"class":131,"line":51},[129,129733,51612],{"class":51301},[129,129735,15587],{"class":139},[129,129737,129738,129740,129742,129744,129747],{"class":131,"line":1194},[129,129739,70906],{"class":188},[129,129741,51438],{"class":139},[129,129743,51646],{"class":188},[129,129745,129746],{"class":135}," !important",[129,129748,1305],{"class":139},[129,129750,129751],{"class":131,"line":1209},[129,129752,1579],{"class":139},[129,129754,129755],{"class":131,"line":1215},[129,129756,129757],{"class":198},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[129,129759,129760,129762],{"class":131,"line":1229},[129,129761,51612],{"class":51301},[129,129763,15587],{"class":139},[129,129765,129766,129768,129770,129772],{"class":131,"line":1235},[129,129767,70906],{"class":188},[129,129769,51438],{"class":139},[129,129771,57422],{"class":188},[129,129773,1305],{"class":139},[129,129775,129776],{"class":131,"line":1326},[129,129777,1579],{"class":139},[14,129779,129780],{},"优先级注意点：",[14,129782,129783],{},"①权重是有4组数字组成,但是不会有进位",[14,129785,129786],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129788,129789],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129791,129792],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129794,129795],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129797,129798],{},"⑥复合选择器",[277,129800,129801,129811],{},[280,129802,129803],{},[283,129804,129805,129808],{},[286,129806,129807],{"align":23751},"div ul li",[286,129809,129810],{"align":23751},"0,0,0,3",[324,129812,129813,129821,129829],{},[283,129814,129815,129818],{},[329,129816,129817],{"align":23751},".nav ul li",[329,129819,129820],{"align":23751},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[283,129822,129823,129826],{},[329,129824,129825],{"align":23751},"a:hover",[329,129827,129828],{"align":23751},"0,0,1,1",[283,129830,129831,129834],{},[329,129832,129833],{"align":23751},".nav a",[329,129835,129828],{"align":23751},[5141,129837,129838],{},"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":42,"searchDepth":51,"depth":51,"links":129840},[129841,129849,129860],{"id":127949,"depth":51,"text":127950,"children":129842},[129843,129844,129845,129846,129847,129848],{"id":127962,"depth":1194,"text":127963},{"id":128034,"depth":1194,"text":128035},{"id":128106,"depth":1194,"text":128107},{"id":128137,"depth":1194,"text":128138},{"id":128144,"depth":1194,"text":128145},{"id":128297,"depth":1194,"text":128298},{"id":128605,"depth":51,"text":128606,"children":129850},[129851,129852,129853,129854,129855,129856,129857,129858,129859],{"id":128612,"depth":1194,"text":128613},{"id":128622,"depth":1194,"text":128623},{"id":128718,"depth":1194,"text":128719},{"id":128791,"depth":1194,"text":128792},{"id":128946,"depth":1194,"text":128947},{"id":129034,"depth":1194,"text":129035},{"id":129086,"depth":1194,"text":129087},{"id":129145,"depth":1194,"text":129146},{"id":129250,"depth":1194,"text":129251},{"id":129578,"depth":51,"text":129579,"children":129861},[129862,129863,129864],{"id":129582,"depth":1194,"text":129583},{"id":129595,"depth":1194,"text":129596},{"id":129645,"depth":1194,"text":129646},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127941,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129871,"title":129872,"body":129873,"description":53,"extension":54,"meta":131463,"navigation":56,"path":131464,"seo":131465,"stem":131466,"__hash__":131467},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129874,"toc":131442},[129875,129878,129882,129885,129888,129891,129894,129897,129900,129903,129907,129915,129952,129988,129991,130005,130010,130044,130047,130140,130145,130148,130178,130181,130186,130194,130198,130205,130251,130295,130300,130303,130306,130309,130312,130315,130318,130320,130323,130327,130332,130376,130381,130384,130387,130424,130429,130432,130435,130438,130441,130473,130476,130479,130482,130514,130517,130520,130523,130527,130530,130562,130565,130569,130589,130592,130600,130603,130607,130612,130615,130647,130652,130655,130693,130697,130702,130705,130708,130739,130742,130759,130764,130816,130876,130881,130935,130973,130977,130981,130984,130988,130996,130999,131001,131012,131017,131065,131099,131102,131105,131108,131111,131155,131158,131161,131164,131167,131170,131173,131217,131220,131223,131226,131229,131232,131235,131241,131244,131288,131291,131294,131297,131300,131303,131347,131350,131352,131355,131359,131363,131401,131405,131408,131411,131415,131423,131427,131430,131433,131436,131439],[10,129876,129872],{"id":129877},"_9-css盒模型浮动与切图",[71,129879,129881],{"id":129880},"_91-盒子模型","9.1 盒子模型",[14,129883,129884],{},"利用盒子来设计网页",[14,129886,129887],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129889,129890],{},"网页布局设置：",[14,129892,129893],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129895,129896],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129898,129899],{},"③往盒子里装内容",[40,129901],{"style":126409,"src":129902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[100,129904,129906],{"id":129905},"_911-边框border","9.1.1 边框（border）",[83,129908,129909,129912],{},[86,129910,129911],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[86,129913,129914],{},"语法",[120,129916,129918],{"className":126553,"code":129917,"language":126555,"meta":42,"style":42},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[126,129919,129920,129925,129931,129948],{"__ignoreMap":42},[129,129921,129922],{"class":131,"line":132},[129,129923,129924],{"class":198},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[129,129926,129927,129929],{"class":131,"line":51},[129,129928,51612],{"class":51301},[129,129930,15587],{"class":139},[129,129932,129933,129935,129937,129939,129941,129943,129946],{"class":131,"line":1194},[129,129934,70897],{"class":188},[129,129936,51438],{"class":139},[129,129938,357],{"class":188},[129,129940,51493],{"class":135},[129,129942,51522],{"class":188},[129,129944,129945],{"class":188}," #ccc",[129,129947,1305],{"class":139},[129,129949,129950],{"class":131,"line":1209},[129,129951,1579],{"class":139},[277,129953,129954,129962],{},[280,129955,129956],{},[283,129957,129958,129960],{},[286,129959,129155],{"align":23751},[286,129961,102697],{"align":23751},[324,129963,129964,129972,129980],{},[283,129965,129966,129969],{},[329,129967,129968],{"align":23751},"border-width",[329,129970,129971],{"align":23751},"定义边框粗细，单位是px",[283,129973,129974,129977],{},[329,129975,129976],{"align":23751},"border-style",[329,129978,129979],{"align":23751},"边框的样式",[283,129981,129982,129985],{},[329,129983,129984],{"align":23751},"border-color",[329,129986,129987],{"align":23751},"边框的颜色",[14,129989,129990],{},"边框样式 border-style 可以设置如下值：",[1146,129992,129993,129996,129999,130002],{},[86,129994,129995],{},"none：没有边框即忽略所有边框的宽度（默认值）",[86,129997,129998],{},"solid：边框为单实线(最为常用的)",[86,130000,130001],{},"dashed：边框为虚线",[86,130003,130004],{},"dotted：边框为点线",[83,130006,130007],{"start":1194},[86,130008,130009],{},"边框的合写分写",[120,130011,130012],{"className":126553,"code":129917,"language":126555,"meta":42,"style":42},[126,130013,130014,130018,130024,130040],{"__ignoreMap":42},[129,130015,130016],{"class":131,"line":132},[129,130017,129924],{"class":198},[129,130019,130020,130022],{"class":131,"line":51},[129,130021,51612],{"class":51301},[129,130023,15587],{"class":139},[129,130025,130026,130028,130030,130032,130034,130036,130038],{"class":131,"line":1194},[129,130027,70897],{"class":188},[129,130029,51438],{"class":139},[129,130031,357],{"class":188},[129,130033,51493],{"class":135},[129,130035,51522],{"class":188},[129,130037,129945],{"class":188},[129,130039,1305],{"class":139},[129,130041,130042],{"class":131,"line":1209},[129,130043,1579],{"class":139},[14,130045,130046],{},"边框分开写法：",[120,130048,130050],{"className":126553,"code":130049,"language":126555,"meta":42,"style":42},"\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",[126,130051,130052,130057,130063,130081,130099,130118,130136],{"__ignoreMap":42},[129,130053,130054],{"class":131,"line":132},[129,130055,130056],{"class":198},"\u002F* 边框分开写法 *\u002F\n",[129,130058,130059,130061],{"class":131,"line":51},[129,130060,51612],{"class":51301},[129,130062,15587],{"class":139},[129,130064,130065,130068,130070,130072,130074,130076,130079],{"class":131,"line":1194},[129,130066,130067],{"class":188},"  border-top",[129,130069,51438],{"class":139},[129,130071,357],{"class":188},[129,130073,51493],{"class":135},[129,130075,51522],{"class":188},[129,130077,130078],{"class":188}," #000",[129,130080,1305],{"class":139},[129,130082,130083,130086,130088,130090,130092,130094,130097],{"class":131,"line":1209},[129,130084,130085],{"class":188},"  border-right",[129,130087,51438],{"class":139},[129,130089,217],{"class":188},[129,130091,51493],{"class":135},[129,130093,62242],{"class":188},[129,130095,130096],{"class":188}," #333",[129,130098,1305],{"class":139},[129,130100,130101,130104,130106,130108,130110,130113,130116],{"class":131,"line":1215},[129,130102,130103],{"class":188},"  border-bottom",[129,130105,51438],{"class":139},[129,130107,211],{"class":188},[129,130109,51493],{"class":135},[129,130111,130112],{"class":188}," dotted",[129,130114,130115],{"class":188}," #666",[129,130117,1305],{"class":139},[129,130119,130120,130123,130125,130127,130129,130131,130134],{"class":131,"line":1229},[129,130121,130122],{"class":188},"  border-left",[129,130124,51438],{"class":139},[129,130126,357],{"class":188},[129,130128,51493],{"class":135},[129,130130,51522],{"class":188},[129,130132,130133],{"class":188}," #999",[129,130135,1305],{"class":139},[129,130137,130138],{"class":131,"line":1235},[129,130139,1579],{"class":139},[83,130141,130142],{"start":1209},[86,130143,130144],{},"表格的细线边框",[14,130146,130147],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[120,130149,130151],{"className":126553,"code":130150,"language":126555,"meta":42,"style":42},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[126,130152,130153,130158,130164,130174],{"__ignoreMap":42},[129,130154,130155],{"class":131,"line":132},[129,130156,130157],{"class":198},"\u002F* 表格细线边框合并 *\u002F\n",[129,130159,130160,130162],{"class":131,"line":51},[129,130161,277],{"class":51301},[129,130163,15587],{"class":139},[129,130165,130166,130168,130170,130172],{"class":131,"line":1194},[129,130167,70579],{"class":188},[129,130169,51438],{"class":139},[129,130171,65036],{"class":188},[129,130173,1305],{"class":139},[129,130175,130176],{"class":131,"line":1209},[129,130177,1579],{"class":139},[14,130179,130180],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[83,130182,130183],{"start":1215},[86,130184,130185],{},"解决边框额外增加盒子的实际大小的方法：",[1146,130187,130188,130191],{},[86,130189,130190],{},"测量盒子大小的时候,不量边框",[86,130192,130193],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[100,130195,130197],{"id":130196},"_912-内边距","9.1.2 内边距",[83,130199,130200,130203],{},[86,130201,130202],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[86,130204,129914],{},[277,130206,130207,130217],{},[280,130208,130209],{},[283,130210,130211,130214],{},[286,130212,130213],{"align":23751},"值的个数",[286,130215,130216],{"align":23751},"表达意思",[324,130218,130219,130227,130235,130243],{},[283,130220,130221,130224],{},[329,130222,130223],{"align":23751},"padding: 5px;",[329,130225,130226],{"align":23751},"1个值，代表上下左右都有5个元素",[283,130228,130229,130232],{},[329,130230,130231],{"align":23751},"padding: 5px 10px;",[329,130233,130234],{"align":23751},"2个值，代表上下内边距为5像素，左右内边距为10像素",[283,130236,130237,130240],{},[329,130238,130239],{"align":23751},"padding: 5px 10px 20px;",[329,130241,130242],{"align":23751},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[283,130244,130245,130248],{},[329,130246,130247],{"align":23751},"padding: 5px 10px 20px 30px;",[329,130249,130250],{"align":23751},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[277,130252,130253,130261],{},[280,130254,130255],{},[283,130256,130257,130259],{},[286,130258,129155],{"align":23751},[286,130260,102697],{"align":23751},[324,130262,130263,130271,130279,130287],{},[283,130264,130265,130268],{},[329,130266,130267],{"align":23751},"padding-left",[329,130269,130270],{"align":23751},"左内边距",[283,130272,130273,130276],{},[329,130274,130275],{"align":23751},"padding-right",[329,130277,130278],{"align":23751},"右内边距",[283,130280,130281,130284],{},[329,130282,130283],{"align":23751},"padding-top",[329,130285,130286],{"align":23751},"上内边距",[283,130288,130289,130292],{},[329,130290,130291],{"align":23751},"padding-bottom",[329,130293,130294],{"align":23751},"下内边距",[83,130296,130297],{"start":1194},[86,130298,130299],{},"内边距会影响盒子的实际大小",[14,130301,130302],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130304,130305],{},"①内容和边框有了距离，添加了内边距",[14,130307,130308],{},"②padding影响了盒子实际大小",[14,130310,130311],{},"内边距对盒子大小的影响：",[14,130313,130314],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130316,130317],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130319,95221],{},[14,130321,130322],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[100,130324,130326],{"id":130325},"_913-外边距","9.1.3 外边距",[83,130328,130329],{},[86,130330,130331],{},"控制盒子与盒子之间的距离",[277,130333,130334,130342],{},[280,130335,130336],{},[283,130337,130338,130340],{},[286,130339,129155],{"align":23751},[286,130341,102697],{"align":23751},[324,130343,130344,130352,130360,130368],{},[283,130345,130346,130349],{},[329,130347,130348],{"align":23751},"margin-left",[329,130350,130351],{"align":23751},"左外边距",[283,130353,130354,130357],{},[329,130355,130356],{"align":23751},"margin-right",[329,130358,130359],{"align":23751},"右外边距",[283,130361,130362,130365],{},[329,130363,130364],{"align":23751},"margin-top",[329,130366,130367],{"align":23751},"上外边距",[283,130369,130370,130373],{},[329,130371,130372],{"align":23751},"margin-bottom",[329,130374,130375],{"align":23751},"下外边距",[83,130377,130378],{"start":51},[86,130379,130380],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130382,130383],{},"①盒子必须指定了宽度（width）",[14,130385,130386],{},"②盒子左右的外边距都设置为 auto",[120,130388,130390],{"className":126553,"code":130389,"language":126555,"meta":42,"style":42},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[126,130391,130392,130397,130404,130420],{"__ignoreMap":42},[129,130393,130394],{"class":131,"line":132},[129,130395,130396],{"class":198},"\u002F* margin 复合写法（同上） *\u002F\n",[129,130398,130399,130402],{"class":131,"line":51},[129,130400,130401],{"class":1977},".box",[129,130403,15587],{"class":139},[129,130405,130406,130408,130410,130412,130414,130417],{"class":131,"line":1194},[129,130407,70471],{"class":188},[129,130409,51438],{"class":139},[129,130411,331],{"class":188},[129,130413,51557],{"class":188},[129,130415,130416],{"class":139},";  ",[129,130418,130419],{"class":198},"\u002F* 块级盒子水平居中 *\u002F\n",[129,130421,130422],{"class":131,"line":1209},[129,130423,1579],{"class":139},[83,130425,130426],{"start":1194},[86,130427,130428],{},"外边距塌陷问题",[14,130430,130431],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[40,130433],{"style":126409,"src":130434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130436,130437],{},"解决方案：",[14,130439,130440],{},"①可以为父亲元素定义上边距",[120,130442,130443],{"className":126553,"code":130389,"language":126555,"meta":42,"style":42},[126,130444,130445,130449,130455,130469],{"__ignoreMap":42},[129,130446,130447],{"class":131,"line":132},[129,130448,130396],{"class":198},[129,130450,130451,130453],{"class":131,"line":51},[129,130452,130401],{"class":1977},[129,130454,15587],{"class":139},[129,130456,130457,130459,130461,130463,130465,130467],{"class":131,"line":1194},[129,130458,70471],{"class":188},[129,130460,51438],{"class":139},[129,130462,331],{"class":188},[129,130464,51557],{"class":188},[129,130466,130416],{"class":139},[129,130468,130419],{"class":198},[129,130470,130471],{"class":131,"line":1209},[129,130472,1579],{"class":139},[14,130474,130475],{},"②可以为父亲元素定义上内边距",[14,130477,130478],{},"③可以为父亲元素添加overflow:hidden",[40,130480],{"style":126409,"src":130481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[120,130483,130484],{"className":126553,"code":130389,"language":126555,"meta":42,"style":42},[126,130485,130486,130490,130496,130510],{"__ignoreMap":42},[129,130487,130488],{"class":131,"line":132},[129,130489,130396],{"class":198},[129,130491,130492,130494],{"class":131,"line":51},[129,130493,130401],{"class":1977},[129,130495,15587],{"class":139},[129,130497,130498,130500,130502,130504,130506,130508],{"class":131,"line":1194},[129,130499,70471],{"class":188},[129,130501,51438],{"class":139},[129,130503,331],{"class":188},[129,130505,51557],{"class":188},[129,130507,130416],{"class":139},[129,130509,130419],{"class":198},[129,130511,130512],{"class":131,"line":1209},[129,130513,1579],{"class":139},[40,130515],{"style":126409,"src":130516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130518,130519],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130521,130522],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[100,130524,130526],{"id":130525},"_914-清除内外边距","9.1.4 清除内外边距",[14,130528,130529],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[120,130531,130532],{"className":126553,"code":130389,"language":126555,"meta":42,"style":42},[126,130533,130534,130538,130544,130558],{"__ignoreMap":42},[129,130535,130536],{"class":131,"line":132},[129,130537,130396],{"class":198},[129,130539,130540,130542],{"class":131,"line":51},[129,130541,130401],{"class":1977},[129,130543,15587],{"class":139},[129,130545,130546,130548,130550,130552,130554,130556],{"class":131,"line":1194},[129,130547,70471],{"class":188},[129,130549,51438],{"class":139},[129,130551,331],{"class":188},[129,130553,51557],{"class":188},[129,130555,130416],{"class":139},[129,130557,130419],{"class":198},[129,130559,130560],{"class":131,"line":1209},[129,130561,1579],{"class":139},[14,130563,130564],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[100,130566,130568],{"id":130567},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1146,130570,130571,130574,130577,130580,130583,130586],{},[86,130572,130573],{},"文件→打开 ：可以打开我们要测量的图片",[86,130575,130576],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[86,130578,130579],{},"右击标尺，把里面的单位改为像素",[86,130581,130582],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[86,130584,130585],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[86,130587,130588],{},"用选区拖动 可以测量大小",[40,130590],{"style":126409,"src":130591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1146,130593,130594,130597],{},[86,130595,130596],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[86,130598,130599],{},"吸管取色工具",[40,130601],{"style":126409,"src":130602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[100,130604,130606],{"id":130605},"_916-案例","9.1.6 案例",[83,130608,130609],{},[86,130610,130611],{},"小米商品",[40,130613],{"style":126409,"src":130614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[120,130616,130617],{"className":126553,"code":130389,"language":126555,"meta":42,"style":42},[126,130618,130619,130623,130629,130643],{"__ignoreMap":42},[129,130620,130621],{"class":131,"line":132},[129,130622,130396],{"class":198},[129,130624,130625,130627],{"class":131,"line":51},[129,130626,130401],{"class":1977},[129,130628,15587],{"class":139},[129,130630,130631,130633,130635,130637,130639,130641],{"class":131,"line":1194},[129,130632,70471],{"class":188},[129,130634,51438],{"class":139},[129,130636,331],{"class":188},[129,130638,51557],{"class":188},[129,130640,130416],{"class":139},[129,130642,130419],{"class":198},[129,130644,130645],{"class":131,"line":1209},[129,130646,1579],{"class":139},[83,130648,130649],{"start":51},[86,130650,130651],{},"快报模块",[40,130653],{"style":126409,"src":130654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[120,130656,130658],{"className":127300,"code":130657,"language":127302,"meta":42,"style":42},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[126,130659,130660,130665,130680,130685],{"__ignoreMap":42},[129,130661,130662],{"class":131,"line":132},[129,130663,130664],{"class":198},"\u003C!-- HTML 代码示例 -->\n",[129,130666,130667,130669,130671,130673,130675,130678],{"class":131,"line":51},[129,130668,1049],{"class":139},[129,130670,51612],{"class":51301},[129,130672,53487],{"class":1977},[129,130674,185],{"class":139},[129,130676,130677],{"class":244},"\"example\"",[129,130679,51308],{"class":139},[129,130681,130682],{"class":131,"line":1194},[129,130683,130684],{"class":139},"  示例内容\n",[129,130686,130687,130689,130691],{"class":131,"line":1209},[129,130688,51786],{"class":139},[129,130690,51612],{"class":51301},[129,130692,51308],{"class":139},[100,130694,130696],{"id":130695},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[83,130698,130699],{},[86,130700,130701],{},"圆角边框",[14,130703,130704],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[40,130706],{"style":126409,"src":130707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[120,130709,130711],{"className":126553,"code":130710,"language":126555,"meta":42,"style":42},"div {\n  border: 1px solid #ccc;\n}\n",[126,130712,130713,130719,130735],{"__ignoreMap":42},[129,130714,130715,130717],{"class":131,"line":132},[129,130716,51612],{"class":51301},[129,130718,15587],{"class":139},[129,130720,130721,130723,130725,130727,130729,130731,130733],{"class":131,"line":51},[129,130722,70897],{"class":188},[129,130724,51438],{"class":139},[129,130726,357],{"class":188},[129,130728,51493],{"class":135},[129,130730,51522],{"class":188},[129,130732,129945],{"class":188},[129,130734,1305],{"class":139},[129,130736,130737],{"class":131,"line":1194},[129,130738,1579],{"class":139},[14,130740,130741],{},"解释:",[1146,130743,130744,130747,130750,130753,130756],{},[86,130745,130746],{},"参数值可以为数值或百分比的形式",[86,130748,130749],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[86,130751,130752],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[86,130754,130755],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[86,130757,130758],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[83,130760,130761],{"start":51},[86,130762,130763],{},"盒子阴影",[120,130765,130767],{"className":126553,"code":130766,"language":126555,"meta":42,"style":42},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[126,130768,130769,130775,130812],{"__ignoreMap":42},[129,130770,130771,130773],{"class":131,"line":132},[129,130772,51612],{"class":51301},[129,130774,15587],{"class":139},[129,130776,130777,130780,130782,130784,130786,130788,130790,130792,130794,130796,130798,130800,130802,130804,130806,130808,130810],{"class":131,"line":51},[129,130778,130779],{"class":188},"  box-shadow",[129,130781,51438],{"class":139},[129,130783,331],{"class":188},[129,130785,14770],{"class":188},[129,130787,51493],{"class":135},[129,130789,2052],{"class":188},[129,130791,51493],{"class":135},[129,130793,78768],{"class":188},[129,130795,140],{"class":139},[129,130797,331],{"class":188},[129,130799,12450],{"class":139},[129,130801,331],{"class":188},[129,130803,12450],{"class":139},[129,130805,331],{"class":188},[129,130807,12450],{"class":139},[129,130809,86211],{"class":188},[129,130811,2733],{"class":139},[129,130813,130814],{"class":131,"line":1194},[129,130815,1579],{"class":139},[277,130817,130818,130826],{},[280,130819,130820],{},[283,130821,130822,130824],{},[286,130823,292],{"align":23751},[286,130825,27490],{"align":23751},[324,130827,130828,130836,130844,130852,130860,130868],{},[283,130829,130830,130833],{},[329,130831,130832],{"align":23751},"h-shadow",[329,130834,130835],{"align":23751},"必需,水平阴影的位置,允许负值",[283,130837,130838,130841],{},[329,130839,130840],{"align":23751},"v-shadow",[329,130842,130843],{"align":23751},"必需,垂直阴影的位置,允许负值",[283,130845,130846,130849],{},[329,130847,130848],{"align":23751},"blur",[329,130850,130851],{"align":23751},"可选,模糊距离,就是影子的虚实",[283,130853,130854,130857],{},[329,130855,130856],{"align":23751},"spread",[329,130858,130859],{"align":23751},"可选,阴影尺寸",[283,130861,130862,130865],{},[329,130863,130864],{"align":23751},"color",[329,130866,130867],{"align":23751},"可选,阴影的颜色",[283,130869,130870,130873],{},[329,130871,130872],{"align":23751},"inset",[329,130874,130875],{"align":23751},"可选,将外部阴影(outset)改为内部阴影",[83,130877,130878],{"start":1194},[86,130879,130880],{},"文字阴影",[120,130882,130884],{"className":126553,"code":130883,"language":126555,"meta":42,"style":42},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[126,130885,130886,130892,130931],{"__ignoreMap":42},[129,130887,130888,130890],{"class":131,"line":132},[129,130889,14],{"class":51301},[129,130891,15587],{"class":139},[129,130893,130894,130897,130899,130901,130903,130905,130907,130909,130911,130913,130915,130917,130919,130921,130923,130925,130927,130929],{"class":131,"line":51},[129,130895,130896],{"class":188},"  text-shadow",[129,130898,51438],{"class":139},[129,130900,357],{"class":188},[129,130902,51493],{"class":135},[129,130904,25119],{"class":188},[129,130906,51493],{"class":135},[129,130908,14770],{"class":188},[129,130910,51493],{"class":135},[129,130912,78768],{"class":188},[129,130914,140],{"class":139},[129,130916,331],{"class":188},[129,130918,12450],{"class":139},[129,130920,331],{"class":188},[129,130922,12450],{"class":139},[129,130924,331],{"class":188},[129,130926,12450],{"class":139},[129,130928,100522],{"class":188},[129,130930,2733],{"class":139},[129,130932,130933],{"class":131,"line":1194},[129,130934,1579],{"class":139},[277,130936,130937,130945],{},[280,130938,130939],{},[283,130940,130941,130943],{},[286,130942,292],{"align":23751},[286,130944,27490],{"align":23751},[324,130946,130947,130953,130960,130967],{},[283,130948,130949,130951],{},[329,130950,130832],{"align":23751},[329,130952,130835],{"align":23751},[283,130954,130955,130957],{},[329,130956,130840],{"align":23751},[329,130958,130959],{"align":23751},"必需,垂直阴影位置,允许负值",[283,130961,130962,130964],{},[329,130963,130848],{"align":23751},[329,130965,130966],{"align":23751},"可选,模糊的距离",[283,130968,130969,130971],{},[329,130970,130864],{"align":23751},[329,130972,130867],{"align":23751},[71,130974,130976],{"id":130975},"_92-浮动","9.2 浮动",[100,130978,130980],{"id":130979},"_921-浮动介绍","9.2.1 浮动介绍",[14,130982,130983],{},"在16.2中详细介绍",[100,130985,130987],{"id":130986},"_922-清除浮动","9.2.2 清除浮动",[83,130989,130990,130993],{},[86,130991,130992],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[86,130994,130995],{},"清除浮动的本质",[14,130997,130998],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131000,9040],{},[1146,131002,131003,131006,131009],{},[86,131004,131005],{},"如果父盒子本身有高度，则不需要清除浮动",[86,131007,131008],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[86,131010,131011],{},"父级有了高度，就不会影响下面的标准流了",[83,131013,131014],{"start":1194},[86,131015,131016],{},"清除浮动样式",[120,131018,131020],{"className":126553,"code":131019,"language":126555,"meta":42,"style":42},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[126,131021,131022,131029,131040,131044,131051,131061],{"__ignoreMap":42},[129,131023,131024,131027],{"class":131,"line":132},[129,131025,131026],{"class":1977},".left",[129,131028,15587],{"class":139},[129,131030,131031,131034,131036,131038],{"class":131,"line":51},[129,131032,131033],{"class":188},"  float",[129,131035,51438],{"class":139},[129,131037,23751],{"class":188},[129,131039,1305],{"class":139},[129,131041,131042],{"class":131,"line":1194},[129,131043,1579],{"class":139},[129,131045,131046,131049],{"class":131,"line":1209},[129,131047,131048],{"class":1977},".right",[129,131050,15587],{"class":139},[129,131052,131053,131055,131057,131059],{"class":131,"line":1215},[129,131054,131033],{"class":188},[129,131056,51438],{"class":139},[129,131058,72523],{"class":188},[129,131060,1305],{"class":139},[129,131062,131063],{"class":131,"line":1229},[129,131064,1579],{"class":139},[277,131066,131067,131075],{},[280,131068,131069],{},[283,131070,131071,131073],{},[286,131072,127017],{"align":23751},[286,131074,27490],{"align":23751},[324,131076,131077,131084,131091],{},[283,131078,131079,131081],{},[329,131080,23751],{"align":23751},[329,131082,131083],{"align":23751},"不允许左侧有浮动元素（清除左侧浮动的影响）",[283,131085,131086,131088],{},[329,131087,72523],{"align":23751},[329,131089,131090],{"align":23751},"不允许右侧有浮动元素（清除右侧浮动的影响）",[283,131092,131093,131096],{},[329,131094,131095],{"align":23751},"both",[329,131097,131098],{"align":23751},"同时清除左右侧浮动的影响",[14,131100,131101],{},"法一",[14,131103,131104],{},"额外标签法也称为隔墙法",[14,131106,131107],{},"使用方式：",[14,131109,131110],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[120,131112,131113],{"className":126553,"code":131019,"language":126555,"meta":42,"style":42},[126,131114,131115,131121,131131,131135,131141,131151],{"__ignoreMap":42},[129,131116,131117,131119],{"class":131,"line":132},[129,131118,131026],{"class":1977},[129,131120,15587],{"class":139},[129,131122,131123,131125,131127,131129],{"class":131,"line":51},[129,131124,131033],{"class":188},[129,131126,51438],{"class":139},[129,131128,23751],{"class":188},[129,131130,1305],{"class":139},[129,131132,131133],{"class":131,"line":1194},[129,131134,1579],{"class":139},[129,131136,131137,131139],{"class":131,"line":1209},[129,131138,131048],{"class":1977},[129,131140,15587],{"class":139},[129,131142,131143,131145,131147,131149],{"class":131,"line":1215},[129,131144,131033],{"class":188},[129,131146,51438],{"class":139},[129,131148,72523],{"class":188},[129,131150,1305],{"class":139},[129,131152,131153],{"class":131,"line":1229},[129,131154,1579],{"class":139},[14,131156,131157],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131159,131160],{},"优点： 通俗易懂，书写方便",[14,131162,131163],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131165,131166],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131168,131169],{},"法二",[14,131171,131172],{},"父级添加overflow属性",[120,131174,131175],{"className":126553,"code":131019,"language":126555,"meta":42,"style":42},[126,131176,131177,131183,131193,131197,131203,131213],{"__ignoreMap":42},[129,131178,131179,131181],{"class":131,"line":132},[129,131180,131026],{"class":1977},[129,131182,15587],{"class":139},[129,131184,131185,131187,131189,131191],{"class":131,"line":51},[129,131186,131033],{"class":188},[129,131188,51438],{"class":139},[129,131190,23751],{"class":188},[129,131192,1305],{"class":139},[129,131194,131195],{"class":131,"line":1194},[129,131196,1579],{"class":139},[129,131198,131199,131201],{"class":131,"line":1209},[129,131200,131048],{"class":1977},[129,131202,15587],{"class":139},[129,131204,131205,131207,131209,131211],{"class":131,"line":1215},[129,131206,131033],{"class":188},[129,131208,51438],{"class":139},[129,131210,72523],{"class":188},[129,131212,1305],{"class":139},[129,131214,131215],{"class":131,"line":1229},[129,131216,1579],{"class":139},[14,131218,131219],{},"overflow: hidden;",[14,131221,131222],{},"优点：代码简洁",[14,131224,131225],{},"缺点：无法显示溢出的部分",[14,131227,131228],{},"注意：是给父元素添加代码",[14,131230,131231],{},"法三",[14,131233,131234],{},"父级添加after伪元素",[14,131236,131237,131240],{},[131238,131239],"after",{}," 方式是额外标签法的升级版",[14,131242,131243],{},"使用的时候复制就可以",[120,131245,131246],{"className":126553,"code":131019,"language":126555,"meta":42,"style":42},[126,131247,131248,131254,131264,131268,131274,131284],{"__ignoreMap":42},[129,131249,131250,131252],{"class":131,"line":132},[129,131251,131026],{"class":1977},[129,131253,15587],{"class":139},[129,131255,131256,131258,131260,131262],{"class":131,"line":51},[129,131257,131033],{"class":188},[129,131259,51438],{"class":139},[129,131261,23751],{"class":188},[129,131263,1305],{"class":139},[129,131265,131266],{"class":131,"line":1194},[129,131267,1579],{"class":139},[129,131269,131270,131272],{"class":131,"line":1209},[129,131271,131048],{"class":1977},[129,131273,15587],{"class":139},[129,131275,131276,131278,131280,131282],{"class":131,"line":1215},[129,131277,131033],{"class":188},[129,131279,51438],{"class":139},[129,131281,72523],{"class":188},[129,131283,1305],{"class":139},[129,131285,131286],{"class":131,"line":1229},[129,131287,1579],{"class":139},[14,131289,131290],{},"优点：没有增加标签，结构更简单",[14,131292,131293],{},"缺点：照顾低版本浏览器",[14,131295,131296],{},"代表网站： 百度、淘宝网、网易等",[14,131298,131299],{},"法四",[14,131301,131302],{},"父级添加双伪元素",[120,131304,131305],{"className":126553,"code":131019,"language":126555,"meta":42,"style":42},[126,131306,131307,131313,131323,131327,131333,131343],{"__ignoreMap":42},[129,131308,131309,131311],{"class":131,"line":132},[129,131310,131026],{"class":1977},[129,131312,15587],{"class":139},[129,131314,131315,131317,131319,131321],{"class":131,"line":51},[129,131316,131033],{"class":188},[129,131318,51438],{"class":139},[129,131320,23751],{"class":188},[129,131322,1305],{"class":139},[129,131324,131325],{"class":131,"line":1194},[129,131326,1579],{"class":139},[129,131328,131329,131331],{"class":131,"line":1209},[129,131330,131048],{"class":1977},[129,131332,15587],{"class":139},[129,131334,131335,131337,131339,131341],{"class":131,"line":1215},[129,131336,131033],{"class":188},[129,131338,51438],{"class":139},[129,131340,72523],{"class":188},[129,131342,1305],{"class":139},[129,131344,131345],{"class":131,"line":1229},[129,131346,1579],{"class":139},[14,131348,131349],{},"优点：代码更简洁",[14,131351,131293],{},[14,131353,131354],{},"代表网站：小米、腾讯等",[71,131356,131358],{"id":131357},"_93-ps切图","9.3 PS切图",[100,131360,131362],{"id":131361},"_931-常见图片格式","9.3.1 常见图片格式",[277,131364,131365,131375],{},[280,131366,131367],{},[283,131368,131369,131372],{},[286,131370,131371],{"align":23751},"jpg图像格式",[286,131373,131374],{"align":23751},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[324,131376,131377,131385,131393],{},[283,131378,131379,131382],{},[329,131380,131381],{"align":23751},"gif图像格式",[329,131383,131384],{"align":23751},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[283,131386,131387,131390],{},[329,131388,131389],{"align":23751},"png图像格式",[329,131391,131392],{"align":23751},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[283,131394,131395,131398],{},[329,131396,131397],{"align":23751},"PSD图像格式",[329,131399,131400],{"align":23751},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[100,131402,131404],{"id":131403},"_932-图层切图","9.3.2 图层切图",[14,131406,131407],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131409,131410],{},"按住shift选中两个图层->图层菜单->合并图层",[100,131412,131414],{"id":131413},"_933-切片切图","9.3.3 切片切图",[1146,131416,131417,131420],{},[86,131418,131419],{},"利用切片工具手动划出",[86,131421,131422],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[100,131424,131426],{"id":131425},"_934-切图步骤","9.3.4 切图步骤",[14,131428,131429],{},"用切片工具选中：",[40,131431],{"style":126409,"src":131432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131434,131435],{},"文件 -> 导出",[40,131437],{"style":126409,"src":131438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5141,131440,131441],{},"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":42,"searchDepth":51,"depth":51,"links":131443},[131444,131453,131457],{"id":129880,"depth":51,"text":129881,"children":131445},[131446,131447,131448,131449,131450,131451,131452],{"id":129905,"depth":1194,"text":129906},{"id":130196,"depth":1194,"text":130197},{"id":130325,"depth":1194,"text":130326},{"id":130525,"depth":1194,"text":130526},{"id":130567,"depth":1194,"text":130568},{"id":130605,"depth":1194,"text":130606},{"id":130695,"depth":1194,"text":130696},{"id":130975,"depth":51,"text":130976,"children":131454},[131455,131456],{"id":130979,"depth":1194,"text":130980},{"id":130986,"depth":1194,"text":130987},{"id":131357,"depth":51,"text":131358,"children":131458},[131459,131460,131461,131462],{"id":131361,"depth":1194,"text":131362},{"id":131403,"depth":1194,"text":131404},{"id":131413,"depth":1194,"text":131414},{"id":131425,"depth":1194,"text":131426},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129872,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131469,"title":131470,"body":131471,"description":53,"extension":54,"meta":132112,"navigation":56,"path":132113,"seo":132114,"stem":132115,"__hash__":132116},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131472,"toc":132100},[131473,131476,131480,131506,131540,131544,131548,131551,131593,131600,131610,131618,131620,131623,131626,131629,131636,131650,131654,131657,131686,131690,131693,131707,131711,131714,131742,131746,131749,131775,131779,131784,131817,131822,131850,131854,131871,131917,131922,131966,131983,132090,132098],[10,131474,131470],{"id":131475},"_10-css规范与学成在线案例",[71,131477,131479],{"id":131478},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[83,131481,131482,131488,131494,131500],{},[86,131483,131484,131487],{},[289,131485,131486],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[86,131489,131490,131493],{},[289,131491,131492],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[86,131495,131496,131499],{},[289,131497,131498],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[86,131501,131502,131505],{},[289,131503,131504],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[120,131507,131508],{"className":126553,"code":129917,"language":126555,"meta":42,"style":42},[126,131509,131510,131514,131520,131536],{"__ignoreMap":42},[129,131511,131512],{"class":131,"line":132},[129,131513,129924],{"class":198},[129,131515,131516,131518],{"class":131,"line":51},[129,131517,51612],{"class":51301},[129,131519,15587],{"class":139},[129,131521,131522,131524,131526,131528,131530,131532,131534],{"class":131,"line":1194},[129,131523,70897],{"class":188},[129,131525,51438],{"class":139},[129,131527,357],{"class":188},[129,131529,51493],{"class":135},[129,131531,51522],{"class":188},[129,131533,129945],{"class":188},[129,131535,1305],{"class":139},[129,131537,131538],{"class":131,"line":1209},[129,131539,1579],{"class":139},[71,131541,131543],{"id":131542},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[100,131545,131547],{"id":131546},"_1021-header头部制作","10.2.1 header头部制作",[40,131549],{"style":126409,"src":131550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1146,131552,131553,131560,131567,131573,131580,131587],{},[86,131554,131555,131556,131559],{},"1号是版心盒子 ",[289,131557,131558],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[86,131561,131562,131563,131566],{},"版心盒子 里面包含 2号盒子 ",[289,131564,131565],{},"logo"," 图标",[86,131568,131569,131570,131572],{},"版心盒子 里面包含 3号盒子 ",[289,131571,53714],{}," 导航栏",[86,131574,131575,131576,131579],{},"版心盒子 里面包含 4号盒子 ",[289,131577,131578],{},"search"," 搜索框",[86,131581,131582,131583,131586],{},"版心盒子 里面包含 5号盒子 ",[289,131584,131585],{},"user"," 个人信息",[86,131588,131589,131590],{},"注意，要求里面的 ",[289,131591,131592],{},"4个子盒子 必须都浮动",[83,131594,131595],{},[86,131596,131597],{},[289,131598,131599],{},"导航栏注意点:",[14,131601,131602,131603,131606,131607],{},"实际开发中， ",[289,131604,131605],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[289,131608,131609],{},"用 li 包含链接(li+a)的做法",[1146,131611,131612,131615],{},[86,131613,131614],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[86,131616,131617],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131619,9040],{},[14,131621,131622],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131624,131625],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131627,131628],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[83,131630,131631],{"start":51},[86,131632,131633],{},[289,131634,131635],{},"4号盒子search的细节：",[1146,131637,131638,131641,131644],{},[86,131639,131640],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[86,131642,131643],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[86,131645,131646,131649],{},[126,131647,131648],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[100,131651,131653],{"id":131652},"_1022-banner制作","10.2.2 banner制作",[40,131655],{"style":126409,"src":131656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1146,131658,131659,131666,131672,131679],{},[86,131660,131661,131662,131665],{},"1号盒子是通栏的大盒子 ",[289,131663,131664],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[86,131667,131668,131669,131671],{},"2号盒子是版心 ",[289,131670,934],{}," ， 要水平居中对齐",[86,131673,131674,131675,131678],{},"3号盒子版心内，左对齐 ",[289,131676,131677],{},"subnav"," 侧导航栏",[86,131680,131681,131682,131685],{},"4号盒子版心内，右对齐 ",[289,131683,131684],{},"course"," 课程",[100,131687,131689],{"id":131688},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[40,131691],{"style":126409,"src":131692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1146,131694,131695,131698,131701,131704],{},[86,131696,131697],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[86,131699,131700],{},"1号盒子是标题 H3 左侧浮动",[86,131702,131703],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[86,131705,131706],{},"3号盒子 右浮动 mod 修改",[100,131708,131710],{"id":131709},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[40,131712],{"style":126409,"src":131713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1146,131715,131716,131722,131729,131736,131739],{},[86,131717,131718,131719,131721],{},"1号盒子为最大的盒子 ",[289,131720,53715],{}," 版心水平居中对齐",[86,131723,131724,131725,131728],{},"2号盒子为上面部分 ",[289,131726,131727],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[86,131730,131731,131732,131735],{},"3号盒子为底下部分 ",[289,131733,131734],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[86,131737,131738],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[86,131740,131741],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[100,131743,131745],{"id":131744},"_1025-底部模块制作","10.2.5 底部模块制作",[40,131747],{"style":126409,"src":131748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1146,131750,131751,131758,131761,131768],{},[86,131752,131753,131754,131757],{},"1号盒子通栏大盒子 底部 ",[289,131755,131756],{},"footer"," 给高度 底色是白色",[86,131759,131760],{},"2号盒子版心水平居中",[86,131762,131763,131764,131767],{},"3号盒子版权 ",[289,131765,131766],{},"copyright"," 左对齐",[86,131769,131770,131771,131774],{},"4号盒子 链接组 ",[289,131772,131773],{},"links"," 右对齐",[100,131776,131778],{"id":131777},"_1026-代码模块","10.2.6 代码模块",[83,131780,131781],{},[86,131782,131783],{},"html部分",[120,131785,131787],{"className":127300,"code":131786,"language":127302,"meta":42,"style":42},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[126,131788,131789],{"__ignoreMap":42},[129,131790,131791,131793,131795,131797,131799,131802,131805,131807,131810,131813,131815],{"class":131,"line":132},[129,131792,1049],{"class":139},[129,131794,20],{"class":51301},[129,131796,61058],{"class":1977},[129,131798,185],{"class":139},[129,131800,131801],{"class":244},"\"https:\u002F\u002Fexample.com\"",[129,131803,131804],{"class":1977}," target",[129,131806,185],{"class":139},[129,131808,131809],{"class":244},"\"_blank\"",[129,131811,131812],{"class":139},">链接文字\u003C\u002F",[129,131814,20],{"class":51301},[129,131816,51308],{"class":139},[83,131818,131819],{"start":51},[86,131820,131821],{},"css部分",[120,131823,131824],{"className":127300,"code":131786,"language":127302,"meta":42,"style":42},[126,131825,131826],{"__ignoreMap":42},[129,131827,131828,131830,131832,131834,131836,131838,131840,131842,131844,131846,131848],{"class":131,"line":132},[129,131829,1049],{"class":139},[129,131831,20],{"class":51301},[129,131833,61058],{"class":1977},[129,131835,185],{"class":139},[129,131837,131801],{"class":244},[129,131839,131804],{"class":1977},[129,131841,185],{"class":139},[129,131843,131809],{"class":244},[129,131845,131812],{"class":139},[129,131847,20],{"class":51301},[129,131849,51308],{"class":139},[100,131851,131853],{"id":131852},"_1027-收获","10.2.7 收获",[83,131855,131856,131859,131862,131865,131868],{},[86,131857,131858],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[86,131860,131861],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[86,131863,131864],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[86,131866,131867],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[86,131869,131870],{},"遗忘代码",[120,131872,131874],{"className":126553,"code":131873,"language":126555,"meta":42,"style":42},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[126,131875,131876,131898,131903,131913],{"__ignoreMap":42},[129,131877,131878,131880,131882,131884,131886,131888,131890,131892,131894,131896],{"class":131,"line":132},[129,131879,51612],{"class":51301},[129,131881,12450],{"class":139},[129,131883,14],{"class":51301},[129,131885,12450],{"class":139},[129,131887,10],{"class":51301},[129,131889,12450],{"class":139},[129,131891,1146],{"class":51301},[129,131893,12450],{"class":139},[129,131895,86],{"class":51301},[129,131897,15587],{"class":139},[129,131899,131900],{"class":131,"line":51},[129,131901,131902],{"class":198},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[129,131904,131905,131907,131909,131911],{"class":131,"line":1194},[129,131906,128169],{"class":188},[129,131908,51438],{"class":139},[129,131910,60870],{"class":188},[129,131912,1305],{"class":139},[129,131914,131915],{"class":131,"line":1209},[129,131916,1579],{"class":139},[83,131918,131919],{"start":1229},[86,131920,131921],{},"html引css的程序",[120,131923,131924],{"className":126553,"code":131873,"language":126555,"meta":42,"style":42},[126,131925,131926,131948,131952,131962],{"__ignoreMap":42},[129,131927,131928,131930,131932,131934,131936,131938,131940,131942,131944,131946],{"class":131,"line":132},[129,131929,51612],{"class":51301},[129,131931,12450],{"class":139},[129,131933,14],{"class":51301},[129,131935,12450],{"class":139},[129,131937,10],{"class":51301},[129,131939,12450],{"class":139},[129,131941,1146],{"class":51301},[129,131943,12450],{"class":139},[129,131945,86],{"class":51301},[129,131947,15587],{"class":139},[129,131949,131950],{"class":131,"line":51},[129,131951,131902],{"class":198},[129,131953,131954,131956,131958,131960],{"class":131,"line":1194},[129,131955,128169],{"class":188},[129,131957,51438],{"class":139},[129,131959,60870],{"class":188},[129,131961,1305],{"class":139},[129,131963,131964],{"class":131,"line":1209},[129,131965,1579],{"class":139},[83,131967,131968,131971,131974,131977,131980],{"start":1235},[86,131969,131970],{},"浮动的盒子不会有外边距合并问题",[86,131972,131973],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[86,131975,131976],{},"ctrl+g快速定位行；shift+alt多个光标",[86,131978,131979],{},"学习上方各个模块的选择器起名方法，以后就这样用",[86,131981,131982],{},"在写选择器时尽量写全一些，例如",[120,131984,131986],{"className":126553,"code":131985,"language":126555,"meta":42,"style":42},"\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",[126,131987,131988,131993,132009,132014,132029,132034,132049,132054,132069,132074],{"__ignoreMap":42},[129,131989,131990],{"class":131,"line":132},[129,131991,131992],{"class":198},"\u002F* 静态定位（默认） *\u002F\n",[129,131994,131995,131998,132000,132002,132004,132007],{"class":131,"line":51},[129,131996,131997],{"class":1977},".static",[129,131999,79808],{"class":139},[129,132001,128913],{"class":188},[129,132003,51438],{"class":139},[129,132005,132006],{"class":188},"static",[129,132008,129483],{"class":139},[129,132010,132011],{"class":131,"line":1194},[129,132012,132013],{"class":198},"\u002F* 相对定位 *\u002F\n",[129,132015,132016,132019,132021,132023,132025,132027],{"class":131,"line":1209},[129,132017,132018],{"class":1977},".relative",[129,132020,79808],{"class":139},[129,132022,128913],{"class":188},[129,132024,51438],{"class":139},[129,132026,54765],{"class":188},[129,132028,129483],{"class":139},[129,132030,132031],{"class":131,"line":1215},[129,132032,132033],{"class":198},"\u002F* 绝对定位 *\u002F\n",[129,132035,132036,132039,132041,132043,132045,132047],{"class":131,"line":1229},[129,132037,132038],{"class":1977},".absolute",[129,132040,79808],{"class":139},[129,132042,128913],{"class":188},[129,132044,51438],{"class":139},[129,132046,54832],{"class":188},[129,132048,129483],{"class":139},[129,132050,132051],{"class":131,"line":1235},[129,132052,132053],{"class":198},"\u002F* 固定定位 *\u002F\n",[129,132055,132056,132059,132061,132063,132065,132067],{"class":131,"line":1326},[129,132057,132058],{"class":1977},".fixed",[129,132060,79808],{"class":139},[129,132062,128913],{"class":188},[129,132064,51438],{"class":139},[129,132066,86234],{"class":188},[129,132068,129483],{"class":139},[129,132070,132071],{"class":131,"line":1332},[129,132072,132073],{"class":198},"\u002F* 粘性定位 *\u002F\n",[129,132075,132076,132079,132081,132083,132085,132088],{"class":131,"line":1344},[129,132077,132078],{"class":1977},".sticky",[129,132080,79808],{"class":139},[129,132082,128913],{"class":188},[129,132084,51438],{"class":139},[129,132086,132087],{"class":188},"sticky",[129,132089,129483],{"class":139},[83,132091,132092,132095],{"start":1631},[86,132093,132094],{},"一定要用好注释",[86,132096,132097],{},"浮动的盒子不会有外边距合并的问题",[5141,132099,131441],{},{"title":42,"searchDepth":51,"depth":51,"links":132101},[132102,132103],{"id":131478,"depth":51,"text":131479},{"id":131542,"depth":51,"text":131543,"children":132104},[132105,132106,132107,132108,132109,132110,132111],{"id":131546,"depth":1194,"text":131547},{"id":131652,"depth":1194,"text":131653},{"id":131688,"depth":1194,"text":131689},{"id":131709,"depth":1194,"text":131710},{"id":131744,"depth":1194,"text":131745},{"id":131777,"depth":1194,"text":131778},{"id":131852,"depth":1194,"text":131853},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131470,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132118,"title":132119,"body":132120,"description":53,"extension":54,"meta":133606,"navigation":56,"path":133607,"seo":133608,"stem":133609,"__hash__":133610},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132121,"toc":133598},[132122,132125,132129,132133,132144,132148,132165,132209,132242,132245,132262,132265,132268,132312,132316,132320,132323,132326,132330,132333,132344,132407,132448,132451,132466,132520,132528,132531,132542,132596,132622,132625,132638,132692,132724,132778,132801,132855,132858,132861,132868,132922,132943,132997,133000,133003,133088,133096,133153,133176,133180,133183,133201,133205,133224,133278,133316,133320,133323,133326,133348,133352,133360,133363,133368,133379,133382,133386,133400,133444,133447,133451,133454,133459,133485,133490,133567,133570,133574,133577,133580,133583,133586,133589,133592,133595],[10,132123,132119],{"id":132124},"_11-传统布局与定位体系",[71,132126,132128],{"id":132127},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[100,132130,132132],{"id":132131},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1146,132134,132135,132138,132141],{},[86,132136,132137],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[86,132139,132140],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[86,132142,132143],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[100,132145,132147],{"id":132146},"_1112-浮动","11.1.2 浮动",[1146,132149,132150,132153,132156,132159,132162],{},[86,132151,132152],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[86,132154,132155],{},"浮动可以改变元素标签默认的排列方式",[86,132157,132158],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[86,132160,132161],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[86,132163,132164],{},"在使用行内块转换时盒子之间是有空隙的",[120,132166,132167],{"className":126553,"code":131019,"language":126555,"meta":42,"style":42},[126,132168,132169,132175,132185,132189,132195,132205],{"__ignoreMap":42},[129,132170,132171,132173],{"class":131,"line":132},[129,132172,131026],{"class":1977},[129,132174,15587],{"class":139},[129,132176,132177,132179,132181,132183],{"class":131,"line":51},[129,132178,131033],{"class":188},[129,132180,51438],{"class":139},[129,132182,23751],{"class":188},[129,132184,1305],{"class":139},[129,132186,132187],{"class":131,"line":1194},[129,132188,1579],{"class":139},[129,132190,132191,132193],{"class":131,"line":1209},[129,132192,131048],{"class":1977},[129,132194,15587],{"class":139},[129,132196,132197,132199,132201,132203],{"class":131,"line":1215},[129,132198,131033],{"class":188},[129,132200,51438],{"class":139},[129,132202,72523],{"class":188},[129,132204,1305],{"class":139},[129,132206,132207],{"class":131,"line":1229},[129,132208,1579],{"class":139},[277,132210,132211,132219],{},[280,132212,132213],{},[283,132214,132215,132217],{},[286,132216,127017],{"align":23751},[286,132218,27490],{"align":23751},[324,132220,132221,132228,132235],{},[283,132222,132223,132225],{},[329,132224,54738],{"align":23751},[329,132226,132227],{"align":23751},"元素不浮动（默认值）",[283,132229,132230,132232],{},[329,132231,23751],{"align":23751},[329,132233,132234],{"align":23751},"元素向左浮动",[283,132236,132237,132239],{},[329,132238,72523],{"align":23751},[329,132240,132241],{"align":23751},"元素向右浮动",[14,132243,132244],{},"浮动重点：",[1146,132246,132247,132250,132253,132256,132259],{},[86,132248,132249],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[86,132251,132252],{},"浮动的元素会一行内显示并且元素顶部对齐",[86,132254,132255],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[86,132257,132258],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[86,132260,132261],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132263,132264],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132266,132267],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[120,132269,132270],{"className":126553,"code":131019,"language":126555,"meta":42,"style":42},[126,132271,132272,132278,132288,132292,132298,132308],{"__ignoreMap":42},[129,132273,132274,132276],{"class":131,"line":132},[129,132275,131026],{"class":1977},[129,132277,15587],{"class":139},[129,132279,132280,132282,132284,132286],{"class":131,"line":51},[129,132281,131033],{"class":188},[129,132283,51438],{"class":139},[129,132285,23751],{"class":188},[129,132287,1305],{"class":139},[129,132289,132290],{"class":131,"line":1194},[129,132291,1579],{"class":139},[129,132293,132294,132296],{"class":131,"line":1209},[129,132295,131048],{"class":1977},[129,132297,15587],{"class":139},[129,132299,132300,132302,132304,132306],{"class":131,"line":1215},[129,132301,131033],{"class":188},[129,132303,51438],{"class":139},[129,132305,72523],{"class":188},[129,132307,1305],{"class":139},[129,132309,132310],{"class":131,"line":1229},[129,132311,1579],{"class":139},[100,132313,132315],{"id":132314},"_1113-定位","11.1.3 定位",[22013,132317,132319],{"id":132318},"_11131-使用场景","11.1.3.1 使用场景",[14,132321,132322],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132324,132325],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22013,132327,132329],{"id":132328},"_11132-定位组成","11.1.3.2 定位组成",[14,132331,132332],{},"定位 = 定位模式 + 边偏移",[83,132334,132335],{},[86,132336,132337,132340,132341],{},[289,132338,132339],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[289,132342,132343],{},"定位模式",[120,132345,132347],{"className":126553,"code":132346,"language":126555,"meta":42,"style":42},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[126,132348,132349,132355,132369,132386,132403],{"__ignoreMap":42},[129,132350,132351,132353],{"class":131,"line":132},[129,132352,130401],{"class":1977},[129,132354,15587],{"class":139},[129,132356,132357,132360,132362,132364,132366],{"class":131,"line":51},[129,132358,132359],{"class":188},"  position",[129,132361,51438],{"class":139},[129,132363,54765],{"class":188},[129,132365,130416],{"class":139},[129,132367,132368],{"class":198},"\u002F* 定位模式 *\u002F\n",[129,132370,132371,132374,132376,132378,132380,132383],{"class":131,"line":1194},[129,132372,132373],{"class":188},"  top",[129,132375,51438],{"class":139},[129,132377,585],{"class":188},[129,132379,51493],{"class":135},[129,132381,132382],{"class":139},";           ",[129,132384,132385],{"class":198},"\u002F* 边偏移：上 *\u002F\n",[129,132387,132388,132391,132393,132395,132397,132400],{"class":131,"line":1209},[129,132389,132390],{"class":188},"  left",[129,132392,51438],{"class":139},[129,132394,839],{"class":188},[129,132396,51493],{"class":135},[129,132398,132399],{"class":139},";          ",[129,132401,132402],{"class":198},"\u002F* 边偏移：左 *\u002F\n",[129,132404,132405],{"class":131,"line":1215},[129,132406,1579],{"class":139},[277,132408,132409,132418],{},[280,132410,132411],{},[283,132412,132413,132415],{},[286,132414,292],{"align":23751},[286,132416,132417],{"align":23751},"语义",[324,132419,132420,132427,132434,132441],{},[283,132421,132422,132424],{},[329,132423,132006],{"align":23751},[329,132425,132426],{"align":23751},"静态定位",[283,132428,132429,132431],{},[329,132430,54765],{"align":23751},[329,132432,132433],{"align":23751},"相对定位",[283,132435,132436,132438],{},[329,132437,54832],{"align":23751},[329,132439,132440],{"align":23751},"绝对定位",[283,132442,132443,132445],{},[329,132444,86234],{"align":23751},[329,132446,132447],{"align":23751},"固定定位",[14,132449,132450],{},"（1）静态定位：",[1146,132452,132453,132464],{},[86,132454,132455,132456,132459,132460,132463],{},"静态定位是元素的 ",[289,132457,132458],{},"默认定位方式"," ， ",[289,132461,132462],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[86,132465,5196],{},[120,132467,132468],{"className":126553,"code":132346,"language":126555,"meta":42,"style":42},[126,132469,132470,132476,132488,132502,132516],{"__ignoreMap":42},[129,132471,132472,132474],{"class":131,"line":132},[129,132473,130401],{"class":1977},[129,132475,15587],{"class":139},[129,132477,132478,132480,132482,132484,132486],{"class":131,"line":51},[129,132479,132359],{"class":188},[129,132481,51438],{"class":139},[129,132483,54765],{"class":188},[129,132485,130416],{"class":139},[129,132487,132368],{"class":198},[129,132489,132490,132492,132494,132496,132498,132500],{"class":131,"line":1194},[129,132491,132373],{"class":188},[129,132493,51438],{"class":139},[129,132495,585],{"class":188},[129,132497,51493],{"class":135},[129,132499,132382],{"class":139},[129,132501,132385],{"class":198},[129,132503,132504,132506,132508,132510,132512,132514],{"class":131,"line":1209},[129,132505,132390],{"class":188},[129,132507,51438],{"class":139},[129,132509,839],{"class":188},[129,132511,51493],{"class":135},[129,132513,132399],{"class":139},[129,132515,132402],{"class":198},[129,132517,132518],{"class":131,"line":1215},[129,132519,1579],{"class":139},[1146,132521,132522,132525],{},[86,132523,132524],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[86,132526,132527],{},"静态定位在布局时我们几乎不用的",[14,132529,132530],{},"（2）相对定位",[1146,132532,132533,132540],{},[86,132534,132535,132536,132539],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[289,132537,132538],{},"原来的位置"," 来说的（自恋型）",[86,132541,5196],{},[120,132543,132544],{"className":126553,"code":132346,"language":126555,"meta":42,"style":42},[126,132545,132546,132552,132564,132578,132592],{"__ignoreMap":42},[129,132547,132548,132550],{"class":131,"line":132},[129,132549,130401],{"class":1977},[129,132551,15587],{"class":139},[129,132553,132554,132556,132558,132560,132562],{"class":131,"line":51},[129,132555,132359],{"class":188},[129,132557,51438],{"class":139},[129,132559,54765],{"class":188},[129,132561,130416],{"class":139},[129,132563,132368],{"class":198},[129,132565,132566,132568,132570,132572,132574,132576],{"class":131,"line":1194},[129,132567,132373],{"class":188},[129,132569,51438],{"class":139},[129,132571,585],{"class":188},[129,132573,51493],{"class":135},[129,132575,132382],{"class":139},[129,132577,132385],{"class":198},[129,132579,132580,132582,132584,132586,132588,132590],{"class":131,"line":1209},[129,132581,132390],{"class":188},[129,132583,51438],{"class":139},[129,132585,839],{"class":188},[129,132587,51493],{"class":135},[129,132589,132399],{"class":139},[129,132591,132402],{"class":198},[129,132593,132594],{"class":131,"line":1215},[129,132595,1579],{"class":139},[1146,132597,132598],{},[86,132599,132600,132601,132603,132604,132606,132607,132610,132611,132614,132615,132617,132618,132621],{},"相对定位的特点：",[53717,132602],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53717,132605],{},"  ② ",[289,132608,132609],{},"原来"," 在标准流的 ",[289,132612,132613],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53717,132616],{},"  ③因此， ",[289,132619,132620],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132623,132624],{},"（3）绝对定位",[1146,132626,132627,132636],{},[86,132628,132629,132631,132632,132635],{},[289,132630,132440],{}," 是元素在移动位置的时候，是相对于它 ",[289,132633,132634],{},"祖先元素"," 来说的（拼爹型）",[86,132637,5196],{},[120,132639,132640],{"className":126553,"code":132346,"language":126555,"meta":42,"style":42},[126,132641,132642,132648,132660,132674,132688],{"__ignoreMap":42},[129,132643,132644,132646],{"class":131,"line":132},[129,132645,130401],{"class":1977},[129,132647,15587],{"class":139},[129,132649,132650,132652,132654,132656,132658],{"class":131,"line":51},[129,132651,132359],{"class":188},[129,132653,51438],{"class":139},[129,132655,54765],{"class":188},[129,132657,130416],{"class":139},[129,132659,132368],{"class":198},[129,132661,132662,132664,132666,132668,132670,132672],{"class":131,"line":1194},[129,132663,132373],{"class":188},[129,132665,51438],{"class":139},[129,132667,585],{"class":188},[129,132669,51493],{"class":135},[129,132671,132382],{"class":139},[129,132673,132385],{"class":198},[129,132675,132676,132678,132680,132682,132684,132686],{"class":131,"line":1209},[129,132677,132390],{"class":188},[129,132679,51438],{"class":139},[129,132681,839],{"class":188},[129,132683,51493],{"class":135},[129,132685,132399],{"class":139},[129,132687,132402],{"class":198},[129,132689,132690],{"class":131,"line":1215},[129,132691,1579],{"class":139},[1146,132693,132694,132709,132718,132721],{},[86,132695,132696,132697,132699,132700,132702,132703,132705,132706,132708],{},"绝对定位的特点：",[53717,132698],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53717,132701],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53717,132704],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53717,132707],{},"  (4)固定定位",[86,132710,132711,132713,132714,132717],{},[289,132712,132447],{}," 是元素 ",[289,132715,132716],{},"固定于浏览器可视区的位置"," 。（认死理型）",[86,132719,132720],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[86,132722,132723],{},"语法:",[120,132725,132726],{"className":126553,"code":132346,"language":126555,"meta":42,"style":42},[126,132727,132728,132734,132746,132760,132774],{"__ignoreMap":42},[129,132729,132730,132732],{"class":131,"line":132},[129,132731,130401],{"class":1977},[129,132733,15587],{"class":139},[129,132735,132736,132738,132740,132742,132744],{"class":131,"line":51},[129,132737,132359],{"class":188},[129,132739,51438],{"class":139},[129,132741,54765],{"class":188},[129,132743,130416],{"class":139},[129,132745,132368],{"class":198},[129,132747,132748,132750,132752,132754,132756,132758],{"class":131,"line":1194},[129,132749,132373],{"class":188},[129,132751,51438],{"class":139},[129,132753,585],{"class":188},[129,132755,51493],{"class":135},[129,132757,132382],{"class":139},[129,132759,132385],{"class":198},[129,132761,132762,132764,132766,132768,132770,132772],{"class":131,"line":1209},[129,132763,132390],{"class":188},[129,132765,51438],{"class":139},[129,132767,839],{"class":188},[129,132769,51493],{"class":135},[129,132771,132399],{"class":139},[129,132773,132402],{"class":198},[129,132775,132776],{"class":131,"line":1215},[129,132777,1579],{"class":139},[1146,132779,132780,132789],{},[86,132781,132782,132783,132785,132786,132788],{},"特点:",[53717,132784],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53717,132787],{},"  ②固定定位不再占有原先的位置,完全脱标",[86,132790,132791,132792,132794,132795,132797,132798,132800],{},"固定在版心位置的方法:",[53717,132793],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53717,132796],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53717,132799],{},"  实例：",[120,132802,132803],{"className":126553,"code":132346,"language":126555,"meta":42,"style":42},[126,132804,132805,132811,132823,132837,132851],{"__ignoreMap":42},[129,132806,132807,132809],{"class":131,"line":132},[129,132808,130401],{"class":1977},[129,132810,15587],{"class":139},[129,132812,132813,132815,132817,132819,132821],{"class":131,"line":51},[129,132814,132359],{"class":188},[129,132816,51438],{"class":139},[129,132818,54765],{"class":188},[129,132820,130416],{"class":139},[129,132822,132368],{"class":198},[129,132824,132825,132827,132829,132831,132833,132835],{"class":131,"line":1194},[129,132826,132373],{"class":188},[129,132828,51438],{"class":139},[129,132830,585],{"class":188},[129,132832,51493],{"class":135},[129,132834,132382],{"class":139},[129,132836,132385],{"class":198},[129,132838,132839,132841,132843,132845,132847,132849],{"class":131,"line":1209},[129,132840,132390],{"class":188},[129,132842,51438],{"class":139},[129,132844,839],{"class":188},[129,132846,51493],{"class":135},[129,132848,132399],{"class":139},[129,132850,132402],{"class":198},[129,132852,132853],{"class":131,"line":1215},[129,132854,1579],{"class":139},[40,132856],{"style":126409,"src":132857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132859,132860],{},"(5)粘性定位",[1146,132862,132863,132866],{},[86,132864,132865],{},"粘性定位可以被认为是相对定位和固定定位的混合",[86,132867,5196],{},[120,132869,132870],{"className":126553,"code":132346,"language":126555,"meta":42,"style":42},[126,132871,132872,132878,132890,132904,132918],{"__ignoreMap":42},[129,132873,132874,132876],{"class":131,"line":132},[129,132875,130401],{"class":1977},[129,132877,15587],{"class":139},[129,132879,132880,132882,132884,132886,132888],{"class":131,"line":51},[129,132881,132359],{"class":188},[129,132883,51438],{"class":139},[129,132885,54765],{"class":188},[129,132887,130416],{"class":139},[129,132889,132368],{"class":198},[129,132891,132892,132894,132896,132898,132900,132902],{"class":131,"line":1194},[129,132893,132373],{"class":188},[129,132895,51438],{"class":139},[129,132897,585],{"class":188},[129,132899,51493],{"class":135},[129,132901,132382],{"class":139},[129,132903,132385],{"class":198},[129,132905,132906,132908,132910,132912,132914,132916],{"class":131,"line":1209},[129,132907,132390],{"class":188},[129,132909,51438],{"class":139},[129,132911,839],{"class":188},[129,132913,51493],{"class":135},[129,132915,132399],{"class":139},[129,132917,132402],{"class":198},[129,132919,132920],{"class":131,"line":1215},[129,132921,1579],{"class":139},[1146,132923,132924],{},[86,132925,132926,132927,132929,132930,132932,132933,132935,132936,132939,132940,132942],{},"粘性定位的特点：",[53717,132928],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53717,132931],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53717,132934],{},"  ③必须添加 top 、left、right、bottom ",[289,132937,132938],{},"其中一个"," 才有效",[53717,132941],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[120,132944,132945],{"className":126553,"code":132346,"language":126555,"meta":42,"style":42},[126,132946,132947,132953,132965,132979,132993],{"__ignoreMap":42},[129,132948,132949,132951],{"class":131,"line":132},[129,132950,130401],{"class":1977},[129,132952,15587],{"class":139},[129,132954,132955,132957,132959,132961,132963],{"class":131,"line":51},[129,132956,132359],{"class":188},[129,132958,51438],{"class":139},[129,132960,54765],{"class":188},[129,132962,130416],{"class":139},[129,132964,132368],{"class":198},[129,132966,132967,132969,132971,132973,132975,132977],{"class":131,"line":1194},[129,132968,132373],{"class":188},[129,132970,51438],{"class":139},[129,132972,585],{"class":188},[129,132974,51493],{"class":135},[129,132976,132382],{"class":139},[129,132978,132385],{"class":198},[129,132980,132981,132983,132985,132987,132989,132991],{"class":131,"line":1209},[129,132982,132390],{"class":188},[129,132984,51438],{"class":139},[129,132986,839],{"class":188},[129,132988,51493],{"class":135},[129,132990,132399],{"class":139},[129,132992,132402],{"class":198},[129,132994,132995],{"class":131,"line":1215},[129,132996,1579],{"class":139},[40,132998],{"style":126409,"src":132999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133001,133002],{},"(6)总结",[277,133004,133005,133020],{},[280,133006,133007],{},[283,133008,133009,133011,133014,133017],{},[286,133010,132343],{"align":23751},[286,133012,133013],{"align":23751},"是否脱标",[286,133015,133016],{"align":23751},"移动位置",[286,133018,133019],{"align":23751},"是否常用",[324,133021,133022,133035,133049,133063,133076],{},[283,133023,133024,133027,133029,133032],{},[329,133025,133026],{"align":23751},"Static 静态定位",[329,133028,104679],{"align":23751},[329,133030,133031],{"align":23751},"不能使用边偏移",[329,133033,133034],{"align":23751},"很少",[283,133036,133037,133040,133043,133046],{},[329,133038,133039],{"align":23751},"Relative 相对定位",[329,133041,133042],{"align":23751},"否(占有位置)",[329,133044,133045],{"align":23751},"相对于自身位置移动",[329,133047,133048],{"align":23751},"基本单独使用",[283,133050,133051,133054,133057,133060],{},[329,133052,133053],{"align":23751},"Absolute 绝对定位",[329,133055,133056],{"align":23751},"是(不占有位置)",[329,133058,133059],{"align":23751},"带有定位的父级",[329,133061,133062],{"align":23751},"要和定位父级元素搭配使用",[283,133064,133065,133068,133070,133073],{},[329,133066,133067],{"align":23751},"Fixed 固定定位",[329,133069,133056],{"align":23751},[329,133071,133072],{"align":23751},"浏览器可视区",[329,133074,133075],{"align":23751},"单独使用,不需要父级",[283,133077,133078,133081,133083,133085],{},[329,133079,133080],{"align":23751},"Sticky 粘性定位",[329,133082,133042],{"align":23751},[329,133084,133072],{"align":23751},[329,133086,133087],{"align":23751},"当前阶段少",[83,133089,133090],{"start":51},[86,133091,133092,133095],{},[289,133093,133094],{},"边偏移"," 则决定了该元素的最终位置",[277,133097,133098,133109],{},[280,133099,133100],{},[283,133101,133102,133105,133107],{},[286,133103,133104],{"align":23751},"边偏移属性",[286,133106,27493],{"align":23751},[286,133108,27490],{"align":23751},[324,133110,133111,133122,133133,133143],{},[283,133112,133113,133116,133119],{},[329,133114,133115],{"align":23751},"top",[329,133117,133118],{"align":23751},"top: 80px;",[329,133120,133121],{"align":23751},"顶端偏移量，定义元素相对于父元素上边线的距离",[283,133123,133124,133127,133130],{},[329,133125,133126],{"align":23751},"bottom",[329,133128,133129],{"align":23751},"bottom: 80px ;",[329,133131,133132],{"align":23751},"底部偏移量，定义元素相对于其父元素下边线的距离",[283,133134,133135,133137,133140],{},[329,133136,23751],{"align":23751},[329,133138,133139],{"align":23751},"left: 80px ;",[329,133141,133142],{"align":23751},"左侧偏移量，定义元素相对于其父元素左边线的距离",[283,133144,133145,133147,133150],{},[329,133146,72523],{"align":23751},[329,133148,133149],{"align":23751},"right: 80px ;",[329,133151,133152],{"align":23751},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1146,133154,133155],{},[86,133156,9040,133157,133159,133160,133162,133163,133165,133166,133169,133170,133172,133173,133175],{},[53717,133158],{},"  ① ",[289,133161,133094],{}," 需要和 ",[289,133164,132343],{}," 联合使用， ",[289,133167,133168],{},"单独使用无效"," ；",[53717,133171],{},"  ②top和bottom不要同时使用",[53717,133174],{},"  ③left和right不要同时使用",[22013,133177,133179],{"id":133178},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133181,133182],{},"子级是绝对定位的话，父级要用相对定位",[1146,133184,133185,133188,133191,133194],{},[86,133186,133187],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[86,133189,133190],{},"父盒子需要加定位限制子盒子在父盒子内显示",[86,133192,133193],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[86,133195,133196,133197,133200],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[289,133198,133199],{},"子绝父绝"," 也会遇到",[22013,133202,133204],{"id":133203},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1146,133206,133207,133222],{},[86,133208,133209,133210,133213,133214,133217,133218,133221],{},"在使用 ",[289,133211,133212],{},"定位"," 布局时，可能会 ",[289,133215,133216],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[289,133219,133220],{},"z-index"," 来控制盒子的前后次序 (z轴)",[86,133223,5196],{},[120,133225,133226],{"className":126553,"code":132346,"language":126555,"meta":42,"style":42},[126,133227,133228,133234,133246,133260,133274],{"__ignoreMap":42},[129,133229,133230,133232],{"class":131,"line":132},[129,133231,130401],{"class":1977},[129,133233,15587],{"class":139},[129,133235,133236,133238,133240,133242,133244],{"class":131,"line":51},[129,133237,132359],{"class":188},[129,133239,51438],{"class":139},[129,133241,54765],{"class":188},[129,133243,130416],{"class":139},[129,133245,132368],{"class":198},[129,133247,133248,133250,133252,133254,133256,133258],{"class":131,"line":1194},[129,133249,132373],{"class":188},[129,133251,51438],{"class":139},[129,133253,585],{"class":188},[129,133255,51493],{"class":135},[129,133257,132382],{"class":139},[129,133259,132385],{"class":198},[129,133261,133262,133264,133266,133268,133270,133272],{"class":131,"line":1209},[129,133263,132390],{"class":188},[129,133265,51438],{"class":139},[129,133267,839],{"class":188},[129,133269,51493],{"class":135},[129,133271,132399],{"class":139},[129,133273,132402],{"class":198},[129,133275,133276],{"class":131,"line":1215},[129,133277,1579],{"class":139},[1146,133279,133280],{},[86,133281,133282,133283,133159,133285,133287,133288,127716,133291,82540,133294,133296,133297,133299,133300,133303,133304,133169,133307,133309,133310,133313,133315],{},"z-index的特性",[53717,133284],{},[289,133286,127017],{}," ： ",[289,133289,133290],{},"正整数",[289,133292,133293],{},"负整数",[289,133295,331],{}," ，默认值是 0，数值越大，盒子越靠上；",[53717,133298],{},"  ②如果 ",[289,133301,133302],{},"属性值相同"," ，则按照书写顺序， ",[289,133305,133306],{},"后来居上",[53717,133308],{},"  ③数字后面 ",[289,133311,133312],{},"不能加单位",[53717,133314],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22013,133317,133319],{"id":133318},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133321,133322],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133324,133325],{},"方法:",[1146,133327,133328,133338],{},[86,133329,133330,133331,133334,133335],{},"left: 50%; 让 ",[289,133332,133333],{},"盒子的左侧"," 移动到 ",[289,133336,133337],{},"父级元素的水平中心位置",[86,133339,133340,133341,133344,133345],{},"margin-left: -100px; 让盒子 ",[289,133342,133343],{},"向左"," 移动 ",[289,133346,133347],{},"自身宽度的一半",[22013,133349,133351],{"id":133350},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[83,133353,133354,133357],{},[86,133355,133356],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[86,133358,133359],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133361,133362],{},"也就是说绝对定位和固定定位和浮动类似",[83,133364,133365],{"start":1194},[86,133366,133367],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1146,133369,133370,133373,133376],{},[86,133371,133372],{},"可以用inline-block 转换为行内块",[86,133374,133375],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[86,133377,133378],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133380,133381],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22013,133383,133385],{"id":133384},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[83,133387,133388,133391,133394,133397],{},[86,133389,133390],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[86,133392,133393],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[86,133395,133396],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[86,133398,133399],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[120,133401,133402],{"className":126553,"code":131019,"language":126555,"meta":42,"style":42},[126,133403,133404,133410,133420,133424,133430,133440],{"__ignoreMap":42},[129,133405,133406,133408],{"class":131,"line":132},[129,133407,131026],{"class":1977},[129,133409,15587],{"class":139},[129,133411,133412,133414,133416,133418],{"class":131,"line":51},[129,133413,131033],{"class":188},[129,133415,51438],{"class":139},[129,133417,23751],{"class":188},[129,133419,1305],{"class":139},[129,133421,133422],{"class":131,"line":1194},[129,133423,1579],{"class":139},[129,133425,133426,133428],{"class":131,"line":1209},[129,133427,131048],{"class":1977},[129,133429,15587],{"class":139},[129,133431,133432,133434,133436,133438],{"class":131,"line":1215},[129,133433,131033],{"class":188},[129,133435,51438],{"class":139},[129,133437,72523],{"class":188},[129,133439,1305],{"class":139},[129,133441,133442],{"class":131,"line":1229},[129,133443,1579],{"class":139},[40,133445],{"style":126409,"src":133446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22013,133448,133450],{"id":133449},"_11138-轮播图","11.1.3.8 轮播图",[40,133452],{"style":126409,"src":133453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[83,133455,133456],{},[86,133457,133458],{},"制作顺序:",[1146,133460,133461,133464,133467,133476],{},[86,133462,133463],{},"大盒子我们类名为： tb-promo 淘宝广告",[86,133465,133466],{},"里面先放一张图片",[86,133468,133469,133470,133472,133473,133475],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53717,133471],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53717,133474],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[86,133477,133478,133479,133481,133482,133484],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53717,133480],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53717,133483],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[83,133486,133487],{"start":51},[86,133488,133489],{},"代码模块",[120,133491,133493],{"className":126553,"code":133492,"language":126555,"meta":42,"style":42},"\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",[126,133494,133495,133500,133507,133517,133527,133537,133541,133546,133553,133563],{"__ignoreMap":42},[129,133496,133497],{"class":131,"line":132},[129,133498,133499],{"class":198},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[129,133501,133502,133505],{"class":131,"line":51},[129,133503,133504],{"class":1977},".son",[129,133506,15587],{"class":139},[129,133508,133509,133511,133513,133515],{"class":131,"line":1194},[129,133510,132359],{"class":188},[129,133512,51438],{"class":139},[129,133514,54832],{"class":188},[129,133516,1305],{"class":139},[129,133518,133519,133521,133523,133525],{"class":131,"line":1209},[129,133520,132373],{"class":188},[129,133522,51438],{"class":139},[129,133524,331],{"class":188},[129,133526,1305],{"class":139},[129,133528,133529,133531,133533,133535],{"class":131,"line":1215},[129,133530,132390],{"class":188},[129,133532,51438],{"class":139},[129,133534,331],{"class":188},[129,133536,1305],{"class":139},[129,133538,133539],{"class":131,"line":1229},[129,133540,1579],{"class":139},[129,133542,133543],{"class":131,"line":1235},[129,133544,133545],{"class":198},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[129,133547,133548,133551],{"class":131,"line":1326},[129,133549,133550],{"class":1977},".father",[129,133552,15587],{"class":139},[129,133554,133555,133557,133559,133561],{"class":131,"line":1332},[129,133556,132359],{"class":188},[129,133558,51438],{"class":139},[129,133560,54765],{"class":188},[129,133562,1305],{"class":139},[129,133564,133565],{"class":131,"line":1344},[129,133566,1579],{"class":139},[14,133568,133569],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[100,133571,133573],{"id":133572},"_1114-定位数值的移动","11.1.4 定位数值的移动",[40,133575],{"style":126409,"src":133576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133578,133579],{},"✨ 黄金口诀：",[14,133581,133582],{},"\"TOP正下负上，LEFT正右负左\"",[14,133584,133585],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133587,133588],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133590,133591],{},"✨ 简单记：",[14,133593,133594],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5141,133596,133597],{},"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":42,"searchDepth":51,"depth":51,"links":133599},[133600],{"id":132127,"depth":51,"text":132128,"children":133601},[133602,133603,133604,133605],{"id":132131,"depth":1194,"text":132132},{"id":132146,"depth":1194,"text":132147},{"id":132314,"depth":1194,"text":132315},{"id":133572,"depth":1194,"text":133573},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132119,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133612,"title":133613,"body":133614,"description":53,"extension":54,"meta":135037,"navigation":56,"path":135038,"seo":135039,"stem":135040,"__hash__":135041},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133615,"toc":135016},[133616,133619,133623,133631,133635,133640,133648,133660,133664,133669,133677,133688,133692,133697,133738,133746,133750,133753,133756,133759,133853,133856,133950,133953,134047,134050,134053,134088,134091,134094,134124,134127,134130,134133,134136,134139,134142,134145,134215,134218,134222,134226,134267,134271,134277,134280,134283,134287,134290,134293,134296,134377,134380,134383,134387,134391,134394,134397,134400,134403,134406,134412,134421,134425,134444,134448,134458,134461,134464,134467,134470,134473,134476,134479,134482,134491,134495,134504,134507,134512,134565,134570,134736,134739,134742,134747,134750,134753,134756,134759,134764,134912,134915,134918,134923,134926,134931,134965,134968,134971,134975,134978,134985,134988,134991,134994,134997,135000,135003,135006,135010,135013],[10,133617,133613],{"id":133618},"_12-显示隐藏与图形资源",[71,133620,133622],{"id":133621},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1146,133624,133625,133628],{},[86,133626,133627],{},"目的:让一个元素在页面中消失或者显示出来",[86,133629,133630],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[100,133632,133634],{"id":133633},"_1211-display-显示","12.1.1 display 显示",[83,133636,133637],{},[86,133638,133639],{},"display 设置或检索对象是否及如何显示",[1146,133641,133642,133645],{},[86,133643,133644],{},"display: none;隐藏对象",[86,133646,133647],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[83,133649,133650,133657],{"start":51},[86,133651,133652,133653,133656],{},"特点： display 隐藏元素后， ",[289,133654,133655],{},"不再占"," 有原来的位置",[86,133658,133659],{},"在js中使用非常的广泛",[100,133661,133663],{"id":133662},"_1212-visibility可见性","12.1.2 visibility可见性",[83,133665,133666],{},[86,133667,133668],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1146,133670,133671,133674],{},[86,133672,133673],{},"visibility： visible；元素可见",[86,133675,133676],{},"visibility：hidden；元素隐藏",[83,133678,133679,133682,133685],{"start":51},[86,133680,133681],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[86,133683,133684],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[86,133686,133687],{},"隐藏后继续占有原有位置",[100,133689,133691],{"id":133690},"_1213-overflow溢出","12.1.3 overflow溢出",[1146,133693,133694],{},[86,133695,133696],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[277,133698,133699,133707],{},[280,133700,133701],{},[283,133702,133703,133705],{},[286,133704,127017],{"align":23751},[286,133706,27490],{"align":23751},[324,133708,133709,133717,133724,133731],{},[283,133710,133711,133714],{},[329,133712,133713],{"align":23751},"visible",[329,133715,133716],{"align":23751},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[283,133718,133719,133721],{},[329,133720,61715],{"align":23751},[329,133722,133723],{"align":23751},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[283,133725,133726,133728],{},[329,133727,128973],{"align":23751},[329,133729,133730],{"align":23751},"不管超出内容否，总是显示滚动条",[283,133732,133733,133735],{},[329,133734,72664],{"align":23751},[329,133736,133737],{"align":23751},"超出自动显示滚动条，不超出不显示滚动条",[1146,133739,133740,133743],{},[86,133741,133742],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[86,133744,133745],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[100,133747,133749],{"id":133748},"_1214-案例收获","12.1.4 案例收获",[40,133751],{"style":126409,"src":133752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133754,133755],{},"问题：没做出来动态效果，使用hover没实现",[14,133757,133758],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[120,133760,133761],{"className":126553,"code":131985,"language":126555,"meta":42,"style":42},[126,133762,133763,133767,133781,133785,133799,133803,133817,133821,133835,133839],{"__ignoreMap":42},[129,133764,133765],{"class":131,"line":132},[129,133766,131992],{"class":198},[129,133768,133769,133771,133773,133775,133777,133779],{"class":131,"line":51},[129,133770,131997],{"class":1977},[129,133772,79808],{"class":139},[129,133774,128913],{"class":188},[129,133776,51438],{"class":139},[129,133778,132006],{"class":188},[129,133780,129483],{"class":139},[129,133782,133783],{"class":131,"line":1194},[129,133784,132013],{"class":198},[129,133786,133787,133789,133791,133793,133795,133797],{"class":131,"line":1209},[129,133788,132018],{"class":1977},[129,133790,79808],{"class":139},[129,133792,128913],{"class":188},[129,133794,51438],{"class":139},[129,133796,54765],{"class":188},[129,133798,129483],{"class":139},[129,133800,133801],{"class":131,"line":1215},[129,133802,132033],{"class":198},[129,133804,133805,133807,133809,133811,133813,133815],{"class":131,"line":1229},[129,133806,132038],{"class":1977},[129,133808,79808],{"class":139},[129,133810,128913],{"class":188},[129,133812,51438],{"class":139},[129,133814,54832],{"class":188},[129,133816,129483],{"class":139},[129,133818,133819],{"class":131,"line":1235},[129,133820,132053],{"class":198},[129,133822,133823,133825,133827,133829,133831,133833],{"class":131,"line":1326},[129,133824,132058],{"class":1977},[129,133826,79808],{"class":139},[129,133828,128913],{"class":188},[129,133830,51438],{"class":139},[129,133832,86234],{"class":188},[129,133834,129483],{"class":139},[129,133836,133837],{"class":131,"line":1332},[129,133838,132073],{"class":198},[129,133840,133841,133843,133845,133847,133849,133851],{"class":131,"line":1344},[129,133842,132078],{"class":1977},[129,133844,79808],{"class":139},[129,133846,128913],{"class":188},[129,133848,51438],{"class":139},[129,133850,132087],{"class":188},[129,133852,129483],{"class":139},[14,133854,133855],{},"完整代码：",[120,133857,133858],{"className":126553,"code":131985,"language":126555,"meta":42,"style":42},[126,133859,133860,133864,133878,133882,133896,133900,133914,133918,133932,133936],{"__ignoreMap":42},[129,133861,133862],{"class":131,"line":132},[129,133863,131992],{"class":198},[129,133865,133866,133868,133870,133872,133874,133876],{"class":131,"line":51},[129,133867,131997],{"class":1977},[129,133869,79808],{"class":139},[129,133871,128913],{"class":188},[129,133873,51438],{"class":139},[129,133875,132006],{"class":188},[129,133877,129483],{"class":139},[129,133879,133880],{"class":131,"line":1194},[129,133881,132013],{"class":198},[129,133883,133884,133886,133888,133890,133892,133894],{"class":131,"line":1209},[129,133885,132018],{"class":1977},[129,133887,79808],{"class":139},[129,133889,128913],{"class":188},[129,133891,51438],{"class":139},[129,133893,54765],{"class":188},[129,133895,129483],{"class":139},[129,133897,133898],{"class":131,"line":1215},[129,133899,132033],{"class":198},[129,133901,133902,133904,133906,133908,133910,133912],{"class":131,"line":1229},[129,133903,132038],{"class":1977},[129,133905,79808],{"class":139},[129,133907,128913],{"class":188},[129,133909,51438],{"class":139},[129,133911,54832],{"class":188},[129,133913,129483],{"class":139},[129,133915,133916],{"class":131,"line":1235},[129,133917,132053],{"class":198},[129,133919,133920,133922,133924,133926,133928,133930],{"class":131,"line":1326},[129,133921,132058],{"class":1977},[129,133923,79808],{"class":139},[129,133925,128913],{"class":188},[129,133927,51438],{"class":139},[129,133929,86234],{"class":188},[129,133931,129483],{"class":139},[129,133933,133934],{"class":131,"line":1332},[129,133935,132073],{"class":198},[129,133937,133938,133940,133942,133944,133946,133948],{"class":131,"line":1344},[129,133939,132078],{"class":1977},[129,133941,79808],{"class":139},[129,133943,128913],{"class":188},[129,133945,51438],{"class":139},[129,133947,132087],{"class":188},[129,133949,129483],{"class":139},[14,133951,133952],{},"分布思路重点详解：",[120,133954,133955],{"className":126553,"code":131985,"language":126555,"meta":42,"style":42},[126,133956,133957,133961,133975,133979,133993,133997,134011,134015,134029,134033],{"__ignoreMap":42},[129,133958,133959],{"class":131,"line":132},[129,133960,131992],{"class":198},[129,133962,133963,133965,133967,133969,133971,133973],{"class":131,"line":51},[129,133964,131997],{"class":1977},[129,133966,79808],{"class":139},[129,133968,128913],{"class":188},[129,133970,51438],{"class":139},[129,133972,132006],{"class":188},[129,133974,129483],{"class":139},[129,133976,133977],{"class":131,"line":1194},[129,133978,132013],{"class":198},[129,133980,133981,133983,133985,133987,133989,133991],{"class":131,"line":1209},[129,133982,132018],{"class":1977},[129,133984,79808],{"class":139},[129,133986,128913],{"class":188},[129,133988,51438],{"class":139},[129,133990,54765],{"class":188},[129,133992,129483],{"class":139},[129,133994,133995],{"class":131,"line":1215},[129,133996,132033],{"class":198},[129,133998,133999,134001,134003,134005,134007,134009],{"class":131,"line":1229},[129,134000,132038],{"class":1977},[129,134002,79808],{"class":139},[129,134004,128913],{"class":188},[129,134006,51438],{"class":139},[129,134008,54832],{"class":188},[129,134010,129483],{"class":139},[129,134012,134013],{"class":131,"line":1235},[129,134014,132053],{"class":198},[129,134016,134017,134019,134021,134023,134025,134027],{"class":131,"line":1326},[129,134018,132058],{"class":1977},[129,134020,79808],{"class":139},[129,134022,128913],{"class":188},[129,134024,51438],{"class":139},[129,134026,86234],{"class":188},[129,134028,129483],{"class":139},[129,134030,134031],{"class":131,"line":1332},[129,134032,132073],{"class":198},[129,134034,134035,134037,134039,134041,134043,134045],{"class":131,"line":1344},[129,134036,132078],{"class":1977},[129,134038,79808],{"class":139},[129,134040,128913],{"class":188},[129,134042,51438],{"class":139},[129,134044,132087],{"class":188},[129,134046,129483],{"class":139},[40,134048],{"style":126409,"src":134049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134051,134052],{},"图片太大，盒子太小，此时需要修改图片的大小",[120,134054,134056],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[126,134057,134058],{"__ignoreMap":42},[129,134059,134060,134062,134064,134066,134068,134071,134073,134075,134078,134081,134083,134086],{"class":131,"line":132},[129,134061,1049],{"class":139},[129,134063,40],{"class":51301},[129,134065,55240],{"class":1977},[129,134067,185],{"class":139},[129,134069,134070],{"class":244},"\"images\u002Fpic.jpg\"",[129,134072,55248],{"class":1977},[129,134074,185],{"class":139},[129,134076,134077],{"class":244},"\"描述文字\"",[129,134079,134080],{"class":1977}," title",[129,134082,185],{"class":139},[129,134084,134085],{"class":244},"\"悬停提示\"",[129,134087,51308],{"class":139},[40,134089],{"style":126409,"src":134090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134092,134093],{},"制造遮罩层",[120,134095,134096],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,134097,134098],{"__ignoreMap":42},[129,134099,134100,134102,134104,134106,134108,134110,134112,134114,134116,134118,134120,134122],{"class":131,"line":132},[129,134101,1049],{"class":139},[129,134103,40],{"class":51301},[129,134105,55240],{"class":1977},[129,134107,185],{"class":139},[129,134109,134070],{"class":244},[129,134111,55248],{"class":1977},[129,134113,185],{"class":139},[129,134115,134077],{"class":244},[129,134117,134080],{"class":1977},[129,134119,185],{"class":139},[129,134121,134085],{"class":244},[129,134123,51308],{"class":139},[14,134125,134126],{},"此时是这样的为标准流",[40,134128],{"style":126409,"src":134129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134131,134132],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134134,134135],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134137,134138],{},"让他在中间，用center(background-position)",[14,134140,134141],{},"将需要变的尽可能放到一个盒子中",[14,134143,134144],{},"放大盒子上内部盒子发生变化",[120,134146,134148],{"className":126553,"code":134147,"language":126555,"meta":42,"style":42},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[126,134149,134150,134156,134166,134170,134177,134187,134199,134211],{"__ignoreMap":42},[129,134151,134152,134154],{"class":131,"line":132},[129,134153,127620],{"class":1977},[129,134155,15587],{"class":139},[129,134157,134158,134160,134162,134164],{"class":131,"line":51},[129,134159,132359],{"class":188},[129,134161,51438],{"class":139},[129,134163,54765],{"class":188},[129,134165,1305],{"class":139},[129,134167,134168],{"class":131,"line":1194},[129,134169,1579],{"class":139},[129,134171,134172,134175],{"class":131,"line":1209},[129,134173,134174],{"class":1977},".child",[129,134176,15587],{"class":139},[129,134178,134179,134181,134183,134185],{"class":131,"line":1215},[129,134180,132359],{"class":188},[129,134182,51438],{"class":139},[129,134184,54832],{"class":188},[129,134186,1305],{"class":139},[129,134188,134189,134191,134193,134195,134197],{"class":131,"line":1229},[129,134190,132373],{"class":188},[129,134192,51438],{"class":139},[129,134194,795],{"class":188},[129,134196,467],{"class":135},[129,134198,1305],{"class":139},[129,134200,134201,134203,134205,134207,134209],{"class":131,"line":1235},[129,134202,132390],{"class":188},[129,134204,51438],{"class":139},[129,134206,795],{"class":188},[129,134208,467],{"class":135},[129,134210,1305],{"class":139},[129,134212,134213],{"class":131,"line":1326},[129,134214,1579],{"class":139},[14,134216,134217],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[71,134219,134221],{"id":134220},"_122-精灵图","12.2 精灵图",[100,134223,134225],{"id":134224},"_1221-理解","12.2.1 理解",[83,134227,134228,134246],{},[86,134229,134230,134231,132459,134234,134237,134238,134241,134242,134245],{},"目的： ",[289,134232,134233],{},"为了有效地减少服务器接收和发送请求的次数",[289,134235,134236],{},"提高"," 页面的 ",[289,134239,134240],{},"加载速度"," ，出现了 ",[289,134243,134244],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[86,134247,134248,134249,134251,134252,134254,134255,134257,134258,134260,134261,134263,134264,134266],{},"使用精灵图核心：",[53717,134250],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53717,134253],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53717,134256],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53717,134259],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53717,134262],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53717,134265],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[100,134268,134270],{"id":134269},"_1222-扒图","12.2.2 扒图",[120,134272,134275],{"className":134273,"code":134274,"language":5202},[5200],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[126,134276,134274],{"__ignoreMap":42},[40,134278],{"style":126409,"src":134279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[40,134281],{"style":126409,"src":134282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[100,134284,134286],{"id":134285},"_1223-精灵图的实现","12.2.3 精灵图的实现",[40,134288],{"style":126409,"src":134289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134291,134292],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[40,134294],{"style":126409,"src":134295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[120,134297,134299],{"className":126553,"code":134298,"language":126555,"meta":42,"style":42},"\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",[126,134300,134301,134306,134313,134325,134337,134356,134373],{"__ignoreMap":42},[129,134302,134303],{"class":131,"line":132},[129,134304,134305],{"class":198},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[129,134307,134308,134311],{"class":131,"line":51},[129,134309,134310],{"class":1977},".icon",[129,134312,15587],{"class":139},[129,134314,134315,134317,134319,134321,134323],{"class":131,"line":1194},[129,134316,70569],{"class":188},[129,134318,51438],{"class":139},[129,134320,839],{"class":188},[129,134322,51493],{"class":135},[129,134324,1305],{"class":139},[129,134326,134327,134329,134331,134333,134335],{"class":131,"line":1209},[129,134328,70789],{"class":188},[129,134330,51438],{"class":139},[129,134332,839],{"class":188},[129,134334,51493],{"class":135},[129,134336,1305],{"class":139},[129,134338,134339,134341,134343,134345,134347,134350,134352,134354],{"class":131,"line":1215},[129,134340,70612],{"class":188},[129,134342,51438],{"class":139},[129,134344,61727],{"class":188},[129,134346,140],{"class":139},[129,134348,134349],{"class":5231},"sprites.png",[129,134351,13729],{"class":139},[129,134353,61737],{"class":188},[129,134355,1305],{"class":139},[129,134357,134358,134360,134362,134364,134366,134369,134371],{"class":131,"line":1229},[129,134359,128813],{"class":188},[129,134361,51438],{"class":139},[129,134363,51764],{"class":188},[129,134365,51493],{"class":135},[129,134367,134368],{"class":188}," -20",[129,134370,51493],{"class":135},[129,134372,1305],{"class":139},[129,134374,134375],{"class":131,"line":1235},[129,134376,1579],{"class":139},[40,134378],{"style":126409,"src":134379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134381,134382],{},"在前端中坐标轴的正方向是右和下",[71,134384,134386],{"id":134385},"_123-字体图标","12.3 字体图标",[100,134388,134390],{"id":134389},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134392,134393],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134395,134396],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134398,134399],{},"1.图片文件还是比较大的。",[14,134401,134402],{},"2.图片本身放大和缩小会失真。",[14,134404,134405],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134407,134408,134409,25741],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[289,134410,134411],{},"字体图标 iconfont",[14,134413,134414,134417,134418,28386],{},[289,134415,134416],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[289,134419,134420],{},"展示的是图标，本质属于字体",[100,134422,134424],{"id":134423},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1146,134426,134427,134432,134435,134438,134441],{},[86,134428,134429,134431],{},[289,134430,25877],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[86,134433,134434],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[86,134436,134437],{},"兼容性：几乎支持所有的浏览器，请放心使用",[86,134439,134440],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[86,134442,134443],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[100,134445,134447],{"id":134446},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1146,134449,134450],{},[86,134451,134452,134453],{},"icomoon字体库：",[20,134454,134457],{"href":134455,"rel":134456},"http:\u002F\u002Ficomoon.io\u002F",[24],"http:\u002F\u002Ficomoon.io",[14,134459,134460],{},"进去之后点icomoon app",[40,134462],{"style":126409,"src":134463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134465,134466],{},"可以对其编辑：",[40,134468],{"style":126409,"src":134469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134471,134472],{},"生成字体：",[40,134474],{"style":126409,"src":134475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134477,134478],{},"下载：",[40,134480],{"style":126409,"src":134481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1146,134483,134484],{},[86,134485,134486,134487],{},"阿里iconfont字体库： ",[20,134488,134489],{"href":134489,"rel":134490},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24],[100,134492,134494],{"id":134493},"_1234-字体图标的引入","12.3.4 字体图标的引入",[83,134496,134497],{},[86,134498,134499,134500,134503],{},"把下载包里面的 ",[289,134501,134502],{},"fonts"," 文件夹放入页面根目录下",[40,134505],{"style":126409,"src":134506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[83,134508,134509],{"start":51},[86,134510,134511],{},"字体文件格式",[277,134513,134514,134523],{},[280,134515,134516],{},[283,134517,134518,134521],{},[286,134519,134520],{"align":23751},"格式",[286,134522,23755],{"align":23751},[324,134524,134525,134535,134545,134555],{},[283,134526,134527,134532],{},[329,134528,134529],{"align":23751},[289,134530,134531],{},".ttf",[329,134533,134534],{"align":23751},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[283,134536,134537,134542],{},[329,134538,134539],{"align":23751},[289,134540,134541],{},".woff",[329,134543,134544],{"align":23751},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[283,134546,134547,134552],{},[329,134548,134549],{"align":23751},[289,134550,134551],{},".eot",[329,134553,134554],{"align":23751},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[283,134556,134557,134562],{},[329,134558,134559],{"align":23751},[289,134560,134561],{},"svg",[329,134563,134564],{"align":23751},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[83,134566,134567],{"start":1194},[86,134568,134569],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[120,134571,134573],{"className":126553,"code":134572,"language":126555,"meta":42,"style":42},"\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",[126,134574,134575,134580,134587,134599,134615,134640,134661,134681,134701,134705,134711,134721,134732],{"__ignoreMap":42},[129,134576,134577],{"class":131,"line":132},[129,134578,134579],{"class":198},"\u002F* 引入字体图标 *\u002F\n",[129,134581,134582,134585],{"class":131,"line":51},[129,134583,134584],{"class":135},"@font-face",[129,134586,15587],{"class":139},[129,134588,134589,134592,134594,134597],{"class":131,"line":1194},[129,134590,134591],{"class":188},"  font-family",[129,134593,51438],{"class":139},[129,134595,134596],{"class":244},"'icomoon'",[129,134598,1305],{"class":139},[129,134600,134601,134604,134606,134608,134610,134613],{"class":131,"line":1209},[129,134602,134603],{"class":188},"  src",[129,134605,51438],{"class":139},[129,134607,61727],{"class":188},[129,134609,140],{"class":139},[129,134611,134612],{"class":244},"'fonts\u002Ficomoon.eot'",[129,134614,2733],{"class":139},[129,134616,134617,134619,134621,134623,134625,134628,134630,134633,134635,134638],{"class":131,"line":1215},[129,134618,134603],{"class":188},[129,134620,51438],{"class":139},[129,134622,61727],{"class":188},[129,134624,140],{"class":139},[129,134626,134627],{"class":244},"'fonts\u002Ficomoon.eot?#iefix'",[129,134629,13729],{"class":139},[129,134631,134632],{"class":188},"format",[129,134634,140],{"class":139},[129,134636,134637],{"class":244},"'embedded-opentype'",[129,134639,38048],{"class":139},[129,134641,134642,134645,134647,134650,134652,134654,134656,134659],{"class":131,"line":1229},[129,134643,134644],{"class":188},"       url",[129,134646,140],{"class":139},[129,134648,134649],{"class":244},"'fonts\u002Ficomoon.woff'",[129,134651,13729],{"class":139},[129,134653,134632],{"class":188},[129,134655,140],{"class":139},[129,134657,134658],{"class":244},"'woff'",[129,134660,38048],{"class":139},[129,134662,134663,134665,134667,134670,134672,134674,134676,134679],{"class":131,"line":1235},[129,134664,134644],{"class":188},[129,134666,140],{"class":139},[129,134668,134669],{"class":244},"'fonts\u002Ficomoon.ttf'",[129,134671,13729],{"class":139},[129,134673,134632],{"class":188},[129,134675,140],{"class":139},[129,134677,134678],{"class":244},"'truetype'",[129,134680,38048],{"class":139},[129,134682,134683,134685,134687,134690,134692,134694,134696,134699],{"class":131,"line":1326},[129,134684,134644],{"class":188},[129,134686,140],{"class":139},[129,134688,134689],{"class":244},"'fonts\u002Ficomoon.svg#icomoon'",[129,134691,13729],{"class":139},[129,134693,134632],{"class":188},[129,134695,140],{"class":139},[129,134697,134698],{"class":244},"'svg'",[129,134700,2733],{"class":139},[129,134702,134703],{"class":131,"line":1332},[129,134704,1579],{"class":139},[129,134706,134707,134709],{"class":131,"line":1344},[129,134708,134310],{"class":1977},[129,134710,15587],{"class":139},[129,134712,134713,134715,134717,134719],{"class":131,"line":1626},[129,134714,134591],{"class":188},[129,134716,51438],{"class":139},[129,134718,134596],{"class":244},[129,134720,1305],{"class":139},[129,134722,134723,134726,134728,134730],{"class":131,"line":1631},[129,134724,134725],{"class":188},"  font-style",[129,134727,51438],{"class":139},[129,134729,63842],{"class":188},[129,134731,1305],{"class":139},[129,134733,134734],{"class":131,"line":1637},[129,134735,1579],{"class":139},[14,134737,134738],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[40,134740],{"style":126409,"src":134741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[83,134743,134744],{"start":1209},[86,134745,134746],{},"添加字体",[40,134748],{"style":126409,"src":134749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134751,134752],{},"复制：",[40,134754],{"style":126409,"src":134755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134757,134758],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[83,134760,134761],{"start":1215},[86,134762,134763],{},"代码展示：",[120,134765,134766],{"className":126553,"code":134572,"language":126555,"meta":42,"style":42},[126,134767,134768,134772,134778,134788,134802,134824,134842,134860,134878,134882,134888,134898,134908],{"__ignoreMap":42},[129,134769,134770],{"class":131,"line":132},[129,134771,134579],{"class":198},[129,134773,134774,134776],{"class":131,"line":51},[129,134775,134584],{"class":135},[129,134777,15587],{"class":139},[129,134779,134780,134782,134784,134786],{"class":131,"line":1194},[129,134781,134591],{"class":188},[129,134783,51438],{"class":139},[129,134785,134596],{"class":244},[129,134787,1305],{"class":139},[129,134789,134790,134792,134794,134796,134798,134800],{"class":131,"line":1209},[129,134791,134603],{"class":188},[129,134793,51438],{"class":139},[129,134795,61727],{"class":188},[129,134797,140],{"class":139},[129,134799,134612],{"class":244},[129,134801,2733],{"class":139},[129,134803,134804,134806,134808,134810,134812,134814,134816,134818,134820,134822],{"class":131,"line":1215},[129,134805,134603],{"class":188},[129,134807,51438],{"class":139},[129,134809,61727],{"class":188},[129,134811,140],{"class":139},[129,134813,134627],{"class":244},[129,134815,13729],{"class":139},[129,134817,134632],{"class":188},[129,134819,140],{"class":139},[129,134821,134637],{"class":244},[129,134823,38048],{"class":139},[129,134825,134826,134828,134830,134832,134834,134836,134838,134840],{"class":131,"line":1229},[129,134827,134644],{"class":188},[129,134829,140],{"class":139},[129,134831,134649],{"class":244},[129,134833,13729],{"class":139},[129,134835,134632],{"class":188},[129,134837,140],{"class":139},[129,134839,134658],{"class":244},[129,134841,38048],{"class":139},[129,134843,134844,134846,134848,134850,134852,134854,134856,134858],{"class":131,"line":1235},[129,134845,134644],{"class":188},[129,134847,140],{"class":139},[129,134849,134669],{"class":244},[129,134851,13729],{"class":139},[129,134853,134632],{"class":188},[129,134855,140],{"class":139},[129,134857,134678],{"class":244},[129,134859,38048],{"class":139},[129,134861,134862,134864,134866,134868,134870,134872,134874,134876],{"class":131,"line":1326},[129,134863,134644],{"class":188},[129,134865,140],{"class":139},[129,134867,134689],{"class":244},[129,134869,13729],{"class":139},[129,134871,134632],{"class":188},[129,134873,140],{"class":139},[129,134875,134698],{"class":244},[129,134877,2733],{"class":139},[129,134879,134880],{"class":131,"line":1332},[129,134881,1579],{"class":139},[129,134883,134884,134886],{"class":131,"line":1344},[129,134885,134310],{"class":1977},[129,134887,15587],{"class":139},[129,134889,134890,134892,134894,134896],{"class":131,"line":1626},[129,134891,134591],{"class":188},[129,134893,51438],{"class":139},[129,134895,134596],{"class":244},[129,134897,1305],{"class":139},[129,134899,134900,134902,134904,134906],{"class":131,"line":1631},[129,134901,134725],{"class":188},[129,134903,51438],{"class":139},[129,134905,63842],{"class":188},[129,134907,1305],{"class":139},[129,134909,134910],{"class":131,"line":1637},[129,134911,1579],{"class":139},[40,134913],{"style":126409,"src":134914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134916,134917],{},"更加细节展示：",[83,134919,134920],{},[86,134921,134922],{},"html 标签内添加小图标",[40,134924],{"style":126409,"src":134925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[83,134927,134928],{"start":51},[86,134929,134930],{},"给标签定义字体",[120,134932,134933],{"className":127300,"code":130657,"language":127302,"meta":42,"style":42},[126,134934,134935,134939,134953,134957],{"__ignoreMap":42},[129,134936,134937],{"class":131,"line":132},[129,134938,130664],{"class":198},[129,134940,134941,134943,134945,134947,134949,134951],{"class":131,"line":51},[129,134942,1049],{"class":139},[129,134944,51612],{"class":51301},[129,134946,53487],{"class":1977},[129,134948,185],{"class":139},[129,134950,130677],{"class":244},[129,134952,51308],{"class":139},[129,134954,134955],{"class":131,"line":1194},[129,134956,130684],{"class":139},[129,134958,134959,134961,134963],{"class":131,"line":1209},[129,134960,51786],{"class":139},[129,134962,51612],{"class":51301},[129,134964,51308],{"class":139},[14,134966,134967],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[40,134969],{"style":126409,"src":134970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[100,134972,134974],{"id":134973},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,134976,134977],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,134979,134980,134981,134984],{},"把压缩包里面的 ",[289,134982,134983],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,134986,134987],{},"打开网站，点下方：",[40,134989],{"style":126409,"src":134990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[40,134992],{"style":126409,"src":134993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[40,134995],{"style":126409,"src":134996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,134998,134999],{},"点yes重新加载",[14,135001,135002],{},"然后重复之前的操作就可以实现了",[14,135004,135005],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[100,135007,135009],{"id":135008},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[40,135011],{"style":126409,"src":135012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5141,135014,135015],{},"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":42,"searchDepth":51,"depth":51,"links":135017},[135018,135024,135029],{"id":133621,"depth":51,"text":133622,"children":135019},[135020,135021,135022,135023],{"id":133633,"depth":1194,"text":133634},{"id":133662,"depth":1194,"text":133663},{"id":133690,"depth":1194,"text":133691},{"id":133748,"depth":1194,"text":133749},{"id":134220,"depth":51,"text":134221,"children":135025},[135026,135027,135028],{"id":134224,"depth":1194,"text":134225},{"id":134269,"depth":1194,"text":134270},{"id":134285,"depth":1194,"text":134286},{"id":134385,"depth":51,"text":134386,"children":135030},[135031,135032,135033,135034,135035,135036],{"id":134389,"depth":1194,"text":134390},{"id":134423,"depth":1194,"text":134424},{"id":134446,"depth":1194,"text":134447},{"id":134493,"depth":1194,"text":134494},{"id":134973,"depth":1194,"text":134974},{"id":135008,"depth":1194,"text":135009},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133613,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135043,"title":135044,"body":135045,"description":53,"extension":54,"meta":136272,"navigation":56,"path":136273,"seo":136274,"stem":136275,"__hash__":136276},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135046,"toc":136253},[135047,135050,135054,135057,135071,135139,135169,135172,135176,135180,135282,135329,135333,135336,135339,135373,135376,135379,135382,135385,135388,135391,135394,135396,135399,135402,135405,135408,135411,135414,135417,135445,135448,135452,135455,135462,135465,135468,135494,135497,135501,135504,135507,135514,135518,135521,135523,135555,135558,135561,135573,135579,135582,135585,135588,135590,135594,135597,135600,135603,135648,135652,135654,135657,135664,135706,135709,135713,135718,135732,135736,135739,135742,135745,135748,135751,135785,135788,135791,135845,135848,135851,135854,135857,135909,135912,135915,135964,135968,135970,135973,135976,135979,135982,135985,136043,136046,136052,136055,136058,136090,136093,136097,136101,136104,136136,136140,136143,136187,136191,136194,136197,136200,136203,136206,136209,136212,136214,136217,136219,136222,136225,136228,136231,136236,136239,136241,136244,136247,136250],[10,135048,135044],{"id":135049},"_13-界面样式与布局技巧",[71,135051,135053],{"id":135052},"_131-css三角","13.1 css三角",[14,135055,135056],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1146,135058,135059,135062,135065,135068],{},[86,135060,135061],{},"用css 边框可以模拟三角效果",[86,135063,135064],{},"宽度高度为0",[86,135066,135067],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[86,135069,135070],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[120,135072,135074],{"className":126553,"code":135073,"language":126555,"meta":42,"style":42},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[126,135075,135076,135081,135088,135098,135108,135124,135135],{"__ignoreMap":42},[129,135077,135078],{"class":131,"line":132},[129,135079,135080],{"class":198},"\u002F* CSS 实现三角形 *\u002F\n",[129,135082,135083,135086],{"class":131,"line":51},[129,135084,135085],{"class":1977},".triangle",[129,135087,15587],{"class":139},[129,135089,135090,135092,135094,135096],{"class":131,"line":1194},[129,135091,70569],{"class":188},[129,135093,51438],{"class":139},[129,135095,331],{"class":188},[129,135097,1305],{"class":139},[129,135099,135100,135102,135104,135106],{"class":131,"line":1209},[129,135101,70789],{"class":188},[129,135103,51438],{"class":139},[129,135105,331],{"class":188},[129,135107,1305],{"class":139},[129,135109,135110,135112,135114,135116,135118,135120,135122],{"class":131,"line":1215},[129,135111,70897],{"class":188},[129,135113,51438],{"class":139},[129,135115,585],{"class":188},[129,135117,51493],{"class":135},[129,135119,51522],{"class":188},[129,135121,63992],{"class":188},[129,135123,1305],{"class":139},[129,135125,135126,135129,135131,135133],{"class":131,"line":1229},[129,135127,135128],{"class":188},"  border-bottom-color",[129,135130,51438],{"class":139},[129,135132,62370],{"class":188},[129,135134,1305],{"class":139},[129,135136,135137],{"class":131,"line":1235},[129,135138,1579],{"class":139},[120,135140,135141],{"className":126553,"code":130710,"language":126555,"meta":42,"style":42},[126,135142,135143,135149,135165],{"__ignoreMap":42},[129,135144,135145,135147],{"class":131,"line":132},[129,135146,51612],{"class":51301},[129,135148,15587],{"class":139},[129,135150,135151,135153,135155,135157,135159,135161,135163],{"class":131,"line":51},[129,135152,70897],{"class":188},[129,135154,51438],{"class":139},[129,135156,357],{"class":188},[129,135158,51493],{"class":135},[129,135160,51522],{"class":188},[129,135162,129945],{"class":188},[129,135164,1305],{"class":139},[129,135166,135167],{"class":131,"line":1194},[129,135168,1579],{"class":139},[40,135170],{"style":126409,"src":135171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[71,135173,135175],{"id":135174},"_132-css用户界面样式","13.2 css用户界面样式",[100,135177,135179],{"id":135178},"_1321-鼠标样式","13.2.1 鼠标样式",[120,135181,135183],{"className":126553,"code":135182,"language":126555,"meta":42,"style":42},"\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",[126,135184,135185,135190,135209,135227,135246,135263],{"__ignoreMap":42},[129,135186,135187],{"class":131,"line":132},[129,135188,135189],{"class":198},"\u002F* 鼠标样式 *\u002F\n",[129,135191,135192,135194,135196,135199,135201,135203,135206],{"class":131,"line":51},[129,135193,51612],{"class":51301},[129,135195,79808],{"class":139},[129,135197,135198],{"class":188},"cursor",[129,135200,51438],{"class":139},[129,135202,62031],{"class":188},[129,135204,135205],{"class":139},"; }   ",[129,135207,135208],{"class":198},"\u002F* 手型 *\u002F\n",[129,135210,135211,135213,135215,135217,135219,135222,135224],{"class":131,"line":1194},[129,135212,51612],{"class":51301},[129,135214,79808],{"class":139},[129,135216,135198],{"class":188},[129,135218,51438],{"class":139},[129,135220,135221],{"class":188},"default",[129,135223,135205],{"class":139},[129,135225,135226],{"class":198},"\u002F* 默认 *\u002F\n",[129,135228,135229,135231,135233,135235,135237,135240,135243],{"class":131,"line":1209},[129,135230,51612],{"class":51301},[129,135232,79808],{"class":139},[129,135234,135198],{"class":188},[129,135236,51438],{"class":139},[129,135238,135239],{"class":188},"move",[129,135241,135242],{"class":139},"; }      ",[129,135244,135245],{"class":198},"\u002F* 移动 *\u002F\n",[129,135247,135248,135250,135252,135254,135256,135258,135260],{"class":131,"line":1215},[129,135249,51612],{"class":51301},[129,135251,79808],{"class":139},[129,135253,135198],{"class":188},[129,135255,51438],{"class":139},[129,135257,5202],{"class":188},[129,135259,135242],{"class":139},[129,135261,135262],{"class":198},"\u002F* 文本 *\u002F\n",[129,135264,135265,135267,135269,135271,135273,135276,135279],{"class":131,"line":1229},[129,135266,51612],{"class":51301},[129,135268,79808],{"class":139},[129,135270,135198],{"class":188},[129,135272,51438],{"class":139},[129,135274,135275],{"class":188},"not-allowed",[129,135277,135278],{"class":139},"; } ",[129,135280,135281],{"class":198},"\u002F* 禁止 *\u002F\n",[277,135283,135284,135292],{},[280,135285,135286],{},[283,135287,135288,135290],{},[286,135289,127017],{"align":23751},[286,135291,27490],{"align":23751},[324,135293,135294,135301,135308,135315,135322],{},[283,135295,135296,135298],{},[329,135297,135221],{"align":23751},[329,135299,135300],{"align":23751},"小白 默认",[283,135302,135303,135305],{},[329,135304,62031],{"align":23751},[329,135306,135307],{"align":23751},"小手",[283,135309,135310,135312],{},[329,135311,135239],{"align":23751},[329,135313,135314],{"align":23751},"移动",[283,135316,135317,135319],{},[329,135318,5202],{"align":23751},[329,135320,135321],{"align":23751},"文本",[283,135323,135324,135326],{},[329,135325,135275],{"align":23751},[329,135327,135328],{"align":23751},"禁止",[100,135330,135332],{"id":135331},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135334,135335],{},"去除表单轮廓线",[14,135337,135338],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[120,135340,135341],{"className":126553,"code":129917,"language":126555,"meta":42,"style":42},[126,135342,135343,135347,135353,135369],{"__ignoreMap":42},[129,135344,135345],{"class":131,"line":132},[129,135346,129924],{"class":198},[129,135348,135349,135351],{"class":131,"line":51},[129,135350,51612],{"class":51301},[129,135352,15587],{"class":139},[129,135354,135355,135357,135359,135361,135363,135365,135367],{"class":131,"line":1194},[129,135356,70897],{"class":188},[129,135358,51438],{"class":139},[129,135360,357],{"class":188},[129,135362,51493],{"class":135},[129,135364,51522],{"class":188},[129,135366,129945],{"class":188},[129,135368,1305],{"class":139},[129,135370,135371],{"class":131,"line":1209},[129,135372,1579],{"class":139},[14,135374,135375],{},"文本域：",[40,135377],{"style":126409,"src":135378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135380,135381],{},"此时会有一个空白区域",[40,135383],{"style":126409,"src":135384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135386,135387],{},"写在同一行就不会出现这个问题",[40,135389],{"style":126409,"src":135390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135392,135393],{},"文本域是行内块元素，一定记住！！！",[14,135395,98234],{},[40,135397],{"style":126409,"src":135398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135400,135401],{},"文本域尽量放在一行",[14,135403,135404],{},"知识回顾：cols是列，rols是行",[40,135406],{"style":126409,"src":135407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135409,135410],{},"它可以进行拖动，显然这是我们不愿意看到的",[40,135412],{"style":126409,"src":135413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135415,135416],{},"使用resize进行解决",[120,135418,135420],{"className":126553,"code":135419,"language":126555,"meta":42,"style":42},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[126,135421,135422,135428,135441],{"__ignoreMap":42},[129,135423,135424,135426],{"class":131,"line":132},[129,135425,53822],{"class":51301},[129,135427,15587],{"class":139},[129,135429,135430,135432,135434,135436,135438],{"class":131,"line":51},[129,135431,70799],{"class":188},[129,135433,51438],{"class":139},[129,135435,54738],{"class":188},[129,135437,130416],{"class":139},[129,135439,135440],{"class":198},"\u002F* 取消表单轮廓线 *\u002F\n",[129,135442,135443],{"class":131,"line":1194},[129,135444,1579],{"class":139},[14,135446,135447],{},"此时就无法通过右下方实现拖动了",[100,135449,135451],{"id":135450},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135453,135454],{},"实现一个盒子中的文字和图片对齐",[14,135456,135457,135458,135461],{},"用于设置一个元素的 ",[289,135459,135460],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135463,135464],{},"图片和文字默认是基线对齐",[40,135466],{"style":126409,"src":135467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[120,135469,135470],{"className":126553,"code":135419,"language":126555,"meta":42,"style":42},[126,135471,135472,135478,135490],{"__ignoreMap":42},[129,135473,135474,135476],{"class":131,"line":132},[129,135475,53822],{"class":51301},[129,135477,15587],{"class":139},[129,135479,135480,135482,135484,135486,135488],{"class":131,"line":51},[129,135481,70799],{"class":188},[129,135483,51438],{"class":139},[129,135485,54738],{"class":188},[129,135487,130416],{"class":139},[129,135489,135440],{"class":198},[129,135491,135492],{"class":131,"line":1194},[129,135493,1579],{"class":139},[40,135495],{"style":126409,"src":135496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22013,135498,135500],{"id":135499},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135502,135503],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[40,135505],{"style":126409,"src":135506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135508,135509,135510,135513],{},"此时可以给图片、表单这些行内块元素的 ",[289,135511,135512],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22013,135515,135517],{"id":135516},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135519,135520],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135522,14648],{},[120,135524,135526],{"className":126553,"code":135525,"language":126555,"meta":42,"style":42},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[126,135527,135528,135533,135539,135551],{"__ignoreMap":42},[129,135529,135530],{"class":131,"line":132},[129,135531,135532],{"class":198},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[129,135534,135535,135537],{"class":131,"line":51},[129,135536,40],{"class":51301},[129,135538,15587],{"class":139},[129,135540,135541,135544,135546,135549],{"class":131,"line":1194},[129,135542,135543],{"class":188},"  vertical-align",[129,135545,51438],{"class":139},[129,135547,135548],{"class":188},"middle",[129,135550,1305],{"class":139},[129,135552,135553],{"class":131,"line":1209},[129,135554,1579],{"class":139},[40,135556],{"style":126409,"src":135557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135559,135560],{},"主要解决方法有两种：",[83,135562,135563],{},[86,135564,135565,135568,135569,135572],{},[289,135566,135567],{},"给图片"," 添加 ",[289,135570,135571],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135574,135575,135576],{},"2.把图片转换为块级元素 ",[289,135577,135578],{},"display: block",[14,135580,135581],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135583,135584],{},"img {",[14,135586,135587],{},"vertical-align:middle;",[14,135589,1085],{},[100,135591,135593],{"id":135592},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135595,135596],{},"效果：",[40,135598],{"style":126409,"src":135599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135601,135602],{},"单行文本溢出显示省略号--必须满足三个条件：",[120,135604,135606],{"className":126553,"code":135605,"language":126555,"meta":42,"style":42},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[126,135607,135608,135613,135619,135629,135634,135644],{"__ignoreMap":42},[129,135609,135610],{"class":131,"line":132},[129,135611,135612],{"class":198},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[129,135614,135615,135617],{"class":131,"line":51},[129,135616,40],{"class":51301},[129,135618,15587],{"class":139},[129,135620,135621,135623,135625,135627],{"class":131,"line":1194},[129,135622,135543],{"class":188},[129,135624,51438],{"class":139},[129,135626,135548],{"class":188},[129,135628,1305],{"class":139},[129,135630,135631],{"class":131,"line":1209},[129,135632,135633],{"class":198},"  \u002F* 或 *\u002F\n",[129,135635,135636,135638,135640,135642],{"class":131,"line":1215},[129,135637,128169],{"class":188},[129,135639,51438],{"class":139},[129,135641,60870],{"class":188},[129,135643,1305],{"class":139},[129,135645,135646],{"class":131,"line":1229},[129,135647,1579],{"class":139},[100,135649,135651],{"id":135650},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135653,135596],{},[40,135655],{"style":126409,"src":135656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135658,135659,135660,135663],{},"多行文本溢出显示省略号， ",[289,135661,135662],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[120,135665,135666],{"className":126553,"code":135605,"language":126555,"meta":42,"style":42},[126,135667,135668,135672,135678,135688,135692,135702],{"__ignoreMap":42},[129,135669,135670],{"class":131,"line":132},[129,135671,135612],{"class":198},[129,135673,135674,135676],{"class":131,"line":51},[129,135675,40],{"class":51301},[129,135677,15587],{"class":139},[129,135679,135680,135682,135684,135686],{"class":131,"line":1194},[129,135681,135543],{"class":188},[129,135683,51438],{"class":139},[129,135685,135548],{"class":188},[129,135687,1305],{"class":139},[129,135689,135690],{"class":131,"line":1209},[129,135691,135633],{"class":198},[129,135693,135694,135696,135698,135700],{"class":131,"line":1215},[129,135695,128169],{"class":188},[129,135697,51438],{"class":139},[129,135699,60870],{"class":188},[129,135701,1305],{"class":139},[129,135703,135704],{"class":131,"line":1229},[129,135705,1579],{"class":139},[14,135707,135708],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[71,135710,135712],{"id":135711},"_133-常见布局技巧","13.3 常见布局技巧",[14,135714,135715],{},[289,135716,135717],{},"巧妙利用一个技术更快更好的布局：",[83,135719,135720,135723,135726,135729],{},[86,135721,135722],{},"margin负值的运用",[86,135724,135725],{},"文字围绕浮动元素",[86,135727,135728],{},"行内块的巧妙运用",[86,135730,135731],{},"CSS三角强化",[100,135733,135735],{"id":135734},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135737,135738],{},"应用场景：",[40,135740],{"style":126409,"src":135741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[40,135743],{"style":126409,"src":135744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135746,135747],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135749,135750],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[120,135752,135753],{"className":126553,"code":129917,"language":126555,"meta":42,"style":42},[126,135754,135755,135759,135765,135781],{"__ignoreMap":42},[129,135756,135757],{"class":131,"line":132},[129,135758,129924],{"class":198},[129,135760,135761,135763],{"class":131,"line":51},[129,135762,51612],{"class":51301},[129,135764,15587],{"class":139},[129,135766,135767,135769,135771,135773,135775,135777,135779],{"class":131,"line":1194},[129,135768,70897],{"class":188},[129,135770,51438],{"class":139},[129,135772,357],{"class":188},[129,135774,51493],{"class":135},[129,135776,51522],{"class":188},[129,135778,129945],{"class":188},[129,135780,1305],{"class":139},[129,135782,135783],{"class":131,"line":1209},[129,135784,1579],{"class":139},[40,135786],{"style":126409,"src":135787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135789,135790],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[120,135792,135794],{"className":126553,"code":135793,"language":126555,"meta":42,"style":42},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[126,135795,135796,135801,135807,135817,135829,135841],{"__ignoreMap":42},[129,135797,135798],{"class":131,"line":132},[129,135799,135800],{"class":198},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[129,135802,135803,135805],{"class":131,"line":51},[129,135804,130401],{"class":1977},[129,135806,15587],{"class":139},[129,135808,135809,135811,135813,135815],{"class":131,"line":1194},[129,135810,132359],{"class":188},[129,135812,51438],{"class":139},[129,135814,54765],{"class":188},[129,135816,1305],{"class":139},[129,135818,135819,135821,135823,135825,135827],{"class":131,"line":1209},[129,135820,132373],{"class":188},[129,135822,51438],{"class":139},[129,135824,585],{"class":188},[129,135826,51493],{"class":135},[129,135828,1305],{"class":139},[129,135830,135831,135833,135835,135837,135839],{"class":131,"line":1215},[129,135832,132390],{"class":188},[129,135834,51438],{"class":139},[129,135836,839],{"class":188},[129,135838,51493],{"class":135},[129,135840,1305],{"class":139},[129,135842,135843],{"class":131,"line":1229},[129,135844,1579],{"class":139},[14,135846,135847],{},"加上上述代码会发现：",[40,135849],{"style":126409,"src":135850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135852,135853],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135855,135856],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[120,135858,135859],{"className":126553,"code":135793,"language":126555,"meta":42,"style":42},[126,135860,135861,135865,135871,135881,135893,135905],{"__ignoreMap":42},[129,135862,135863],{"class":131,"line":132},[129,135864,135800],{"class":198},[129,135866,135867,135869],{"class":131,"line":51},[129,135868,130401],{"class":1977},[129,135870,15587],{"class":139},[129,135872,135873,135875,135877,135879],{"class":131,"line":1194},[129,135874,132359],{"class":188},[129,135876,51438],{"class":139},[129,135878,54765],{"class":188},[129,135880,1305],{"class":139},[129,135882,135883,135885,135887,135889,135891],{"class":131,"line":1209},[129,135884,132373],{"class":188},[129,135886,51438],{"class":139},[129,135888,585],{"class":188},[129,135890,51493],{"class":135},[129,135892,1305],{"class":139},[129,135894,135895,135897,135899,135901,135903],{"class":131,"line":1215},[129,135896,132390],{"class":188},[129,135898,51438],{"class":139},[129,135900,839],{"class":188},[129,135902,51493],{"class":135},[129,135904,1305],{"class":139},[129,135906,135907],{"class":131,"line":1229},[129,135908,1579],{"class":139},[14,135910,135911],{},"解决方式2：",[14,135913,135914],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[120,135916,135918],{"className":126553,"code":135917,"language":126555,"meta":42,"style":42},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[126,135919,135920,135926,135936,135948,135960],{"__ignoreMap":42},[129,135921,135922,135924],{"class":131,"line":132},[129,135923,51612],{"class":51301},[129,135925,15587],{"class":139},[129,135927,135928,135930,135932,135934],{"class":131,"line":51},[129,135929,132359],{"class":188},[129,135931,51438],{"class":139},[129,135933,54765],{"class":188},[129,135935,1305],{"class":139},[129,135937,135938,135940,135942,135944,135946],{"class":131,"line":1194},[129,135939,132373],{"class":188},[129,135941,51438],{"class":139},[129,135943,585],{"class":188},[129,135945,51493],{"class":135},[129,135947,1305],{"class":139},[129,135949,135950,135952,135954,135956,135958],{"class":131,"line":1209},[129,135951,132390],{"class":188},[129,135953,51438],{"class":139},[129,135955,839],{"class":188},[129,135957,51493],{"class":135},[129,135959,1305],{"class":139},[129,135961,135962],{"class":131,"line":1215},[129,135963,1579],{"class":139},[100,135965,135967],{"id":135966},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,135969,135738],{},[40,135971],{"style":126409,"src":135972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,135974,135975],{},"实现结构图：",[40,135977],{"style":126409,"src":135978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,135980,135981],{},"巧妙运用浮动元素不会压住文字的特性",[14,135983,135984],{},"代码显示：",[120,135986,135988],{"className":126553,"code":135987,"language":126555,"meta":42,"style":42},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[126,135989,135990,135996,136006,136010,136015,136019,136025,136039],{"__ignoreMap":42},[129,135991,135992,135994],{"class":131,"line":132},[129,135993,130401],{"class":1977},[129,135995,15587],{"class":139},[129,135997,135998,136000,136002,136004],{"class":131,"line":51},[129,135999,131033],{"class":188},[129,136001,51438],{"class":139},[129,136003,23751],{"class":188},[129,136005,1305],{"class":139},[129,136007,136008],{"class":131,"line":1194},[129,136009,1579],{"class":139},[129,136011,136012],{"class":131,"line":1209},[129,136013,136014],{"class":139},"```Css\n",[129,136016,136017],{"class":131,"line":1215},[129,136018,130396],{"class":198},[129,136020,136021,136023],{"class":131,"line":1229},[129,136022,130401],{"class":1977},[129,136024,15587],{"class":139},[129,136026,136027,136029,136031,136033,136035,136037],{"class":131,"line":1235},[129,136028,70471],{"class":188},[129,136030,51438],{"class":139},[129,136032,331],{"class":188},[129,136034,51557],{"class":188},[129,136036,130416],{"class":139},[129,136038,130419],{"class":198},[129,136040,136041],{"class":131,"line":1326},[129,136042,1579],{"class":139},[14,136044,136045],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[120,136047,136050],{"className":136048,"code":136049,"language":5202},[5200],"\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",[126,136051,136049],{"__ignoreMap":42},[40,136053],{"style":126409,"src":136054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136056,136057],{},"最终展示结果：",[120,136059,136060],{"className":126553,"code":130389,"language":126555,"meta":42,"style":42},[126,136061,136062,136066,136072,136086],{"__ignoreMap":42},[129,136063,136064],{"class":131,"line":132},[129,136065,130396],{"class":198},[129,136067,136068,136070],{"class":131,"line":51},[129,136069,130401],{"class":1977},[129,136071,15587],{"class":139},[129,136073,136074,136076,136078,136080,136082,136084],{"class":131,"line":1194},[129,136075,70471],{"class":188},[129,136077,51438],{"class":139},[129,136079,331],{"class":188},[129,136081,51557],{"class":188},[129,136083,130416],{"class":139},[129,136085,130419],{"class":198},[129,136087,136088],{"class":131,"line":1209},[129,136089,1579],{"class":139},[40,136091],{"style":126409,"src":136092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[71,136094,136096],{"id":136095},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[100,136098,136100],{"id":136099},"_1341-原理","13.4.1 原理",[40,136102],{"style":126409,"src":136103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[120,136105,136106],{"className":126553,"code":130389,"language":126555,"meta":42,"style":42},[126,136107,136108,136112,136118,136132],{"__ignoreMap":42},[129,136109,136110],{"class":131,"line":132},[129,136111,130396],{"class":198},[129,136113,136114,136116],{"class":131,"line":51},[129,136115,130401],{"class":1977},[129,136117,15587],{"class":139},[129,136119,136120,136122,136124,136126,136128,136130],{"class":131,"line":1194},[129,136121,70471],{"class":188},[129,136123,51438],{"class":139},[129,136125,331],{"class":188},[129,136127,51557],{"class":188},[129,136129,130416],{"class":139},[129,136131,130419],{"class":198},[129,136133,136134],{"class":131,"line":1209},[129,136135,1579],{"class":139},[100,136137,136139],{"id":136138},"_1342-实例","13.4.2 实例",[40,136141],{"style":126409,"src":136142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[120,136144,136145],{"className":126553,"code":131019,"language":126555,"meta":42,"style":42},[126,136146,136147,136153,136163,136167,136173,136183],{"__ignoreMap":42},[129,136148,136149,136151],{"class":131,"line":132},[129,136150,131026],{"class":1977},[129,136152,15587],{"class":139},[129,136154,136155,136157,136159,136161],{"class":131,"line":51},[129,136156,131033],{"class":188},[129,136158,51438],{"class":139},[129,136160,23751],{"class":188},[129,136162,1305],{"class":139},[129,136164,136165],{"class":131,"line":1194},[129,136166,1579],{"class":139},[129,136168,136169,136171],{"class":131,"line":1209},[129,136170,131048],{"class":1977},[129,136172,15587],{"class":139},[129,136174,136175,136177,136179,136181],{"class":131,"line":1215},[129,136176,131033],{"class":188},[129,136178,51438],{"class":139},[129,136180,72523],{"class":188},[129,136182,1305],{"class":139},[129,136184,136185],{"class":131,"line":1229},[129,136186,1579],{"class":139},[71,136188,136190],{"id":136189},"_135-css的初始化","13.5 css的初始化",[14,136192,136193],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136195,136196],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136198,136199],{},"每个网页都必须首先进行 CSS初始化。",[14,136201,136202],{},"这里我们以 京东CSS初始化代码为例。",[14,136204,136205],{},"在网页右键查看网页源代码",[14,136207,136208],{},"找到css的link引入语句",[14,136210,136211],{},"然后ctrl+f 输入body",[14,136213,77227],{},[40,136215],{"style":126409,"src":136216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136218,77250],{},[40,136220],{"style":126409,"src":136221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136223,136224],{},"③打开了网页上传压缩的代码",[40,136226],{"style":126409,"src":136227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136229,136230],{},"④从body前可以查看这个网页的初始化代码",[14,136232,136233],{},[289,136234,136235],{},"Unicode编码字体：",[14,136237,136238],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136240,83208],{},[14,136242,136243],{},"黑体 \\9ED1\\4F53",[14,136245,136246],{},"宋体 \\5B8B\\4F53",[14,136248,136249],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5141,136251,136252],{},"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":42,"searchDepth":51,"depth":51,"links":136254},[136255,136256,136263,136267,136271],{"id":135052,"depth":51,"text":135053},{"id":135174,"depth":51,"text":135175,"children":136257},[136258,136259,136260,136261,136262],{"id":135178,"depth":1194,"text":135179},{"id":135331,"depth":1194,"text":135332},{"id":135450,"depth":1194,"text":135451},{"id":135592,"depth":1194,"text":135593},{"id":135650,"depth":1194,"text":135651},{"id":135711,"depth":51,"text":135712,"children":136264},[136265,136266],{"id":135734,"depth":1194,"text":135735},{"id":135966,"depth":1194,"text":135967},{"id":136095,"depth":51,"text":136096,"children":136268},[136269,136270],{"id":136099,"depth":1194,"text":136100},{"id":136138,"depth":1194,"text":136139},{"id":136189,"depth":51,"text":136190},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135044,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136278,"title":136279,"body":136280,"description":53,"extension":54,"meta":137966,"navigation":56,"path":137967,"seo":137968,"stem":137969,"__hash__":137970},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136281,"toc":137955},[136282,136285,136289,136293,136296,136303,136306,136309,136347,136350,136352,136366,136370,136379,136383,136388,136391,136394,136397,136432,136437,136440,136470,136473,136478,136481,136484,136514,136517,136571,136574,136578,136583,136595,136598,136602,136632,136635,136640,136643,136673,136676,136680,136697,136701,136705,136708,136741,136744,136748,136751,136754,136757,136760,136763,136874,136877,136880,136883,136985,136988,136992,136996,137000,137003,137043,137046,137048,137064,137068,137071,137076,137157,137160,137163,137289,137294,137297,137305,137308,137313,137398,137401,137405,137408,137411,137415,137435,137440,137524,137527,137532,137535,137538,137616,137619,137622,137625,137628,137631,137636,137639,137642,137714,137717,137722,137725,137822,137825,137831,137834,137837,137840,137843,137846,137849,137852,137855,137859,137864,137867,137900,137905,137908,137949,137952],[10,136283,136279],{"id":136284},"_14-html5与css3新特性",[71,136286,136288],{"id":136287},"_141-html5的新特性","14.1 HTML5的新特性",[100,136290,136292],{"id":136291},"_1411-基本标签","14.1.1 基本标签",[14,136294,136295],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136297,136298,136299,136302],{},"这些新特性都有兼容性问题，基本是 ",[289,136300,136301],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136304,136305],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136307,136308],{},"现在使用的是新特性：",[1146,136310,136311,136317,136323,136329,136335,136341],{},[86,136312,136313,136316],{},[126,136314,136315],{},"\u003Cheader>"," 头部标签",[86,136318,136319,136322],{},[126,136320,136321],{},"\u003Cnav>"," 导航标签",[86,136324,136325,136328],{},[126,136326,136327],{},"\u003Carticle>"," 内容标签",[86,136330,136331,136334],{},[126,136332,136333],{},"\u003Csection>"," 定义文档某个区域",[86,136336,136337,136340],{},[126,136338,136339],{},"\u003Caside>"," 侧边栏标签",[86,136342,136343,136346],{},[126,136344,136345],{},"\u003Cfooter>"," 尾部标签",[40,136348],{"style":126409,"src":136349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136351,169],{},[1146,136353,136354,136357,136360,136363],{},[86,136355,136356],{},"这种语义化标准主要是针对搜索引擎的",[86,136358,136359],{},"这些标签页面中可以经常使用",[86,136361,136362],{},"在IE9中，需要把这些元素转换为块级元素",[86,136364,136365],{},"移动端更喜欢使用这些标签",[100,136367,136369],{"id":136368},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136371,136372,136373,136375,136376,136378],{},"音频 ",[289,136374,28175],{}," 和视频 ",[289,136377,28184],{}," 两个标签",[22013,136380,136382],{"id":136381},"_14121-视频标签-video","14.1.2.1 视频标签- video",[83,136384,136385],{},[86,136386,136387],{},"支持格式：",[40,136389],{"style":126409,"src":136390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136392,136393],{},"尽量使用MP4，兼容性好",[14,136395,136396],{},"用MP4就可以",[120,136398,136400],{"className":127300,"code":136399,"language":127302,"meta":42,"style":42},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[126,136401,136402],{"__ignoreMap":42},[129,136403,136404,136406,136408,136410,136412,136415,136417,136420,136423,136426,136428,136430],{"class":131,"line":132},[129,136405,1049],{"class":139},[129,136407,28184],{"class":51301},[129,136409,55240],{"class":1977},[129,136411,185],{"class":139},[129,136413,136414],{"class":244},"\"movie.mp4\"",[129,136416,92424],{"class":1977},[129,136418,136419],{"class":1977}," autoplay",[129,136421,136422],{"class":1977}," muted",[129,136424,136425],{"class":1977}," loop",[129,136427,55315],{"class":139},[129,136429,28184],{"class":51301},[129,136431,51308],{"class":139},[83,136433,136434],{"start":51},[86,136435,136436],{},"兼容写法",[14,136438,136439],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[120,136441,136442],{"className":127300,"code":136399,"language":127302,"meta":42,"style":42},[126,136443,136444],{"__ignoreMap":42},[129,136445,136446,136448,136450,136452,136454,136456,136458,136460,136462,136464,136466,136468],{"class":131,"line":132},[129,136447,1049],{"class":139},[129,136449,28184],{"class":51301},[129,136451,55240],{"class":1977},[129,136453,185],{"class":139},[129,136455,136414],{"class":244},[129,136457,92424],{"class":1977},[129,136459,136419],{"class":1977},[129,136461,136422],{"class":1977},[129,136463,136425],{"class":1977},[129,136465,55315],{"class":139},[129,136467,28184],{"class":51301},[129,136469,51308],{"class":139},[14,136471,136472],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[83,136474,136475],{"start":1194},[86,136476,136477],{},"video常用属性",[40,136479],{"style":126409,"src":136480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136482,136483],{},"poster属性后面是跟的等待加载图片的地址",[120,136485,136486],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,136487,136488],{"__ignoreMap":42},[129,136489,136490,136492,136494,136496,136498,136500,136502,136504,136506,136508,136510,136512],{"class":131,"line":132},[129,136491,1049],{"class":139},[129,136493,40],{"class":51301},[129,136495,55240],{"class":1977},[129,136497,185],{"class":139},[129,136499,134070],{"class":244},[129,136501,55248],{"class":1977},[129,136503,185],{"class":139},[129,136505,134077],{"class":244},[129,136507,134080],{"class":1977},[129,136509,185],{"class":139},[129,136511,134085],{"class":244},[129,136513,51308],{"class":139},[14,136515,136516],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[120,136518,136520],{"className":126553,"code":136519,"language":126555,"meta":42,"style":42},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[126,136521,136522,136527,136533,136557,136562,136567],{"__ignoreMap":42},[129,136523,136524],{"class":131,"line":132},[129,136525,136526],{"class":198},"\u002F* 2D 位移 *\u002F\n",[129,136528,136529,136531],{"class":131,"line":51},[129,136530,51612],{"class":51301},[129,136532,15587],{"class":139},[129,136534,136535,136538,136540,136543,136545,136547,136549,136551,136553,136555],{"class":131,"line":1194},[129,136536,136537],{"class":188},"  transform",[129,136539,51438],{"class":139},[129,136541,136542],{"class":188},"translate",[129,136544,140],{"class":139},[129,136546,450],{"class":188},[129,136548,51493],{"class":135},[129,136550,12450],{"class":139},[129,136552,795],{"class":188},[129,136554,51493],{"class":135},[129,136556,2733],{"class":139},[129,136558,136559],{"class":131,"line":1209},[129,136560,136561],{"class":198},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[129,136563,136564],{"class":131,"line":1215},[129,136565,136566],{"class":198},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[129,136568,136569],{"class":131,"line":1229},[129,136570,1579],{"class":139},[14,136572,136573],{},"muted:自动静音属性",[22013,136575,136577],{"id":136576},"_14122-音频标签audio","14.1.2.2 音频标签audio",[83,136579,136580],{},[86,136581,136582],{},"基本使用",[14,136584,136585,136586,136591,136592],{},"当前 ",[289,136587,136588],{},[126,136589,136590],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[289,136593,136594],{},"mp3格式",[40,136596],{"style":126409,"src":136597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[83,136599,136600],{"start":51},[86,136601,136436],{},[120,136603,136604],{"className":127300,"code":136399,"language":127302,"meta":42,"style":42},[126,136605,136606],{"__ignoreMap":42},[129,136607,136608,136610,136612,136614,136616,136618,136620,136622,136624,136626,136628,136630],{"class":131,"line":132},[129,136609,1049],{"class":139},[129,136611,28184],{"class":51301},[129,136613,55240],{"class":1977},[129,136615,185],{"class":139},[129,136617,136414],{"class":244},[129,136619,92424],{"class":1977},[129,136621,136419],{"class":1977},[129,136623,136422],{"class":1977},[129,136625,136425],{"class":1977},[129,136627,55315],{"class":139},[129,136629,28184],{"class":51301},[129,136631,51308],{"class":139},[14,136633,136634],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[83,136636,136637],{"start":1194},[86,136638,136639],{},"常用属性",[40,136641],{"style":126409,"src":136642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[120,136644,136645],{"className":127300,"code":136399,"language":127302,"meta":42,"style":42},[126,136646,136647],{"__ignoreMap":42},[129,136648,136649,136651,136653,136655,136657,136659,136661,136663,136665,136667,136669,136671],{"class":131,"line":132},[129,136650,1049],{"class":139},[129,136652,28184],{"class":51301},[129,136654,55240],{"class":1977},[129,136656,185],{"class":139},[129,136658,136414],{"class":244},[129,136660,92424],{"class":1977},[129,136662,136419],{"class":1977},[129,136664,136422],{"class":1977},[129,136666,136425],{"class":1977},[129,136668,55315],{"class":139},[129,136670,28184],{"class":51301},[129,136672,51308],{"class":139},[14,136674,136675],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22013,136677,136679],{"id":136678},"_14123-总结","14.1.2.3 总结",[1146,136681,136682,136685,136688,136691,136694],{},[86,136683,136684],{},"音频标签和视频标签使用方式基本一致",[86,136686,136687],{},"浏览器支持情况不同",[86,136689,136690],{},"谷歌浏览器把音频和视频自动播放禁止了",[86,136692,136693],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[86,136695,136696],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[100,136698,136700],{"id":136699},"_1413-表单元素","14.1.3 表单元素",[22013,136702,136704],{"id":136703},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[40,136706],{"style":126409,"src":136707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[120,136709,136711],{"className":127300,"code":136710,"language":127302,"meta":42,"style":42},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[126,136712,136713],{"__ignoreMap":42},[129,136714,136715,136717,136719,136721,136723,136725,136727,136729,136732,136734,136736,136739],{"class":131,"line":132},[129,136716,1049],{"class":139},[129,136718,53822],{"class":51301},[129,136720,53825],{"class":1977},[129,136722,185],{"class":139},[129,136724,62700],{"class":244},[129,136726,14935],{"class":1977},[129,136728,185],{"class":139},[129,136730,136731],{"class":244},"\"username\"",[129,136733,61021],{"class":1977},[129,136735,185],{"class":139},[129,136737,136738],{"class":244},"\"请输入用户名\"",[129,136740,51308],{"class":139},[40,136742],{"style":126409,"src":136743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22013,136745,136747],{"id":136746},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[40,136749],{"style":126409,"src":136750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136752,136753],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136755,136756],{},"快捷操作：",[40,136758],{"style":126409,"src":136759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136761,136762],{},"例子1：",[120,136764,136766],{"className":127300,"code":136765,"language":127302,"meta":42,"style":42},"\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",[126,136767,136768,136791,136818,136847,136866],{"__ignoreMap":42},[129,136769,136770,136772,136774,136776,136778,136781,136784,136786,136789],{"class":131,"line":132},[129,136771,1049],{"class":139},[129,136773,66626],{"class":51301},[129,136775,66629],{"class":1977},[129,136777,185],{"class":139},[129,136779,136780],{"class":244},"\"\u002Fsubmit\"",[129,136782,136783],{"class":1977}," method",[129,136785,185],{"class":139},[129,136787,136788],{"class":244},"\"post\"",[129,136790,51308],{"class":139},[129,136792,136793,136795,136797,136799,136801,136803,136805,136807,136809,136811,136813,136816],{"class":131,"line":51},[129,136794,52145],{"class":139},[129,136796,53822],{"class":51301},[129,136798,53825],{"class":1977},[129,136800,185],{"class":139},[129,136802,62700],{"class":244},[129,136804,14935],{"class":1977},[129,136806,185],{"class":139},[129,136808,136731],{"class":244},[129,136810,61021],{"class":1977},[129,136812,185],{"class":139},[129,136814,136815],{"class":244},"\"用户名\"",[129,136817,51308],{"class":139},[129,136819,136820,136822,136824,136826,136828,136831,136833,136835,136838,136840,136842,136845],{"class":131,"line":1194},[129,136821,52145],{"class":139},[129,136823,53822],{"class":51301},[129,136825,53825],{"class":1977},[129,136827,185],{"class":139},[129,136829,136830],{"class":244},"\"password\"",[129,136832,14935],{"class":1977},[129,136834,185],{"class":139},[129,136836,136837],{"class":244},"\"pwd\"",[129,136839,61021],{"class":1977},[129,136841,185],{"class":139},[129,136843,136844],{"class":244},"\"密码\"",[129,136846,51308],{"class":139},[129,136848,136849,136851,136853,136855,136857,136859,136862,136864],{"class":131,"line":1209},[129,136850,52145],{"class":139},[129,136852,53888],{"class":51301},[129,136854,53825],{"class":1977},[129,136856,185],{"class":139},[129,136858,66649],{"class":244},[129,136860,136861],{"class":139},">提交\u003C\u002F",[129,136863,53888],{"class":51301},[129,136865,51308],{"class":139},[129,136867,136868,136870,136872],{"class":131,"line":1215},[129,136869,51786],{"class":139},[129,136871,66626],{"class":51301},[129,136873,51308],{"class":139},[40,136875],{"style":126409,"src":136876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136878,136879],{},"value是表单域的内容",[14,136881,136882],{},"例子2：",[120,136884,136885],{"className":127300,"code":136765,"language":127302,"meta":42,"style":42},[126,136886,136887,136907,136933,136959,136977],{"__ignoreMap":42},[129,136888,136889,136891,136893,136895,136897,136899,136901,136903,136905],{"class":131,"line":132},[129,136890,1049],{"class":139},[129,136892,66626],{"class":51301},[129,136894,66629],{"class":1977},[129,136896,185],{"class":139},[129,136898,136780],{"class":244},[129,136900,136783],{"class":1977},[129,136902,185],{"class":139},[129,136904,136788],{"class":244},[129,136906,51308],{"class":139},[129,136908,136909,136911,136913,136915,136917,136919,136921,136923,136925,136927,136929,136931],{"class":131,"line":51},[129,136910,52145],{"class":139},[129,136912,53822],{"class":51301},[129,136914,53825],{"class":1977},[129,136916,185],{"class":139},[129,136918,62700],{"class":244},[129,136920,14935],{"class":1977},[129,136922,185],{"class":139},[129,136924,136731],{"class":244},[129,136926,61021],{"class":1977},[129,136928,185],{"class":139},[129,136930,136815],{"class":244},[129,136932,51308],{"class":139},[129,136934,136935,136937,136939,136941,136943,136945,136947,136949,136951,136953,136955,136957],{"class":131,"line":1194},[129,136936,52145],{"class":139},[129,136938,53822],{"class":51301},[129,136940,53825],{"class":1977},[129,136942,185],{"class":139},[129,136944,136830],{"class":244},[129,136946,14935],{"class":1977},[129,136948,185],{"class":139},[129,136950,136837],{"class":244},[129,136952,61021],{"class":1977},[129,136954,185],{"class":139},[129,136956,136844],{"class":244},[129,136958,51308],{"class":139},[129,136960,136961,136963,136965,136967,136969,136971,136973,136975],{"class":131,"line":1209},[129,136962,52145],{"class":139},[129,136964,53888],{"class":51301},[129,136966,53825],{"class":1977},[129,136968,185],{"class":139},[129,136970,66649],{"class":244},[129,136972,136861],{"class":139},[129,136974,53888],{"class":51301},[129,136976,51308],{"class":139},[129,136978,136979,136981,136983],{"class":131,"line":1215},[129,136980,51786],{"class":139},[129,136982,66626],{"class":51301},[129,136984,51308],{"class":139},[40,136986],{"style":126409,"src":136987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[71,136989,136991],{"id":136990},"_142-css新特性","14.2 CSS新特性",[100,136993,136995],{"id":136994},"_1421-新增选择器","14.2.1 新增选择器",[22013,136997,136999],{"id":136998},"_14211-属性选择器","14.2.1.1 属性选择器",[40,137001],{"style":126409,"src":137002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[120,137004,137006],{"className":126553,"code":137005,"language":126555,"meta":42,"style":42},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[126,137007,137008,137023,137039],{"__ignoreMap":42},[129,137009,137010,137012,137014,137016,137018,137020],{"class":131,"line":132},[129,137011,53822],{"class":51301},[129,137013,1029],{"class":139},[129,137015,103108],{"class":1977},[129,137017,185],{"class":135},[129,137019,62700],{"class":244},[129,137021,137022],{"class":139},"] {\n",[129,137024,137025,137027,137029,137031,137033,137035,137037],{"class":131,"line":51},[129,137026,70897],{"class":188},[129,137028,51438],{"class":139},[129,137030,357],{"class":188},[129,137032,51493],{"class":135},[129,137034,51522],{"class":188},[129,137036,130133],{"class":188},[129,137038,1305],{"class":139},[129,137040,137041],{"class":131,"line":1194},[129,137042,1579],{"class":139},[40,137044],{"style":126409,"src":137045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137047,169],{},[1146,137049,137050,137053,137056,137059],{},[86,137051,137052],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[86,137054,137055],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[86,137057,137058],{},"属性选择器也可以选择出来自定义的属性",[86,137060,137061,137063],{},[289,137062,9040],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22013,137065,137067],{"id":137066},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[40,137069],{"style":126409,"src":137070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[83,137072,137073],{},[86,137074,137075],{},"fist-child",[120,137077,137079],{"className":126553,"code":137078,"language":126555,"meta":42,"style":42},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[126,137080,137081,137086,137101,137121,137139],{"__ignoreMap":42},[129,137082,137083],{"class":131,"line":132},[129,137084,137085],{"class":198},"\u002F* 属性选择器 *\u002F\n",[129,137087,137088,137090,137092,137094,137096,137098],{"class":131,"line":51},[129,137089,53822],{"class":51301},[129,137091,1029],{"class":139},[129,137093,103108],{"class":1977},[129,137095,185],{"class":135},[129,137097,62700],{"class":244},[129,137099,137100],{"class":139},"] { }\n",[129,137102,137103,137105,137107,137109,137112,137115,137118],{"class":131,"line":1194},[129,137104,53822],{"class":51301},[129,137106,1029],{"class":139},[129,137108,14709],{"class":1977},[129,137110,137111],{"class":135},"^=",[129,137113,137114],{"class":244},"\"icon\"",[129,137116,137117],{"class":139},"] { }  ",[129,137119,137120],{"class":198},"\u002F* 以 icon 开头 *\u002F\n",[129,137122,137123,137125,137127,137129,137132,137134,137136],{"class":131,"line":1209},[129,137124,53822],{"class":51301},[129,137126,1029],{"class":139},[129,137128,14709],{"class":1977},[129,137130,137131],{"class":135},"$=",[129,137133,137114],{"class":244},[129,137135,137117],{"class":139},[129,137137,137138],{"class":198},"\u002F* 以 icon 结尾 *\u002F\n",[129,137140,137141,137143,137145,137147,137150,137152,137154],{"class":131,"line":1215},[129,137142,53822],{"class":51301},[129,137144,1029],{"class":139},[129,137146,14709],{"class":1977},[129,137148,137149],{"class":135},"*=",[129,137151,137114],{"class":244},[129,137153,137117],{"class":139},[129,137155,137156],{"class":198},"\u002F* 包含 icon *\u002F\n",[14,137158,137159],{},"ul的第一个儿子文本为红色",[14,137161,137162],{},"一定要在冒号前加空格，不然就是选中所有的了",[120,137164,137166],{"className":126553,"code":137165,"language":126555,"meta":42,"style":42},".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",[126,137167,137168,137174,137184,137188,137192,137197,137210,137223,137239,137256,137273],{"__ignoreMap":42},[129,137169,137170,137172],{"class":131,"line":132},[129,137171,126844],{"class":1977},[129,137173,15587],{"class":139},[129,137175,137176,137178,137180,137182],{"class":131,"line":51},[129,137177,70906],{"class":188},[129,137179,51438],{"class":139},[129,137181,57422],{"class":188},[129,137183,1305],{"class":139},[129,137185,137186],{"class":131,"line":1194},[129,137187,1579],{"class":139},[129,137189,137190],{"class":131,"line":1209},[129,137191,136014],{"class":139},[129,137193,137194],{"class":131,"line":1215},[129,137195,137196],{"class":198},"\u002F* 结构伪类选择器 *\u002F\n",[129,137198,137199,137201,137204,137207],{"class":131,"line":1229},[129,137200,86],{"class":51301},[129,137202,137203],{"class":1977},":first-child",[129,137205,137206],{"class":139}," { }           ",[129,137208,137209],{"class":198},"\u002F* 第一个 *\u002F\n",[129,137211,137212,137214,137217,137220],{"class":131,"line":1235},[129,137213,86],{"class":51301},[129,137215,137216],{"class":1977},":last-child",[129,137218,137219],{"class":139}," { }            ",[129,137221,137222],{"class":198},"\u002F* 最后一个 *\u002F\n",[129,137224,137225,137227,137229,137231,137233,137236],{"class":131,"line":1326},[129,137226,86],{"class":51301},[129,137228,129467],{"class":1977},[129,137230,140],{"class":139},[129,137232,217],{"class":188},[129,137234,137235],{"class":139},") { }          ",[129,137237,137238],{"class":198},"\u002F* 第2个 *\u002F\n",[129,137240,137241,137243,137245,137247,137250,137253],{"class":131,"line":1332},[129,137242,86],{"class":51301},[129,137244,129467],{"class":1977},[129,137246,140],{"class":139},[129,137248,137249],{"class":188},"2n",[129,137251,137252],{"class":139},") { }         ",[129,137254,137255],{"class":198},"\u002F* 偶数 *\u002F\n",[129,137257,137258,137260,137262,137264,137267,137270],{"class":131,"line":1344},[129,137259,86],{"class":51301},[129,137261,129467],{"class":1977},[129,137263,140],{"class":139},[129,137265,137266],{"class":188},"2n+1",[129,137268,137269],{"class":139},") { }       ",[129,137271,137272],{"class":198},"\u002F* 奇数 *\u002F\n",[129,137274,137275,137277,137279,137281,137284,137286],{"class":131,"line":1626},[129,137276,86],{"class":51301},[129,137278,129467],{"class":1977},[129,137280,140],{"class":139},[129,137282,137283],{"class":188},"-n+3",[129,137285,137269],{"class":139},[129,137287,137288],{"class":198},"\u002F* 前3个 *\u002F\n",[51612,137290,137293],{"className":137291},[137292],"example","\n  示例内容\n",[14,137295,137296],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1146,137298,137299],{},[86,137300,137301,137304],{},[126,137302,137303],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137306,137307],{},"也就是说它选择的是熊大",[83,137309,137310],{"start":1229},[86,137311,137312],{},"权重",[120,137314,137316],{"className":126553,"code":137315,"language":126555,"meta":42,"style":42},"\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",[126,137317,137318,137322,137332,137342,137356,137370,137384],{"__ignoreMap":42},[129,137319,137320],{"class":131,"line":132},[129,137321,137196],{"class":198},[129,137323,137324,137326,137328,137330],{"class":131,"line":51},[129,137325,86],{"class":51301},[129,137327,137203],{"class":1977},[129,137329,137206],{"class":139},[129,137331,137209],{"class":198},[129,137333,137334,137336,137338,137340],{"class":131,"line":1194},[129,137335,86],{"class":51301},[129,137337,137216],{"class":1977},[129,137339,137219],{"class":139},[129,137341,137222],{"class":198},[129,137343,137344,137346,137348,137350,137352,137354],{"class":131,"line":1209},[129,137345,86],{"class":51301},[129,137347,129467],{"class":1977},[129,137349,140],{"class":139},[129,137351,217],{"class":188},[129,137353,137235],{"class":139},[129,137355,137238],{"class":198},[129,137357,137358,137360,137362,137364,137366,137368],{"class":131,"line":1215},[129,137359,86],{"class":51301},[129,137361,129467],{"class":1977},[129,137363,140],{"class":139},[129,137365,137249],{"class":188},[129,137367,137252],{"class":139},[129,137369,137255],{"class":198},[129,137371,137372,137374,137376,137378,137380,137382],{"class":131,"line":1229},[129,137373,86],{"class":51301},[129,137375,129467],{"class":1977},[129,137377,140],{"class":139},[129,137379,137266],{"class":188},[129,137381,137269],{"class":139},[129,137383,137272],{"class":198},[129,137385,137386,137388,137390,137392,137394,137396],{"class":131,"line":1235},[129,137387,86],{"class":51301},[129,137389,129467],{"class":1977},[129,137391,140],{"class":139},[129,137393,137283],{"class":188},[129,137395,137269],{"class":139},[129,137397,137288],{"class":198},[14,137399,137400],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22013,137402,137404],{"id":137403},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137406,137407],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[40,137409],{"style":126409,"src":137410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[83,137412,137413],{},[86,137414,169],{},[1146,137416,137417,137420,137423,137426,137429,137432],{},[86,137418,137419],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[86,137421,137422],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[86,137424,137425],{},"语法： element::before {}",[86,137427,137428],{},"before 和 after 必须有 content 属性",[86,137430,137431],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[86,137433,137434],{},"伪元素选择器和标签选择器一样，权重为 1",[83,137436,137437],{"start":51},[86,137438,137439],{},"实例",[120,137441,137442],{"className":126553,"code":137315,"language":126555,"meta":42,"style":42},[126,137443,137444,137448,137458,137468,137482,137496,137510],{"__ignoreMap":42},[129,137445,137446],{"class":131,"line":132},[129,137447,137196],{"class":198},[129,137449,137450,137452,137454,137456],{"class":131,"line":51},[129,137451,86],{"class":51301},[129,137453,137203],{"class":1977},[129,137455,137206],{"class":139},[129,137457,137209],{"class":198},[129,137459,137460,137462,137464,137466],{"class":131,"line":1194},[129,137461,86],{"class":51301},[129,137463,137216],{"class":1977},[129,137465,137219],{"class":139},[129,137467,137222],{"class":198},[129,137469,137470,137472,137474,137476,137478,137480],{"class":131,"line":1209},[129,137471,86],{"class":51301},[129,137473,129467],{"class":1977},[129,137475,140],{"class":139},[129,137477,217],{"class":188},[129,137479,137235],{"class":139},[129,137481,137238],{"class":198},[129,137483,137484,137486,137488,137490,137492,137494],{"class":131,"line":1215},[129,137485,86],{"class":51301},[129,137487,129467],{"class":1977},[129,137489,140],{"class":139},[129,137491,137249],{"class":188},[129,137493,137252],{"class":139},[129,137495,137255],{"class":198},[129,137497,137498,137500,137502,137504,137506,137508],{"class":131,"line":1229},[129,137499,86],{"class":51301},[129,137501,129467],{"class":1977},[129,137503,140],{"class":139},[129,137505,137266],{"class":188},[129,137507,137269],{"class":139},[129,137509,137272],{"class":198},[129,137511,137512,137514,137516,137518,137520,137522],{"class":131,"line":1235},[129,137513,86],{"class":51301},[129,137515,129467],{"class":1977},[129,137517,140],{"class":139},[129,137519,137283],{"class":188},[129,137521,137269],{"class":139},[129,137523,137288],{"class":198},[40,137525],{"style":126409,"src":137526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[83,137528,137529],{"start":1194},[86,137530,137531],{},"使用场景1",[40,137533],{"style":126409,"src":137534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137536,137537],{},"不需要再加盒子来整红色那部分了",[120,137539,137541],{"className":126553,"code":137540,"language":126555,"meta":42,"style":42},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[126,137542,137543,137548,137557,137568,137578,137582,137591,137602,137612],{"__ignoreMap":42},[129,137544,137545],{"class":131,"line":132},[129,137546,137547],{"class":198},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[129,137549,137550,137552,137555],{"class":131,"line":51},[129,137551,51612],{"class":51301},[129,137553,137554],{"class":1977},"::before",[129,137556,15587],{"class":139},[129,137558,137559,137562,137564,137566],{"class":131,"line":1194},[129,137560,137561],{"class":188},"  content",[129,137563,51438],{"class":139},[129,137565,7667],{"class":244},[129,137567,1305],{"class":139},[129,137569,137570,137572,137574,137576],{"class":131,"line":1209},[129,137571,128169],{"class":188},[129,137573,51438],{"class":139},[129,137575,60870],{"class":188},[129,137577,1305],{"class":139},[129,137579,137580],{"class":131,"line":1215},[129,137581,1579],{"class":139},[129,137583,137584,137586,137589],{"class":131,"line":1229},[129,137585,51612],{"class":51301},[129,137587,137588],{"class":1977},"::after",[129,137590,15587],{"class":139},[129,137592,137593,137595,137597,137600],{"class":131,"line":1235},[129,137594,137561],{"class":188},[129,137596,51438],{"class":139},[129,137598,137599],{"class":244},"\"→\"",[129,137601,1305],{"class":139},[129,137603,137604,137606,137608,137610],{"class":131,"line":1326},[129,137605,70906],{"class":188},[129,137607,51438],{"class":139},[129,137609,62071],{"class":188},[129,137611,1305],{"class":139},[129,137613,137614],{"class":131,"line":1332},[129,137615,1579],{"class":139},[40,137617],{"style":126409,"src":137618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137620,137621],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[40,137623],{"style":126409,"src":137624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137626,137627],{},"但是在引用时需要先转义一下",[14,137629,137630],{},"content='\\e930'",[83,137632,137633],{"start":1209},[86,137634,137635],{},"使用场景2",[14,137637,137638],{},"仿土豆效果",[14,137640,137641],{},"通过使用伪元素选择器可以减少body中盒子的数量",[120,137643,137644],{"className":126553,"code":137540,"language":126555,"meta":42,"style":42},[126,137645,137646,137650,137658,137668,137678,137682,137690,137700,137710],{"__ignoreMap":42},[129,137647,137648],{"class":131,"line":132},[129,137649,137547],{"class":198},[129,137651,137652,137654,137656],{"class":131,"line":51},[129,137653,51612],{"class":51301},[129,137655,137554],{"class":1977},[129,137657,15587],{"class":139},[129,137659,137660,137662,137664,137666],{"class":131,"line":1194},[129,137661,137561],{"class":188},[129,137663,51438],{"class":139},[129,137665,7667],{"class":244},[129,137667,1305],{"class":139},[129,137669,137670,137672,137674,137676],{"class":131,"line":1209},[129,137671,128169],{"class":188},[129,137673,51438],{"class":139},[129,137675,60870],{"class":188},[129,137677,1305],{"class":139},[129,137679,137680],{"class":131,"line":1215},[129,137681,1579],{"class":139},[129,137683,137684,137686,137688],{"class":131,"line":1229},[129,137685,51612],{"class":51301},[129,137687,137588],{"class":1977},[129,137689,15587],{"class":139},[129,137691,137692,137694,137696,137698],{"class":131,"line":1235},[129,137693,137561],{"class":188},[129,137695,51438],{"class":139},[129,137697,137599],{"class":244},[129,137699,1305],{"class":139},[129,137701,137702,137704,137706,137708],{"class":131,"line":1326},[129,137703,70906],{"class":188},[129,137705,51438],{"class":139},[129,137707,62071],{"class":188},[129,137709,1305],{"class":139},[129,137711,137712],{"class":131,"line":1332},[129,137713,1579],{"class":139},[40,137715],{"style":126409,"src":137716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[83,137718,137719],{"start":1215},[86,137720,137721],{},"使用场景3",[14,137723,137724],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[120,137726,137728],{"className":126553,"code":137727,"language":126555,"meta":42,"style":42},".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",[126,137729,137730,137736,137746,137750,137754,137758,137766,137776,137786,137790,137798,137808,137818],{"__ignoreMap":42},[129,137731,137732,137734],{"class":131,"line":132},[129,137733,130401],{"class":1977},[129,137735,15587],{"class":139},[129,137737,137738,137740,137742,137744],{"class":131,"line":51},[129,137739,131033],{"class":188},[129,137741,51438],{"class":139},[129,137743,23751],{"class":188},[129,137745,1305],{"class":139},[129,137747,137748],{"class":131,"line":1194},[129,137749,1579],{"class":139},[129,137751,137752],{"class":131,"line":1209},[129,137753,136014],{"class":139},[129,137755,137756],{"class":131,"line":1215},[129,137757,137547],{"class":198},[129,137759,137760,137762,137764],{"class":131,"line":1229},[129,137761,51612],{"class":51301},[129,137763,137554],{"class":1977},[129,137765,15587],{"class":139},[129,137767,137768,137770,137772,137774],{"class":131,"line":1235},[129,137769,137561],{"class":188},[129,137771,51438],{"class":139},[129,137773,7667],{"class":244},[129,137775,1305],{"class":139},[129,137777,137778,137780,137782,137784],{"class":131,"line":1326},[129,137779,128169],{"class":188},[129,137781,51438],{"class":139},[129,137783,60870],{"class":188},[129,137785,1305],{"class":139},[129,137787,137788],{"class":131,"line":1332},[129,137789,1579],{"class":139},[129,137791,137792,137794,137796],{"class":131,"line":1344},[129,137793,51612],{"class":51301},[129,137795,137588],{"class":1977},[129,137797,15587],{"class":139},[129,137799,137800,137802,137804,137806],{"class":131,"line":1626},[129,137801,137561],{"class":188},[129,137803,51438],{"class":139},[129,137805,137599],{"class":244},[129,137807,1305],{"class":139},[129,137809,137810,137812,137814,137816],{"class":131,"line":1631},[129,137811,70906],{"class":188},[129,137813,51438],{"class":139},[129,137815,62071],{"class":188},[129,137817,1305],{"class":139},[129,137819,137820],{"class":131,"line":1637},[129,137821,1579],{"class":139},[14,137823,137824],{},"div {\nmargin: 0 auto;\n}",[120,137826,137829],{"className":137827,"code":137828,"language":5202},[5200],"\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",[126,137830,137828],{"__ignoreMap":42},[14,137832,137833],{},"如果想让多个元素都发生变化",[14,137835,137836],{},"不能如下操作：",[14,137838,137839],{},"transition: width 2s ease 0.5s;",[14,137841,137842],{},"transition: height 2s ease 0.5s;不对！！！",[14,137844,137845],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137847,137848],{},"使用如下：加逗号隔开",[14,137850,137851],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137853,137854],{},"transition all 2s ease;",[100,137856,137858],{"id":137857},"_1426-过渡练习","14.2.6 过渡练习",[83,137860,137861],{},[86,137862,137863],{},"进度条",[40,137865],{"style":126409,"src":137866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[120,137868,137870],{"className":126553,"code":137869,"language":126555,"meta":42,"style":42},"div {\n  transition: all 0.3s ease;\n}\n",[126,137871,137872,137878,137896],{"__ignoreMap":42},[129,137873,137874,137876],{"class":131,"line":132},[129,137875,51612],{"class":51301},[129,137877,15587],{"class":139},[129,137879,137880,137883,137885,137887,137890,137892,137894],{"class":131,"line":51},[129,137881,137882],{"class":188},"  transition",[129,137884,51438],{"class":139},[129,137886,28122],{"class":188},[129,137888,137889],{"class":188}," 0.3",[129,137891,834],{"class":135},[129,137893,78681],{"class":188},[129,137895,1305],{"class":139},[129,137897,137898],{"class":131,"line":1194},[129,137899,1579],{"class":139},[83,137901,137902],{"start":51},[86,137903,137904],{},"小米logo",[14,137906,137907],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[120,137909,137911],{"className":126553,"code":137910,"language":126555,"meta":42,"style":42},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[126,137912,137913,137918,137924,137940,137945],{"__ignoreMap":42},[129,137914,137915],{"class":131,"line":132},[129,137916,137917],{"class":198},"\u002F* CSS3 过渡 *\u002F\n",[129,137919,137920,137922],{"class":131,"line":51},[129,137921,51612],{"class":51301},[129,137923,15587],{"class":139},[129,137925,137926,137928,137930,137932,137934,137936,137938],{"class":131,"line":1194},[129,137927,137882],{"class":188},[129,137929,51438],{"class":139},[129,137931,28122],{"class":188},[129,137933,137889],{"class":188},[129,137935,834],{"class":135},[129,137937,78681],{"class":188},[129,137939,1305],{"class":139},[129,137941,137942],{"class":131,"line":1209},[129,137943,137944],{"class":198},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[129,137946,137947],{"class":131,"line":1215},[129,137948,1579],{"class":139},[14,137950,137951],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5141,137953,137954],{},"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":42,"searchDepth":51,"depth":51,"links":137956},[137957,137962],{"id":136287,"depth":51,"text":136288,"children":137958},[137959,137960,137961],{"id":136291,"depth":1194,"text":136292},{"id":136368,"depth":1194,"text":136369},{"id":136699,"depth":1194,"text":136700},{"id":136990,"depth":51,"text":136991,"children":137963},[137964,137965],{"id":136994,"depth":1194,"text":136995},{"id":137857,"depth":1194,"text":137858},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136279,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137972,"title":137973,"body":137974,"description":53,"extension":54,"meta":139718,"navigation":56,"path":139719,"seo":139720,"stem":139721,"__hash__":139722},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137975,"toc":139699},[137976,137979,137983,137986,137992,137998,138002,138004,138007,138010,138013,138016,138019,138022,138025,138029,138033,138036,138039,138042,138046,138049,138052,138057,138060,138063,138066,138070,138073,138082,138085,138088,138092,138095,138098,138103,138110,138124,138132,138139,138144,138147,138150,138153,138160,138164,138170,138176,138179,138182,138187,138193,138195,138203,138208,138211,138217,138219,138224,138229,138232,138234,138239,138242,138247,138252,138286,138290,138294,138297,138301,138304,138390,138393,138430,138433,138469,138473,138478,138491,138545,138547,138575,138577,138605,138611,138625,138627,138671,138673,138717,138720,138727,138738,138740,138767,138769,138795,138802,138818,138820,138914,138916,139010,139017,139020,139025,139031,139105,139108,139110,139146,139148,139184,139187,139194,139213,139216,139219,139221,139246,139248,139272,139275,139278,139308,139312,139315,139378,139380,139446,139448,139512,139515,139547,139549,139575,139577,139603,139606,139637,139639,139665,139667,139693,139696],[10,137977,137973],{"id":137978},"_15-品优购项目上篇-搭建与公共模块",[71,137980,137982],{"id":137981},"_151-项目规划","15.1 项目规划",[40,137984],{"style":126409,"src":137985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,137987,137988,137991],{},[289,137989,137990],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,137993,137994,137997],{},[289,137995,137996],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[71,137999,138001],{"id":138000},"_152-项目介绍","15.2 项目介绍",[14,138003,137990],{},[40,138005],{"style":126409,"src":138006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138008,138009],{},"主页：",[40,138011],{"style":126409,"src":138012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138014,138015],{},"列表页：",[40,138017],{"style":126409,"src":138018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138020,138021],{},"注册页：",[40,138023],{"style":126409,"src":138024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[71,138026,138028],{"id":138027},"_153-项目搭建工作","15.3 项目搭建工作",[100,138030,138032],{"id":138031},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[40,138034],{"style":126409,"src":138035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138037,138038],{},"经常更换的图片要放到upload文件夹中",[14,138040,138041],{},"不经常换的放到images文件夹中",[100,138043,138045],{"id":138044},"_1532-创建文件如下","15.3.2 创建文件如下",[40,138047],{"style":126409,"src":138048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[40,138050],{"style":126409,"src":138051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138053,138054],{},[289,138055,138056],{},"初始化样式：",[14,138058,138059],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138061,138062],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138064,138065],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[100,138067,138069],{"id":138068},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138071,138072],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138074,138075,138076,138081],{},"这里最典型的应用就是 ",[289,138077,138078],{},[126,138079,138080],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[40,138083],{"style":126409,"src":138084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138086,138087],{},"通过link方法来引入",[100,138089,138091],{"id":138090},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[40,138093],{"style":126409,"src":138094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138096,138097],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[83,138099,138100],{},[86,138101,138102],{},"制作favicon图标",[14,138104,138105,138106,138109],{},"①把品优购图标切成 ",[126,138107,138108],{},"png"," 图片",[14,138111,138112,138113,138115,138116,138119,138120],{},"②把 ",[126,138114,138108],{}," 图片转换为 ",[126,138117,138118],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[20,138121,138122],{"href":138122,"rel":138123},"http:\u002F\u002Fwww.bitbug.net\u002F",[24],[83,138125,138126,138129],{"start":51},[86,138127,138128],{},"favicon图标放到网站根目录下",[86,138130,138131],{},"HTML页面引入favicon",[14,138133,138134,138135,138138],{},"在html 页面里面的 ",[126,138136,138137],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138140,138141],{},[126,138142,138143],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138145,138146],{},"复制这行代码或者在生成这个的网站进行复制",[40,138148],{"style":126409,"src":138149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138151,138152],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138154,138155,138156],{},"例如:",[20,138157,138158],{"href":138158,"rel":138159},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24],[100,138161,138163],{"id":138162},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138165,138166,138169],{},[289,138167,138168],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138171,138172,138175],{},[289,138173,138174],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138177,138178],{},"页面必须有三个标签用来符合 SEO 优化",[40,138180],{"style":126409,"src":138181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[83,138183,138184],{},[86,138185,138186],{},"title网站标题",[14,138188,138189,138192],{},[289,138190,138191],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138194,68791],{},[1146,138196,138197,138200],{},[86,138198,138199],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[86,138201,138202],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[83,138204,138205],{"start":51},[86,138206,138207],{},"description网站描述",[14,138209,138210],{},"简要说明我们网站主要是做什么的",[14,138212,138213,138216],{},[289,138214,138215],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138218,68791],{},[14,138220,138221],{},[126,138222,138223],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[83,138225,138226],{"start":1194},[86,138227,138228],{},"keywords关键词",[14,138230,138231],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138233,68791],{},[14,138235,138236],{},[126,138237,138238],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138240,138241],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138243,138244],{},[289,138245,138246],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[83,138248,138249],{"start":1209},[86,138250,138251],{},"代码总结",[120,138253,138254],{"className":127300,"code":130657,"language":127302,"meta":42,"style":42},[126,138255,138256,138260,138274,138278],{"__ignoreMap":42},[129,138257,138258],{"class":131,"line":132},[129,138259,130664],{"class":198},[129,138261,138262,138264,138266,138268,138270,138272],{"class":131,"line":51},[129,138263,1049],{"class":139},[129,138265,51612],{"class":51301},[129,138267,53487],{"class":1977},[129,138269,185],{"class":139},[129,138271,130677],{"class":244},[129,138273,51308],{"class":139},[129,138275,138276],{"class":131,"line":1194},[129,138277,130684],{"class":139},[129,138279,138280,138282,138284],{"class":131,"line":1209},[129,138281,51786],{"class":139},[129,138283,51612],{"class":51301},[129,138285,51308],{"class":139},[71,138287,138289],{"id":138288},"_154-项目公共部分制作","15.4 项目公共部分制作",[100,138291,138293],{"id":138292},"_1541-常用模块类命名","15.4.1 常用模块类命名",[40,138295],{"style":126409,"src":138296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[100,138298,138300],{"id":138299},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138302,138303],{},"布局思路：",[1146,138305,138306,138309,138312,138334,138367],{},[86,138307,138308],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[86,138310,138311],{},"里面包含版心的盒子",[86,138313,138314,138315],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1146,138316,138317,138325,138331],{},[86,138318,138319,138320,21515,138322,138324],{},"1 号盒子 里面包含一个",[126,138321,1146],{},[126,138323,1146],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[86,138326,138327,138328,138330],{},"里面的内容是水平排列，所以需要给",[126,138329,86],{},"设置浮动",[86,138332,138333],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[86,138335,138336,138337],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1146,138338,138339,138353,138358],{},[86,138340,138341,138342,21515,138344,138346,138347,138349,138350,138352],{},"2 号盒子 里面包含一个",[126,138343,1146],{},[126,138345,1146],{},"包裹",[126,138348,86],{},"，中间的",[126,138351,1060],{},"可以用样式去设置，也可以用字符 |",[86,138354,138355,138356,138330],{},"里面内容水平排列，给",[126,138357,86],{},[86,138359,138360,138361,138363,138364,138366],{},"找到里面所有偶数的 ",[126,138362,86],{}," 设置样式（偶数的 ",[126,138365,86],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[86,138368,138369,138370],{},"需要用到字体图标",[1146,138371,138372,138378,138381,138384,138387],{},[86,138373,138374,138375],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[126,138376,138377],{},"arrow-icon",[86,138379,138380],{},"先要引入字体图片的资源",[86,138382,138383],{},"在样式里面利用 font-face 来进行声明",[86,138385,138386],{},"在伪元素的 content属性设置 图标的编码",[86,138388,138389],{},"给伪元素设置font-family属性",[14,138391,138392],{},"结构实例代码：",[120,138394,138396],{"className":126553,"code":138395,"language":126555,"meta":42,"style":42},"div::before {\n  content: \"\";\n  display: block;\n}\n",[126,138397,138398,138406,138416,138426],{"__ignoreMap":42},[129,138399,138400,138402,138404],{"class":131,"line":132},[129,138401,51612],{"class":51301},[129,138403,137554],{"class":1977},[129,138405,15587],{"class":139},[129,138407,138408,138410,138412,138414],{"class":131,"line":51},[129,138409,137561],{"class":188},[129,138411,51438],{"class":139},[129,138413,7667],{"class":244},[129,138415,1305],{"class":139},[129,138417,138418,138420,138422,138424],{"class":131,"line":1194},[129,138419,128169],{"class":188},[129,138421,51438],{"class":139},[129,138423,60870],{"class":188},[129,138425,1305],{"class":139},[129,138427,138428],{"class":131,"line":1209},[129,138429,1579],{"class":139},[14,138431,138432],{},"样式实例代码：",[120,138434,138435],{"className":126553,"code":138395,"language":126555,"meta":42,"style":42},[126,138436,138437,138445,138455,138465],{"__ignoreMap":42},[129,138438,138439,138441,138443],{"class":131,"line":132},[129,138440,51612],{"class":51301},[129,138442,137554],{"class":1977},[129,138444,15587],{"class":139},[129,138446,138447,138449,138451,138453],{"class":131,"line":51},[129,138448,137561],{"class":188},[129,138450,51438],{"class":139},[129,138452,7667],{"class":244},[129,138454,1305],{"class":139},[129,138456,138457,138459,138461,138463],{"class":131,"line":1194},[129,138458,128169],{"class":188},[129,138460,51438],{"class":139},[129,138462,60870],{"class":188},[129,138464,1305],{"class":139},[129,138466,138467],{"class":131,"line":1209},[129,138468,1579],{"class":139},[100,138470,138472],{"id":138471},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1146,138474,138475],{},[86,138476,138477],{},"header 盒子必须要有高度",[14,138479,138480,138481,138483,138484],{},"1 号盒子是 ",[126,138482,131565],{}," 标志定位，在正常开发过程中， ",[289,138485,138486,138487,138490],{},"logo的布局其实是有讲究的，需要进行 ",[126,138488,138489],{},"logoSEO","的优化 （★★★）",[1146,138492,138493,138501,138509,138536],{},[86,138494,138495,138497,138498,138500],{},[126,138496,131565],{}," 里面首先放一个 ",[126,138499,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[86,138502,138503,138505,138506,138508],{},[126,138504,10],{}," 里面再放一个链接，可以返回首页的，把 ",[126,138507,131565],{}," 的背景图片给链接即可",[86,138510,138511,138512],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1146,138513,138514,138529],{},[86,138515,138516,138517,138520,138521,138524,138525,138528],{},"方法1：",[126,138518,138519],{},"text-indent"," 移到盒子外面（",[126,138522,138523],{},"text-indent: -9999px",") ，然后 ",[126,138526,138527],{},"overflow:hidden"," ，淘宝的做法",[86,138530,138531,138532,138535],{},"方法2：直接给 ",[126,138533,138534],{},"font-size: 0;"," 就看不到文字了，京东的做法",[86,138537,138538,138539,138541,138542,138544],{},"最后给链接一个 ",[126,138540,51408],{}," 属性，这样鼠标放到 ",[126,138543,131565],{}," 上就可以看到提示文字了",[14,138546,138392],{},[120,138548,138549],{"className":127300,"code":131786,"language":127302,"meta":42,"style":42},[126,138550,138551],{"__ignoreMap":42},[129,138552,138553,138555,138557,138559,138561,138563,138565,138567,138569,138571,138573],{"class":131,"line":132},[129,138554,1049],{"class":139},[129,138556,20],{"class":51301},[129,138558,61058],{"class":1977},[129,138560,185],{"class":139},[129,138562,131801],{"class":244},[129,138564,131804],{"class":1977},[129,138566,185],{"class":139},[129,138568,131809],{"class":244},[129,138570,131812],{"class":139},[129,138572,20],{"class":51301},[129,138574,51308],{"class":139},[14,138576,138432],{},[120,138578,138579],{"className":127300,"code":131786,"language":127302,"meta":42,"style":42},[126,138580,138581],{"__ignoreMap":42},[129,138582,138583,138585,138587,138589,138591,138593,138595,138597,138599,138601,138603],{"class":131,"line":132},[129,138584,1049],{"class":139},[129,138586,20],{"class":51301},[129,138588,61058],{"class":1977},[129,138590,185],{"class":139},[129,138592,131801],{"class":244},[129,138594,131804],{"class":1977},[129,138596,185],{"class":139},[129,138598,131809],{"class":244},[129,138600,131812],{"class":139},[129,138602,20],{"class":51301},[129,138604,51308],{"class":139},[14,138606,138607,138608,138610],{},"2 号盒子是 ",[126,138609,131578],{}," 搜索模块定位",[1146,138612,138613,138616,138619,138622],{},[86,138614,138615],{},"search盒子利用定位的方式放在对应的位置",[86,138617,138618],{},"search盒子设置绝对定位，header盒子设置相对定位",[86,138620,138621],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[86,138623,138624],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138626,138392],{},[120,138628,138629],{"className":126553,"code":131873,"language":126555,"meta":42,"style":42},[126,138630,138631,138653,138657,138667],{"__ignoreMap":42},[129,138632,138633,138635,138637,138639,138641,138643,138645,138647,138649,138651],{"class":131,"line":132},[129,138634,51612],{"class":51301},[129,138636,12450],{"class":139},[129,138638,14],{"class":51301},[129,138640,12450],{"class":139},[129,138642,10],{"class":51301},[129,138644,12450],{"class":139},[129,138646,1146],{"class":51301},[129,138648,12450],{"class":139},[129,138650,86],{"class":51301},[129,138652,15587],{"class":139},[129,138654,138655],{"class":131,"line":51},[129,138656,131902],{"class":198},[129,138658,138659,138661,138663,138665],{"class":131,"line":1194},[129,138660,128169],{"class":188},[129,138662,51438],{"class":139},[129,138664,60870],{"class":188},[129,138666,1305],{"class":139},[129,138668,138669],{"class":131,"line":1209},[129,138670,1579],{"class":139},[14,138672,138432],{},[120,138674,138675],{"className":126553,"code":131873,"language":126555,"meta":42,"style":42},[126,138676,138677,138699,138703,138713],{"__ignoreMap":42},[129,138678,138679,138681,138683,138685,138687,138689,138691,138693,138695,138697],{"class":131,"line":132},[129,138680,51612],{"class":51301},[129,138682,12450],{"class":139},[129,138684,14],{"class":51301},[129,138686,12450],{"class":139},[129,138688,10],{"class":51301},[129,138690,12450],{"class":139},[129,138692,1146],{"class":51301},[129,138694,12450],{"class":139},[129,138696,86],{"class":51301},[129,138698,15587],{"class":139},[129,138700,138701],{"class":131,"line":51},[129,138702,131902],{"class":198},[129,138704,138705,138707,138709,138711],{"class":131,"line":1194},[129,138706,128169],{"class":188},[129,138708,51438],{"class":139},[129,138710,60870],{"class":188},[129,138712,1305],{"class":139},[129,138714,138715],{"class":131,"line":1209},[129,138716,1579],{"class":139},[14,138718,138719],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138721,138722,138723,138726],{},"3 号盒子是 ",[126,138724,138725],{},"hotwords"," 热词模块定位",[1146,138728,138729,138732,138735],{},[86,138730,138731],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[86,138733,138734],{},"给里面所有的a标签设置 左右10px的外边距",[86,138736,138737],{},"给第一个a标签设置文字变红色（#c81623）",[14,138739,138392],{},[120,138741,138743],{"className":126553,"code":138742,"language":126555,"meta":42,"style":42},"div {\n  margin: 0 auto;\n}\n",[126,138744,138745,138751,138763],{"__ignoreMap":42},[129,138746,138747,138749],{"class":131,"line":132},[129,138748,51612],{"class":51301},[129,138750,15587],{"class":139},[129,138752,138753,138755,138757,138759,138761],{"class":131,"line":51},[129,138754,70471],{"class":188},[129,138756,51438],{"class":139},[129,138758,331],{"class":188},[129,138760,51557],{"class":188},[129,138762,1305],{"class":139},[129,138764,138765],{"class":131,"line":1194},[129,138766,1579],{"class":139},[14,138768,138432],{},[120,138770,138771],{"className":126553,"code":138742,"language":126555,"meta":42,"style":42},[126,138772,138773,138779,138791],{"__ignoreMap":42},[129,138774,138775,138777],{"class":131,"line":132},[129,138776,51612],{"class":51301},[129,138778,15587],{"class":139},[129,138780,138781,138783,138785,138787,138789],{"class":131,"line":51},[129,138782,70471],{"class":188},[129,138784,51438],{"class":139},[129,138786,331],{"class":188},[129,138788,51557],{"class":188},[129,138790,1305],{"class":139},[129,138792,138793],{"class":131,"line":1194},[129,138794,1579],{"class":139},[14,138796,138797,138798,138801],{},"4 号盒子是 ",[126,138799,138800],{},"shopcar"," 购物车模块",[1146,138803,138804,138809,138812,138815],{},[86,138805,123336,138806,138808],{},[126,138807,138800],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[86,138810,138811],{},"count 统计部分用绝对定位做",[86,138813,138814],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[86,138816,138817],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138819,138392],{},[120,138821,138822],{"className":126553,"code":131985,"language":126555,"meta":42,"style":42},[126,138823,138824,138828,138842,138846,138860,138864,138878,138882,138896,138900],{"__ignoreMap":42},[129,138825,138826],{"class":131,"line":132},[129,138827,131992],{"class":198},[129,138829,138830,138832,138834,138836,138838,138840],{"class":131,"line":51},[129,138831,131997],{"class":1977},[129,138833,79808],{"class":139},[129,138835,128913],{"class":188},[129,138837,51438],{"class":139},[129,138839,132006],{"class":188},[129,138841,129483],{"class":139},[129,138843,138844],{"class":131,"line":1194},[129,138845,132013],{"class":198},[129,138847,138848,138850,138852,138854,138856,138858],{"class":131,"line":1209},[129,138849,132018],{"class":1977},[129,138851,79808],{"class":139},[129,138853,128913],{"class":188},[129,138855,51438],{"class":139},[129,138857,54765],{"class":188},[129,138859,129483],{"class":139},[129,138861,138862],{"class":131,"line":1215},[129,138863,132033],{"class":198},[129,138865,138866,138868,138870,138872,138874,138876],{"class":131,"line":1229},[129,138867,132038],{"class":1977},[129,138869,79808],{"class":139},[129,138871,128913],{"class":188},[129,138873,51438],{"class":139},[129,138875,54832],{"class":188},[129,138877,129483],{"class":139},[129,138879,138880],{"class":131,"line":1235},[129,138881,132053],{"class":198},[129,138883,138884,138886,138888,138890,138892,138894],{"class":131,"line":1326},[129,138885,132058],{"class":1977},[129,138887,79808],{"class":139},[129,138889,128913],{"class":188},[129,138891,51438],{"class":139},[129,138893,86234],{"class":188},[129,138895,129483],{"class":139},[129,138897,138898],{"class":131,"line":1332},[129,138899,132073],{"class":198},[129,138901,138902,138904,138906,138908,138910,138912],{"class":131,"line":1344},[129,138903,132078],{"class":1977},[129,138905,79808],{"class":139},[129,138907,128913],{"class":188},[129,138909,51438],{"class":139},[129,138911,132087],{"class":188},[129,138913,129483],{"class":139},[14,138915,138432],{},[120,138917,138918],{"className":126553,"code":131985,"language":126555,"meta":42,"style":42},[126,138919,138920,138924,138938,138942,138956,138960,138974,138978,138992,138996],{"__ignoreMap":42},[129,138921,138922],{"class":131,"line":132},[129,138923,131992],{"class":198},[129,138925,138926,138928,138930,138932,138934,138936],{"class":131,"line":51},[129,138927,131997],{"class":1977},[129,138929,79808],{"class":139},[129,138931,128913],{"class":188},[129,138933,51438],{"class":139},[129,138935,132006],{"class":188},[129,138937,129483],{"class":139},[129,138939,138940],{"class":131,"line":1194},[129,138941,132013],{"class":198},[129,138943,138944,138946,138948,138950,138952,138954],{"class":131,"line":1209},[129,138945,132018],{"class":1977},[129,138947,79808],{"class":139},[129,138949,128913],{"class":188},[129,138951,51438],{"class":139},[129,138953,54765],{"class":188},[129,138955,129483],{"class":139},[129,138957,138958],{"class":131,"line":1215},[129,138959,132033],{"class":198},[129,138961,138962,138964,138966,138968,138970,138972],{"class":131,"line":1229},[129,138963,132038],{"class":1977},[129,138965,79808],{"class":139},[129,138967,128913],{"class":188},[129,138969,51438],{"class":139},[129,138971,54832],{"class":188},[129,138973,129483],{"class":139},[129,138975,138976],{"class":131,"line":1235},[129,138977,132053],{"class":198},[129,138979,138980,138982,138984,138986,138988,138990],{"class":131,"line":1326},[129,138981,132058],{"class":1977},[129,138983,79808],{"class":139},[129,138985,128913],{"class":188},[129,138987,51438],{"class":139},[129,138989,86234],{"class":188},[129,138991,129483],{"class":139},[129,138993,138994],{"class":131,"line":1332},[129,138995,132073],{"class":198},[129,138997,138998,139000,139002,139004,139006,139008],{"class":131,"line":1344},[129,138999,132078],{"class":1977},[129,139001,79808],{"class":139},[129,139003,128913],{"class":188},[129,139005,51438],{"class":139},[129,139007,132087],{"class":188},[129,139009,129483],{"class":139},[100,139011,139013,139014,139016],{"id":139012},"_1544-nav导航模块制作","15.4.4 ",[126,139015,53714],{},"导航模块制作",[40,139018],{"style":126409,"src":139019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139021,139022,139024],{},[126,139023,53714],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139026,139027,139028],{},"1 号盒子左侧浮动，",[126,139029,139030],{},"dropdown",[1146,139032,139033,139043,139051,139057,139065,139075,139083,139094],{},[86,139034,139035,139036,101019,139039,139042],{},"1号盒子有讲究，根据相关性 里面包含 ",[126,139037,139038],{},".dt",[126,139040,139041],{},".dd"," 两个盒子",[86,139044,139045,139047,139048,139050],{},[126,139046,139038],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[126,139049,139041],{}," 挤到下面去了",[86,139052,139053,139054,139056],{},"给 ",[126,139055,139041],{}," 盒子设置宽度 和 高度，以及背景颜色",[86,139058,139053,139059,139061,139062,120238],{},[126,139060,139041],{}," 盒子里面定义 无序列表 （",[126,139063,139064],{},"ul > li > a",[86,139066,139067,139068,139070,139071,139074],{},"每个 ",[126,139069,86],{}," 都有一个高度（",[126,139072,139073],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[86,139076,139053,139077,139079,139080,120238],{},[126,139078,86],{}," 里面的a设置文字大小（",[126,139081,139082],{},"14px",[86,139084,139053,139085,139087,139088,139090,139091,139093],{},[126,139086,86],{}," 设置 ",[126,139089,127714],{},"，当鼠标移入的时候，让",[126,139092,86],{},"的背景变成白色，让里面的文字变成红色",[86,139095,139096,139098,139099,139101,139102,139104],{},[126,139097,86],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[126,139100,86],{},"的右侧，那么给",[126,139103,86],{},"设置相对定位",[14,139106,139107],{},"一定要注意相关性",[14,139109,138392],{},[120,139111,139112],{"className":126553,"code":138395,"language":126555,"meta":42,"style":42},[126,139113,139114,139122,139132,139142],{"__ignoreMap":42},[129,139115,139116,139118,139120],{"class":131,"line":132},[129,139117,51612],{"class":51301},[129,139119,137554],{"class":1977},[129,139121,15587],{"class":139},[129,139123,139124,139126,139128,139130],{"class":131,"line":51},[129,139125,137561],{"class":188},[129,139127,51438],{"class":139},[129,139129,7667],{"class":244},[129,139131,1305],{"class":139},[129,139133,139134,139136,139138,139140],{"class":131,"line":1194},[129,139135,128169],{"class":188},[129,139137,51438],{"class":139},[129,139139,60870],{"class":188},[129,139141,1305],{"class":139},[129,139143,139144],{"class":131,"line":1209},[129,139145,1579],{"class":139},[14,139147,138432],{},[120,139149,139150],{"className":126553,"code":138395,"language":126555,"meta":42,"style":42},[126,139151,139152,139160,139170,139180],{"__ignoreMap":42},[129,139153,139154,139156,139158],{"class":131,"line":132},[129,139155,51612],{"class":51301},[129,139157,137554],{"class":1977},[129,139159,15587],{"class":139},[129,139161,139162,139164,139166,139168],{"class":131,"line":51},[129,139163,137561],{"class":188},[129,139165,51438],{"class":139},[129,139167,7667],{"class":244},[129,139169,1305],{"class":139},[129,139171,139172,139174,139176,139178],{"class":131,"line":1194},[129,139173,128169],{"class":188},[129,139175,51438],{"class":139},[129,139177,60870],{"class":188},[129,139179,1305],{"class":139},[129,139181,139182],{"class":131,"line":1209},[129,139183,1579],{"class":139},[14,139185,139186],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139188,139189,139190,139193],{},"2 号盒子左侧浮动，",[126,139191,139192],{},"navitems"," 导航栏组",[1146,139195,139196,139201,139210],{},[86,139197,139198,139199],{},"里面结构是 ",[126,139200,139064],{},[86,139202,139203,139204,139206,139207,139209],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[126,139205,20],{},"左右的",[126,139208,30884],{},"把两侧撑开",[86,139211,139212],{},"让文字垂直居中（行高等于高度）",[40,139214],{"style":126409,"src":139215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139217,139218],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139220,138392],{},[120,139222,139224],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},".box {\n  float: left;\n}\n",[126,139225,139226,139232,139242],{"__ignoreMap":42},[129,139227,139228,139230],{"class":131,"line":132},[129,139229,130401],{"class":1977},[129,139231,15587],{"class":139},[129,139233,139234,139236,139238,139240],{"class":131,"line":51},[129,139235,131033],{"class":188},[129,139237,51438],{"class":139},[129,139239,23751],{"class":188},[129,139241,1305],{"class":139},[129,139243,139244],{"class":131,"line":1194},[129,139245,1579],{"class":139},[14,139247,138432],{},[120,139249,139250],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,139251,139252,139258,139268],{"__ignoreMap":42},[129,139253,139254,139256],{"class":131,"line":132},[129,139255,130401],{"class":1977},[129,139257,15587],{"class":139},[129,139259,139260,139262,139264,139266],{"class":131,"line":51},[129,139261,131033],{"class":188},[129,139263,51438],{"class":139},[129,139265,23751],{"class":188},[129,139267,1305],{"class":139},[129,139269,139270],{"class":131,"line":1194},[129,139271,1579],{"class":139},[14,139273,139274],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[40,139276],{"style":126409,"src":139277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[120,139279,139280],{"className":126553,"code":130710,"language":126555,"meta":42,"style":42},[126,139281,139282,139288,139304],{"__ignoreMap":42},[129,139283,139284,139286],{"class":131,"line":132},[129,139285,51612],{"class":51301},[129,139287,15587],{"class":139},[129,139289,139290,139292,139294,139296,139298,139300,139302],{"class":131,"line":51},[129,139291,70897],{"class":188},[129,139293,51438],{"class":139},[129,139295,357],{"class":188},[129,139297,51493],{"class":135},[129,139299,51522],{"class":188},[129,139301,129945],{"class":188},[129,139303,1305],{"class":139},[129,139305,139306],{"class":131,"line":1194},[129,139307,1579],{"class":139},[100,139309,139311],{"id":139310},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[40,139313],{"style":126409,"src":139314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1146,139316,139317,139322,139327],{},[86,139318,139319,139321],{},[126,139320,131756],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[86,139323,139324,139326],{},[126,139325,131756],{}," 里面有一个大的版心",[86,139328,139329,139330,139333,139334],{},"版心里面包含 1 号盒子，",[126,139331,139332],{},"mod_service"," 是服务模块，mod 是模块的意思",[1146,139335,139336,139341,139354,139370,139375],{},[86,139337,139053,139338,139340],{},[126,139339,139332],{}," 设置高度（80px）和下边框",[86,139342,139343,139344,139347,139348,139350,139351,139353],{},"在里面定义 ",[126,139345,139346],{},"ul > li"," ,每个",[126,139349,86],{}," 宽度是300px 高度是 50px，给每个",[126,139352,86],{},"设置35px的左内边距",[86,139355,139356,139357,139359,139360,139362,139363,139365,139366,18425,139368,120238],{},"在每个",[126,139358,86],{},"里面，放一个 ",[126,139361,22925],{},"（里面放图标），一个",[126,139364,51612],{},"（里面放",[126,139367,51612],{},[126,139369,14],{},[86,139371,139053,139372,139374],{},[126,139373,22925],{},"设置浮动，让h5与这个div左右排列",[86,139376,139377],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139379,138392],{},[120,139381,139383],{"className":126553,"code":139382,"language":126555,"meta":42,"style":42},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[126,139384,139385,139391,139403,139415,139442],{"__ignoreMap":42},[129,139386,139387,139389],{"class":131,"line":132},[129,139388,134310],{"class":1977},[129,139390,15587],{"class":139},[129,139392,139393,139395,139397,139399,139401],{"class":131,"line":51},[129,139394,70569],{"class":188},[129,139396,51438],{"class":139},[129,139398,839],{"class":188},[129,139400,51493],{"class":135},[129,139402,1305],{"class":139},[129,139404,139405,139407,139409,139411,139413],{"class":131,"line":1194},[129,139406,70789],{"class":188},[129,139408,51438],{"class":139},[129,139410,839],{"class":188},[129,139412,51493],{"class":135},[129,139414,1305],{"class":139},[129,139416,139417,139419,139421,139423,139425,139427,139429,139431,139434,139436,139438,139440],{"class":131,"line":1209},[129,139418,70612],{"class":188},[129,139420,51438],{"class":139},[129,139422,61727],{"class":188},[129,139424,140],{"class":139},[129,139426,134349],{"class":5231},[129,139428,13729],{"class":139},[129,139430,61737],{"class":188},[129,139432,139433],{"class":188}," -10",[129,139435,51493],{"class":135},[129,139437,134368],{"class":188},[129,139439,51493],{"class":135},[129,139441,1305],{"class":139},[129,139443,139444],{"class":131,"line":1215},[129,139445,1579],{"class":139},[14,139447,138432],{},[120,139449,139450],{"className":126553,"code":139382,"language":126555,"meta":42,"style":42},[126,139451,139452,139458,139470,139482,139508],{"__ignoreMap":42},[129,139453,139454,139456],{"class":131,"line":132},[129,139455,134310],{"class":1977},[129,139457,15587],{"class":139},[129,139459,139460,139462,139464,139466,139468],{"class":131,"line":51},[129,139461,70569],{"class":188},[129,139463,51438],{"class":139},[129,139465,839],{"class":188},[129,139467,51493],{"class":135},[129,139469,1305],{"class":139},[129,139471,139472,139474,139476,139478,139480],{"class":131,"line":1194},[129,139473,70789],{"class":188},[129,139475,51438],{"class":139},[129,139477,839],{"class":188},[129,139479,51493],{"class":135},[129,139481,1305],{"class":139},[129,139483,139484,139486,139488,139490,139492,139494,139496,139498,139500,139502,139504,139506],{"class":131,"line":1209},[129,139485,70612],{"class":188},[129,139487,51438],{"class":139},[129,139489,61727],{"class":188},[129,139491,140],{"class":139},[129,139493,134349],{"class":5231},[129,139495,13729],{"class":139},[129,139497,61737],{"class":188},[129,139499,139433],{"class":188},[129,139501,51493],{"class":135},[129,139503,134368],{"class":188},[129,139505,51493],{"class":135},[129,139507,1305],{"class":139},[129,139509,139510],{"class":131,"line":1215},[129,139511,1579],{"class":139},[14,139513,139514],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1146,139516,139517,139520,139526,139532,139544],{},[86,139518,139519],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[86,139521,139522,139523,120238],{},"里面的布局利用 自定义列表来实现（",[126,139524,139525],{},"dl > dt + dd",[86,139527,139053,139528,139531],{},[126,139529,139530],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[86,139533,139053,139534,139537,139538,18425,139540,139543],{},[126,139535,139536],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[126,139539,139536],{},[126,139541,139542],{},"dd","之间有些距离",[86,139545,139546],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139548,138392],{},[120,139550,139551],{"className":126553,"code":138742,"language":126555,"meta":42,"style":42},[126,139552,139553,139559,139571],{"__ignoreMap":42},[129,139554,139555,139557],{"class":131,"line":132},[129,139556,51612],{"class":51301},[129,139558,15587],{"class":139},[129,139560,139561,139563,139565,139567,139569],{"class":131,"line":51},[129,139562,70471],{"class":188},[129,139564,51438],{"class":139},[129,139566,331],{"class":188},[129,139568,51557],{"class":188},[129,139570,1305],{"class":139},[129,139572,139573],{"class":131,"line":1194},[129,139574,1579],{"class":139},[14,139576,138432],{},[120,139578,139579],{"className":126553,"code":138742,"language":126555,"meta":42,"style":42},[126,139580,139581,139587,139599],{"__ignoreMap":42},[129,139582,139583,139585],{"class":131,"line":132},[129,139584,51612],{"class":51301},[129,139586,15587],{"class":139},[129,139588,139589,139591,139593,139595,139597],{"class":131,"line":51},[129,139590,70471],{"class":188},[129,139592,51438],{"class":139},[129,139594,331],{"class":188},[129,139596,51557],{"class":188},[129,139598,1305],{"class":139},[129,139600,139601],{"class":131,"line":1194},[129,139602,1579],{"class":139},[14,139604,139605],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1146,139607,139608,139617,139620,139631],{},[86,139609,139610,139611,139613,139614,139616],{},"分为上下两块，上面是 ",[126,139612,131773],{}," 友情链接，下面是 ",[126,139615,131766],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[86,139618,139619],{},"把内容分别复制到相应模块中",[86,139621,139053,139622,139624,139625,139627,139628,139630],{},[126,139623,131773],{}," 设置 15px 的下外边距，给",[126,139626,131773],{}," 里面 的 ",[126,139629,20],{}," 标签设置 左右 3px 的外边距",[86,139632,139633,139634,139636],{},"给",[126,139635,131766],{}," 设置 20px 的行高",[14,139638,138392],{},[120,139640,139641],{"className":126553,"code":138742,"language":126555,"meta":42,"style":42},[126,139642,139643,139649,139661],{"__ignoreMap":42},[129,139644,139645,139647],{"class":131,"line":132},[129,139646,51612],{"class":51301},[129,139648,15587],{"class":139},[129,139650,139651,139653,139655,139657,139659],{"class":131,"line":51},[129,139652,70471],{"class":188},[129,139654,51438],{"class":139},[129,139656,331],{"class":188},[129,139658,51557],{"class":188},[129,139660,1305],{"class":139},[129,139662,139663],{"class":131,"line":1194},[129,139664,1579],{"class":139},[14,139666,138432],{},[120,139668,139669],{"className":126553,"code":138742,"language":126555,"meta":42,"style":42},[126,139670,139671,139677,139689],{"__ignoreMap":42},[129,139672,139673,139675],{"class":131,"line":132},[129,139674,51612],{"class":51301},[129,139676,15587],{"class":139},[129,139678,139679,139681,139683,139685,139687],{"class":131,"line":51},[129,139680,70471],{"class":188},[129,139682,51438],{"class":139},[129,139684,331],{"class":188},[129,139686,51557],{"class":188},[129,139688,1305],{"class":139},[129,139690,139691],{"class":131,"line":1194},[129,139692,1579],{"class":139},[14,139694,139695],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5141,139697,139698],{},"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":42,"searchDepth":51,"depth":51,"links":139700},[139701,139702,139703,139710],{"id":137981,"depth":51,"text":137982},{"id":138000,"depth":51,"text":138001},{"id":138027,"depth":51,"text":138028,"children":139704},[139705,139706,139707,139708,139709],{"id":138031,"depth":1194,"text":138032},{"id":138044,"depth":1194,"text":138045},{"id":138068,"depth":1194,"text":138069},{"id":138090,"depth":1194,"text":138091},{"id":138162,"depth":1194,"text":138163},{"id":138288,"depth":51,"text":138289,"children":139711},[139712,139713,139714,139715,139717],{"id":138292,"depth":1194,"text":138293},{"id":138299,"depth":1194,"text":138300},{"id":138471,"depth":1194,"text":138472},{"id":139012,"depth":1194,"text":139716},"15.4.4 nav导航模块制作",{"id":139310,"depth":1194,"text":139311},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137973,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139724,"title":139725,"body":139726,"description":53,"extension":54,"meta":142128,"navigation":56,"path":142129,"seo":142130,"stem":142131,"__hash__":142132},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139727,"toc":142105},[139728,139731,139735,139739,139751,139754,139757,139760,139771,139773,139797,139799,139823,139828,139831,139833,139869,139871,139907,139910,139915,139918,139921,139924,139954,139961,139964,139974,139976,140010,140013,140047,140053,140070,140072,140108,140110,140146,140151,140176,140178,140204,140206,140230,140237,140240,140304,140306,140348,140350,140390,140397,140402,140404,140434,140436,140466,140470,140473,140480,140492,140494,140520,140522,140546,140549,140551,140575,140581,140591,140593,140623,140625,140655,140662,140703,140705,140741,140743,140779,140783,140786,140789,140792,140798,140803,140806,140829,140832,140856,140859,140883,140888,140891,140894,140897,140900,140903,140977,140979,141009,141011,141041,141044,141047,141079,141083,141087,141101,141110,141113,141118,141120,141214,141216,141310,141333,141335,141359,141361,141385,141392,141395,141405,141407,141431,141436,141444,141446,141476,141481,141521,141523,141549,141551,141577,141581,141584,141589,141592,141596,141604,141611,141619,141621,141651,141653,141683,141691,141694,141697,141699,141729,141731,141761,141764,141769,141771,141795,141797,141821,141824,141909,141911,141935,141937,141961,141965,141967,141991,141993,142027,142031,142045,142048,142053,142056,142061,142064,142094,142102],[10,139729,139725],{"id":139730},"_16-品优购项目下篇-主体与页面开发",[71,139732,139734],{"id":139733},"_161-项目主体模块制作","16.1 项目主体模块制作",[100,139736,139738],{"id":139737},"_1611-首页制作","16.1.1 首页制作",[14,139740,139741,139743,139744,139746,139747,139750],{},[289,139742,102059],{}," 主体模块是 ",[289,139745,74059],{}," 里面专有的，注意需要新的样式文件 ",[289,139748,139749],{},"index.css，"," 就不要写在common.css中了",[40,139752],{"style":126409,"src":139753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[40,139755],{"style":126409,"src":139756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139758,139759],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1146,139761,139762,139765,139768],{},[86,139763,139764],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[86,139766,139767],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[86,139769,139770],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139772,138392],{},[120,139774,139775],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,139776,139777,139783,139793],{"__ignoreMap":42},[129,139778,139779,139781],{"class":131,"line":132},[129,139780,130401],{"class":1977},[129,139782,15587],{"class":139},[129,139784,139785,139787,139789,139791],{"class":131,"line":51},[129,139786,131033],{"class":188},[129,139788,51438],{"class":139},[129,139790,23751],{"class":188},[129,139792,1305],{"class":139},[129,139794,139795],{"class":131,"line":1194},[129,139796,1579],{"class":139},[14,139798,138432],{},[120,139800,139801],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,139802,139803,139809,139819],{"__ignoreMap":42},[129,139804,139805,139807],{"class":131,"line":132},[129,139806,130401],{"class":1977},[129,139808,15587],{"class":139},[129,139810,139811,139813,139815,139817],{"class":131,"line":51},[129,139812,131033],{"class":188},[129,139814,51438],{"class":139},[129,139816,23751],{"class":188},[129,139818,1305],{"class":139},[129,139820,139821],{"class":131,"line":1194},[129,139822,1579],{"class":139},[83,139824,139825],{},[86,139826,139827],{},"左侧focus模块制作",[40,139829],{"style":126409,"src":139830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139832,138392],{},[120,139834,139835],{"className":126553,"code":127876,"language":126555,"meta":42,"style":42},[126,139836,139837,139845,139855,139865],{"__ignoreMap":42},[129,139838,139839,139841,139843],{"class":131,"line":132},[129,139840,53822],{"class":51301},[129,139842,61901],{"class":1977},[129,139844,15587],{"class":139},[129,139846,139847,139849,139851,139853],{"class":131,"line":51},[129,139848,127891],{"class":188},[129,139850,51438],{"class":139},[129,139852,54890],{"class":188},[129,139854,1305],{"class":139},[129,139856,139857,139859,139861,139863],{"class":131,"line":1194},[129,139858,70799],{"class":188},[129,139860,51438],{"class":139},[129,139862,54738],{"class":188},[129,139864,1305],{"class":139},[129,139866,139867],{"class":131,"line":1209},[129,139868,1579],{"class":139},[14,139870,138432],{},[120,139872,139873],{"className":126553,"code":127876,"language":126555,"meta":42,"style":42},[126,139874,139875,139883,139893,139903],{"__ignoreMap":42},[129,139876,139877,139879,139881],{"class":131,"line":132},[129,139878,53822],{"class":51301},[129,139880,61901],{"class":1977},[129,139882,15587],{"class":139},[129,139884,139885,139887,139889,139891],{"class":131,"line":51},[129,139886,127891],{"class":188},[129,139888,51438],{"class":139},[129,139890,54890],{"class":188},[129,139892,1305],{"class":139},[129,139894,139895,139897,139899,139901],{"class":131,"line":1194},[129,139896,70799],{"class":188},[129,139898,51438],{"class":139},[129,139900,54738],{"class":188},[129,139902,1305],{"class":139},[129,139904,139905],{"class":131,"line":1209},[129,139906,1579],{"class":139},[14,139908,139909],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[83,139911,139912],{"start":51},[86,139913,139914],{},"右侧newsflash模块制作",[40,139916],{"style":126409,"src":139917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139919,139920],{},"右侧的模块 分为上中下三个盒子",[14,139922,139923],{},"结构代码：",[120,139925,139926],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,139927,139928],{"__ignoreMap":42},[129,139929,139930,139932,139934,139936,139938,139940,139942,139944,139946,139948,139950,139952],{"class":131,"line":132},[129,139931,1049],{"class":139},[129,139933,40],{"class":51301},[129,139935,55240],{"class":1977},[129,139937,185],{"class":139},[129,139939,134070],{"class":244},[129,139941,55248],{"class":1977},[129,139943,185],{"class":139},[129,139945,134077],{"class":244},[129,139947,134080],{"class":1977},[129,139949,185],{"class":139},[129,139951,134085],{"class":244},[129,139953,51308],{"class":139},[14,139955,139956,139957,139960],{},"1 号盒子为 ",[126,139958,139959],{},"news"," 新闻模块 高度为 165px",[40,139962],{"style":126409,"src":139963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,139965,139966,139967,139970,139971],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[126,139968,139969],{},"news-hd","，下面是 ",[126,139972,139973],{},"news-bd",[14,139975,139923],{},[120,139977,139978],{"className":127300,"code":130657,"language":127302,"meta":42,"style":42},[126,139979,139980,139984,139998,140002],{"__ignoreMap":42},[129,139981,139982],{"class":131,"line":132},[129,139983,130664],{"class":198},[129,139985,139986,139988,139990,139992,139994,139996],{"class":131,"line":51},[129,139987,1049],{"class":139},[129,139989,51612],{"class":51301},[129,139991,53487],{"class":1977},[129,139993,185],{"class":139},[129,139995,130677],{"class":244},[129,139997,51308],{"class":139},[129,139999,140000],{"class":131,"line":1194},[129,140001,130684],{"class":139},[129,140003,140004,140006,140008],{"class":131,"line":1209},[129,140005,51786],{"class":139},[129,140007,51612],{"class":51301},[129,140009,51308],{"class":139},[14,140011,140012],{},"样式代码：",[120,140014,140015],{"className":127300,"code":130657,"language":127302,"meta":42,"style":42},[126,140016,140017,140021,140035,140039],{"__ignoreMap":42},[129,140018,140019],{"class":131,"line":132},[129,140020,130664],{"class":198},[129,140022,140023,140025,140027,140029,140031,140033],{"class":131,"line":51},[129,140024,1049],{"class":139},[129,140026,51612],{"class":51301},[129,140028,53487],{"class":1977},[129,140030,185],{"class":139},[129,140032,130677],{"class":244},[129,140034,51308],{"class":139},[129,140036,140037],{"class":131,"line":1194},[129,140038,130684],{"class":139},[129,140040,140041,140043,140045],{"class":131,"line":1209},[129,140042,51786],{"class":139},[129,140044,51612],{"class":51301},[129,140046,51308],{"class":139},[14,140048,140049,140050,140052],{},"上面是",[126,140051,139969],{},"，设置高度是 33px，设置下边框",[1146,140054,140055,140061],{},[86,140056,140057,140058,140060],{},"里面放一个",[126,140059,22925],{}," 标题",[86,140062,140063,140064,140066,140067,140069],{},"放一个a",[126,140065,102694],{},"，内容是 更多，然后让 ",[126,140068,20],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140071,139923],{},[120,140073,140074],{"className":126553,"code":138395,"language":126555,"meta":42,"style":42},[126,140075,140076,140084,140094,140104],{"__ignoreMap":42},[129,140077,140078,140080,140082],{"class":131,"line":132},[129,140079,51612],{"class":51301},[129,140081,137554],{"class":1977},[129,140083,15587],{"class":139},[129,140085,140086,140088,140090,140092],{"class":131,"line":51},[129,140087,137561],{"class":188},[129,140089,51438],{"class":139},[129,140091,7667],{"class":244},[129,140093,1305],{"class":139},[129,140095,140096,140098,140100,140102],{"class":131,"line":1194},[129,140097,128169],{"class":188},[129,140099,51438],{"class":139},[129,140101,60870],{"class":188},[129,140103,1305],{"class":139},[129,140105,140106],{"class":131,"line":1209},[129,140107,1579],{"class":139},[14,140109,140012],{},[120,140111,140112],{"className":126553,"code":138395,"language":126555,"meta":42,"style":42},[126,140113,140114,140122,140132,140142],{"__ignoreMap":42},[129,140115,140116,140118,140120],{"class":131,"line":132},[129,140117,51612],{"class":51301},[129,140119,137554],{"class":1977},[129,140121,15587],{"class":139},[129,140123,140124,140126,140128,140130],{"class":131,"line":51},[129,140125,137561],{"class":188},[129,140127,51438],{"class":139},[129,140129,7667],{"class":244},[129,140131,1305],{"class":139},[129,140133,140134,140136,140138,140140],{"class":131,"line":1194},[129,140135,128169],{"class":188},[129,140137,51438],{"class":139},[129,140139,60870],{"class":188},[129,140141,1305],{"class":139},[129,140143,140144],{"class":131,"line":1209},[129,140145,1579],{"class":139},[14,140147,140148,140149],{},"下面是",[126,140150,139973],{},[1146,140152,140153,140161],{},[86,140154,140155,140156,101019,140158,140160],{},"里面包含 ",[126,140157,1146],{},[126,140159,86],{}," 还有链接",[86,140162,139633,140163,140165,140166,140168,140169,140172,140173],{},[126,140164,86],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[126,140167,131219],{}," 2.设置 ",[126,140170,140171],{},"white-space: nowrap;"," 3. 设置 ",[126,140174,140175],{},"text-overflow: ellipsis;",[14,140177,139923],{},[120,140179,140181],{"className":126553,"code":140180,"language":126555,"meta":42,"style":42},"div {\n  overflow: hidden;\n}\n",[126,140182,140183,140189,140200],{"__ignoreMap":42},[129,140184,140185,140187],{"class":131,"line":132},[129,140186,51612],{"class":51301},[129,140188,15587],{"class":139},[129,140190,140191,140194,140196,140198],{"class":131,"line":51},[129,140192,140193],{"class":188},"  overflow",[129,140195,51438],{"class":139},[129,140197,61715],{"class":188},[129,140199,1305],{"class":139},[129,140201,140202],{"class":131,"line":1194},[129,140203,1579],{"class":139},[14,140205,140012],{},[120,140207,140208],{"className":126553,"code":140180,"language":126555,"meta":42,"style":42},[126,140209,140210,140216,140226],{"__ignoreMap":42},[129,140211,140212,140214],{"class":131,"line":132},[129,140213,51612],{"class":51301},[129,140215,15587],{"class":139},[129,140217,140218,140220,140222,140224],{"class":131,"line":51},[129,140219,140193],{"class":188},[129,140221,51438],{"class":139},[129,140223,61715],{"class":188},[129,140225,1305],{"class":139},[129,140227,140228],{"class":131,"line":1194},[129,140229,1579],{"class":139},[14,140231,140232,140233,140236],{},"2 号盒子为 ",[126,140234,140235],{},"lifeservice"," 生活服务模块 高度为 209px",[40,140238],{"style":126409,"src":140239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1146,140241,140242,140245,140255,140279,140290],{},[86,140243,140244],{},"设置边框（左右下边框）",[86,140246,140247,140248,140251,140252,140254],{},"里面的内容 是 ",[126,140249,140250],{},"ul > 12*li","，给",[126,140253,86],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[86,140256,140257,140258],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1146,140259,140260,140265,140274],{},[86,140261,140262,140264],{},[126,140263,140235],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[86,140266,140267,140268,140270,140271,140273],{},"可以让 ",[126,140269,140235],{}," 里面的 ",[126,140272,1146],{}," 宽度为 252，就可以装的下 4 个 小 li",[86,140275,140276,140278],{},[126,140277,140235],{}," 盒子 overflow 隐藏多余的部分就可以了",[86,140280,116468,140281,140283,140284,140286,140287,140289],{},[126,140282,86],{}," 里面放一个 ",[126,140285,580],{},"（里面放图标），下面的文本用 ",[126,140288,14],{}," 标签包裹",[86,140291,139053,140292,140294,140295,140297,140298,139087,140300,140303],{},[126,140293,580],{}," 设置 24px宽和28px的高（注意 ",[126,140296,580],{}," 是行内元素， 转成行内块），给 ",[126,140299,86],{},[126,140301,140302],{},"text-align:center"," 让里面内容居中显示",[14,140305,139923],{},[120,140307,140309],{"className":126553,"code":140308,"language":126555,"meta":42,"style":42},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[126,140310,140311,140329,140334,140344],{"__ignoreMap":42},[129,140312,140313,140315,140317,140319,140321,140323,140325,140327],{"class":131,"line":132},[129,140314,129],{"class":51301},[129,140316,12450],{"class":139},[129,140318,20],{"class":51301},[129,140320,12450],{"class":139},[129,140322,23568],{"class":51301},[129,140324,12450],{"class":139},[129,140326,289],{"class":51301},[129,140328,15587],{"class":139},[129,140330,140331],{"class":131,"line":51},[129,140332,140333],{"class":198},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[129,140335,140336,140338,140340,140342],{"class":131,"line":1194},[129,140337,128169],{"class":188},[129,140339,51438],{"class":139},[129,140341,128231],{"class":188},[129,140343,1305],{"class":139},[129,140345,140346],{"class":131,"line":1209},[129,140347,1579],{"class":139},[14,140349,140012],{},[120,140351,140352],{"className":126553,"code":140308,"language":126555,"meta":42,"style":42},[126,140353,140354,140372,140376,140386],{"__ignoreMap":42},[129,140355,140356,140358,140360,140362,140364,140366,140368,140370],{"class":131,"line":132},[129,140357,129],{"class":51301},[129,140359,12450],{"class":139},[129,140361,20],{"class":51301},[129,140363,12450],{"class":139},[129,140365,23568],{"class":51301},[129,140367,12450],{"class":139},[129,140369,289],{"class":51301},[129,140371,15587],{"class":139},[129,140373,140374],{"class":131,"line":51},[129,140375,140333],{"class":198},[129,140377,140378,140380,140382,140384],{"class":131,"line":1194},[129,140379,128169],{"class":188},[129,140381,51438],{"class":139},[129,140383,128231],{"class":188},[129,140385,1305],{"class":139},[129,140387,140388],{"class":131,"line":1209},[129,140389,1579],{"class":139},[14,140391,140392,140393,140396],{},"3 号盒子为 ",[126,140394,140395],{},"bargain"," 特价商品",[1146,140398,140399],{},[86,140400,140401],{},"这个比较简单，直接插入一张图片即可",[14,140403,139923],{},[120,140405,140406],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,140407,140408],{"__ignoreMap":42},[129,140409,140410,140412,140414,140416,140418,140420,140422,140424,140426,140428,140430,140432],{"class":131,"line":132},[129,140411,1049],{"class":139},[129,140413,40],{"class":51301},[129,140415,55240],{"class":1977},[129,140417,185],{"class":139},[129,140419,134070],{"class":244},[129,140421,55248],{"class":1977},[129,140423,185],{"class":139},[129,140425,134077],{"class":244},[129,140427,134080],{"class":1977},[129,140429,185],{"class":139},[129,140431,134085],{"class":244},[129,140433,51308],{"class":139},[14,140435,140012],{},[120,140437,140438],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,140439,140440],{"__ignoreMap":42},[129,140441,140442,140444,140446,140448,140450,140452,140454,140456,140458,140460,140462,140464],{"class":131,"line":132},[129,140443,1049],{"class":139},[129,140445,40],{"class":51301},[129,140447,55240],{"class":1977},[129,140449,185],{"class":139},[129,140451,134070],{"class":244},[129,140453,55248],{"class":1977},[129,140455,185],{"class":139},[129,140457,134077],{"class":244},[129,140459,134080],{"class":1977},[129,140461,185],{"class":139},[129,140463,134085],{"class":244},[129,140465,51308],{"class":139},[100,140467,140469],{"id":140468},"_1612-推荐模块制作","16.1.2 推荐模块制作",[40,140471],{"style":126409,"src":140472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140474,140475,140476,140479],{},"大盒子 ",[126,140477,140478],{},"recom"," 推荐模块 recommend",[1146,140481,140482],{},[86,140483,140484,140485,140487,140488,140491],{},"给这个 ",[126,140486,140478],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[126,140489,140490],{},"#ebebeb","），设置距离上边 12px",[14,140493,139923],{},[120,140495,140497],{"className":126553,"code":140496,"language":126555,"meta":42,"style":42},"div {\n  background-color: #f0f0f0;\n}\n",[126,140498,140499,140505,140516],{"__ignoreMap":42},[129,140500,140501,140503],{"class":131,"line":132},[129,140502,51612],{"class":51301},[129,140504,15587],{"class":139},[129,140506,140507,140509,140511,140514],{"class":131,"line":51},[129,140508,70879],{"class":188},[129,140510,51438],{"class":139},[129,140512,140513],{"class":188},"#f0f0f0",[129,140515,1305],{"class":139},[129,140517,140518],{"class":131,"line":1194},[129,140519,1579],{"class":139},[14,140521,140012],{},[120,140523,140524],{"className":126553,"code":140496,"language":126555,"meta":42,"style":42},[126,140525,140526,140532,140542],{"__ignoreMap":42},[129,140527,140528,140530],{"class":131,"line":132},[129,140529,51612],{"class":51301},[129,140531,15587],{"class":139},[129,140533,140534,140536,140538,140540],{"class":131,"line":51},[129,140535,70879],{"class":188},[129,140537,51438],{"class":139},[129,140539,140513],{"class":188},[129,140541,1305],{"class":139},[129,140543,140544],{"class":131,"line":1194},[129,140545,1579],{"class":139},[14,140547,140548],{},"里面包含 2 个盒子， 浮动即可",[14,140550,139923],{},[120,140552,140553],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,140554,140555,140561,140571],{"__ignoreMap":42},[129,140556,140557,140559],{"class":131,"line":132},[129,140558,130401],{"class":1977},[129,140560,15587],{"class":139},[129,140562,140563,140565,140567,140569],{"class":131,"line":51},[129,140564,131033],{"class":188},[129,140566,51438],{"class":139},[129,140568,23751],{"class":188},[129,140570,1305],{"class":139},[129,140572,140573],{"class":131,"line":1194},[129,140574,1579],{"class":139},[14,140576,140577,140578],{},"1 号盒子 ",[126,140579,140580],{},"recom_hd",[1146,140582,140583,140586],{},[86,140584,140585],{},"设置宽度205px，高度163px",[86,140587,140057,140588,140590],{},[126,140589,40],{},"标签，插入图片即可",[14,140592,139923],{},[120,140594,140595],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,140596,140597],{"__ignoreMap":42},[129,140598,140599,140601,140603,140605,140607,140609,140611,140613,140615,140617,140619,140621],{"class":131,"line":132},[129,140600,1049],{"class":139},[129,140602,40],{"class":51301},[129,140604,55240],{"class":1977},[129,140606,185],{"class":139},[129,140608,134070],{"class":244},[129,140610,55248],{"class":1977},[129,140612,185],{"class":139},[129,140614,134077],{"class":244},[129,140616,134080],{"class":1977},[129,140618,185],{"class":139},[129,140620,134085],{"class":244},[129,140622,51308],{"class":139},[14,140624,140012],{},[120,140626,140627],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,140628,140629],{"__ignoreMap":42},[129,140630,140631,140633,140635,140637,140639,140641,140643,140645,140647,140649,140651,140653],{"class":131,"line":132},[129,140632,1049],{"class":139},[129,140634,40],{"class":51301},[129,140636,55240],{"class":1977},[129,140638,185],{"class":139},[129,140640,134070],{"class":244},[129,140642,55248],{"class":1977},[129,140644,185],{"class":139},[129,140646,134077],{"class":244},[129,140648,134080],{"class":1977},[129,140650,185],{"class":139},[129,140652,134085],{"class":244},[129,140654,51308],{"class":139},[14,140656,140657,140658,140661],{},"2 号盒子 ",[126,140659,140660],{},"recom_bd"," ，注意里面的小竖线",[1146,140663,140664,140675,140678,140683,140688],{},[86,140665,140666,140667,140669,140670,140672,140673],{},"右侧结构里面放 ",[126,140668,1146],{}," 包含 4个 ",[126,140671,86],{},"，每个li里面包含一个",[126,140674,40],{},[86,140676,140677],{},"直接利用切片工具把里面的内容当成一张图片",[86,140679,139053,140680,140682],{},[126,140681,86],{}," 设置浮动",[86,140684,139053,140685,140687],{},[126,140686,40],{}," 设置宽高，宽度 248px，高度 163px",[86,140689,140690,140691,140251,140694,140696,140697,140699,140700],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[126,140692,140693],{},"top 10px",[126,140695,86],{},"设置相对定位（注意，最后一个",[126,140698,86],{},"不用设置伪元素），可以利用 ",[126,140701,140702],{},"nth-child(-n+3){...}",[14,140704,139923],{},[120,140706,140707],{"className":126553,"code":138395,"language":126555,"meta":42,"style":42},[126,140708,140709,140717,140727,140737],{"__ignoreMap":42},[129,140710,140711,140713,140715],{"class":131,"line":132},[129,140712,51612],{"class":51301},[129,140714,137554],{"class":1977},[129,140716,15587],{"class":139},[129,140718,140719,140721,140723,140725],{"class":131,"line":51},[129,140720,137561],{"class":188},[129,140722,51438],{"class":139},[129,140724,7667],{"class":244},[129,140726,1305],{"class":139},[129,140728,140729,140731,140733,140735],{"class":131,"line":1194},[129,140730,128169],{"class":188},[129,140732,51438],{"class":139},[129,140734,60870],{"class":188},[129,140736,1305],{"class":139},[129,140738,140739],{"class":131,"line":1209},[129,140740,1579],{"class":139},[14,140742,140012],{},[120,140744,140745],{"className":126553,"code":138395,"language":126555,"meta":42,"style":42},[126,140746,140747,140755,140765,140775],{"__ignoreMap":42},[129,140748,140749,140751,140753],{"class":131,"line":132},[129,140750,51612],{"class":51301},[129,140752,137554],{"class":1977},[129,140754,15587],{"class":139},[129,140756,140757,140759,140761,140763],{"class":131,"line":51},[129,140758,137561],{"class":188},[129,140760,51438],{"class":139},[129,140762,7667],{"class":244},[129,140764,1305],{"class":139},[129,140766,140767,140769,140771,140773],{"class":131,"line":1194},[129,140768,128169],{"class":188},[129,140770,51438],{"class":139},[129,140772,60870],{"class":188},[129,140774,1305],{"class":139},[129,140776,140777],{"class":131,"line":1209},[129,140778,1579],{"class":139},[100,140780,140782],{"id":140781},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[40,140784],{"style":126409,"src":140785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140787,140788],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140790,140791],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140793,140794,140797],{},[126,140795,140796],{},"box_hd"," 制作",[14,140799,140577,140800,140802],{},[126,140801,140796],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[40,140804],{"style":126409,"src":140805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1146,140807,140808,140813,140818,140821],{},[86,140809,140810,140812],{},[126,140811,140796],{}," 给 30px 的高度，2个像素的下边框",[86,140814,140815,140816],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[126,140817,139064],{},[86,140819,140820],{},"左侧盒左浮动，右侧盒子右浮动",[86,140822,140823,140825,140826,140828],{},[126,140824,20],{},"标签之间的距离用左右的",[126,140827,30884],{},"撑开即可",[14,140830,140831],{},"结构代码",[120,140833,140834],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,140835,140836,140842,140852],{"__ignoreMap":42},[129,140837,140838,140840],{"class":131,"line":132},[129,140839,130401],{"class":1977},[129,140841,15587],{"class":139},[129,140843,140844,140846,140848,140850],{"class":131,"line":51},[129,140845,131033],{"class":188},[129,140847,51438],{"class":139},[129,140849,23751],{"class":188},[129,140851,1305],{"class":139},[129,140853,140854],{"class":131,"line":1194},[129,140855,1579],{"class":139},[14,140857,140858],{},"样式代码",[120,140860,140861],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,140862,140863,140869,140879],{"__ignoreMap":42},[129,140864,140865,140867],{"class":131,"line":132},[129,140866,130401],{"class":1977},[129,140868,15587],{"class":139},[129,140870,140871,140873,140875,140877],{"class":131,"line":51},[129,140872,131033],{"class":188},[129,140874,51438],{"class":139},[129,140876,23751],{"class":188},[129,140878,1305],{"class":139},[129,140880,140881],{"class":131,"line":1194},[129,140882,1579],{"class":139},[14,140884,140885,140797],{},[126,140886,140887],{},"box_bd",[14,140889,140890],{},"2 号盒子 box_bd，不要给高度",[40,140892],{"style":126409,"src":140893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140895,140896],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140898,140899],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140901,140902],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1146,140904,140905,140917,140933],{},[86,140906,140907,140909,140910,140913,140914,140916],{},[126,140908,140887],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[126,140911,140912],{},"tab_content","，在",[126,140915,140912],{}," 里面包裹tab选项卡对应的内容",[86,140918,140919,140920,140923,140924,140926,140927,140929,140930,140932],{},"内容被一个大盒子包裹（",[126,140921,140922],{},"tab_list_item","），里面是 ",[126,140925,1146],{}," 包裹 5个 ",[126,140928,86],{},"，每个",[126,140931,86],{},"设置对应的宽度，然后设置浮动",[86,140934,140935,140936,140938,140939,140941,140942],{},"而这5个",[126,140937,86],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[126,140940,86],{},"设置",[1146,140943,140944,140962,140965],{},[86,140945,140946,140947,140949,140950,140952,140953,140955,140956,140958,140959,140961],{},"第一个小 ",[126,140948,86],{}," 分为上下结构，上面是 ",[126,140951,1146],{}," 包裹 ",[126,140954,86],{}," ，",[126,140957,86],{},"里面包裹 ",[126,140960,20],{},"，下面插入一张图片",[86,140963,140964],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[86,140966,140967,140968,140970,140971,140973,140974,140976],{},"后面的小 ",[126,140969,86],{}," 里面先放一个",[126,140972,20],{},"标签，然后在",[126,140975,20],{},"标签里面插入图片即可",[14,140978,140831],{},[120,140980,140981],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,140982,140983],{"__ignoreMap":42},[129,140984,140985,140987,140989,140991,140993,140995,140997,140999,141001,141003,141005,141007],{"class":131,"line":132},[129,140986,1049],{"class":139},[129,140988,40],{"class":51301},[129,140990,55240],{"class":1977},[129,140992,185],{"class":139},[129,140994,134070],{"class":244},[129,140996,55248],{"class":1977},[129,140998,185],{"class":139},[129,141000,134077],{"class":244},[129,141002,134080],{"class":1977},[129,141004,185],{"class":139},[129,141006,134085],{"class":244},[129,141008,51308],{"class":139},[14,141010,140858],{},[120,141012,141013],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,141014,141015],{"__ignoreMap":42},[129,141016,141017,141019,141021,141023,141025,141027,141029,141031,141033,141035,141037,141039],{"class":131,"line":132},[129,141018,1049],{"class":139},[129,141020,40],{"class":51301},[129,141022,55240],{"class":1977},[129,141024,185],{"class":139},[129,141026,134070],{"class":244},[129,141028,55248],{"class":1977},[129,141030,185],{"class":139},[129,141032,134077],{"class":244},[129,141034,134080],{"class":1977},[129,141036,185],{"class":139},[129,141038,134085],{"class":244},[129,141040,51308],{"class":139},[14,141042,141043],{},"tab栏切换需求！！！！！！介绍：",[40,141045],{"style":126409,"src":141046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1146,141048,141049,141057,141063,141066],{},[86,141050,141051,141054,141055],{},[126,141052,141053],{},"tab","栏的布局是 ",[126,141056,139064],{},[86,141058,141059,141060,141062],{},"有多少个",[126,141061,141053],{},"选项卡，那么对应就有多少个内容",[86,141064,141065],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[86,141067,141068,141069,141072,141073,141075,141076,141078],{},"等后面我们学习了",[126,141070,141071],{},"js","之后，我们就会配合",[126,141074,141071],{},"来实现，",[126,141077,141053],{},"栏的切换",[71,141080,141082],{"id":141081},"_162-列表制作","16.2 列表制作",[100,141084,141086],{"id":141085},"_1621-准备工作","16.2.1 准备工作",[1146,141088,141089,141092,141095,141098],{},[86,141090,141091],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[86,141093,141094],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[86,141096,141097],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[86,141099,141100],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[100,141102,141104,141105,101019,141107,141109],{"id":141103},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[126,141106,131558],{},[126,141108,53714],{}," 修改",[40,141111],{"style":126409,"src":141112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1146,141114,141115],{},[86,141116,141117],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141119,139923],{},[120,141121,141122],{"className":126553,"code":131985,"language":126555,"meta":42,"style":42},[126,141123,141124,141128,141142,141146,141160,141164,141178,141182,141196,141200],{"__ignoreMap":42},[129,141125,141126],{"class":131,"line":132},[129,141127,131992],{"class":198},[129,141129,141130,141132,141134,141136,141138,141140],{"class":131,"line":51},[129,141131,131997],{"class":1977},[129,141133,79808],{"class":139},[129,141135,128913],{"class":188},[129,141137,51438],{"class":139},[129,141139,132006],{"class":188},[129,141141,129483],{"class":139},[129,141143,141144],{"class":131,"line":1194},[129,141145,132013],{"class":198},[129,141147,141148,141150,141152,141154,141156,141158],{"class":131,"line":1209},[129,141149,132018],{"class":1977},[129,141151,79808],{"class":139},[129,141153,128913],{"class":188},[129,141155,51438],{"class":139},[129,141157,54765],{"class":188},[129,141159,129483],{"class":139},[129,141161,141162],{"class":131,"line":1215},[129,141163,132033],{"class":198},[129,141165,141166,141168,141170,141172,141174,141176],{"class":131,"line":1229},[129,141167,132038],{"class":1977},[129,141169,79808],{"class":139},[129,141171,128913],{"class":188},[129,141173,51438],{"class":139},[129,141175,54832],{"class":188},[129,141177,129483],{"class":139},[129,141179,141180],{"class":131,"line":1235},[129,141181,132053],{"class":198},[129,141183,141184,141186,141188,141190,141192,141194],{"class":131,"line":1326},[129,141185,132058],{"class":1977},[129,141187,79808],{"class":139},[129,141189,128913],{"class":188},[129,141191,51438],{"class":139},[129,141193,86234],{"class":188},[129,141195,129483],{"class":139},[129,141197,141198],{"class":131,"line":1332},[129,141199,132073],{"class":198},[129,141201,141202,141204,141206,141208,141210,141212],{"class":131,"line":1344},[129,141203,132078],{"class":1977},[129,141205,79808],{"class":139},[129,141207,128913],{"class":188},[129,141209,51438],{"class":139},[129,141211,132087],{"class":188},[129,141213,129483],{"class":139},[14,141215,140012],{},[120,141217,141218],{"className":126553,"code":131985,"language":126555,"meta":42,"style":42},[126,141219,141220,141224,141238,141242,141256,141260,141274,141278,141292,141296],{"__ignoreMap":42},[129,141221,141222],{"class":131,"line":132},[129,141223,131992],{"class":198},[129,141225,141226,141228,141230,141232,141234,141236],{"class":131,"line":51},[129,141227,131997],{"class":1977},[129,141229,79808],{"class":139},[129,141231,128913],{"class":188},[129,141233,51438],{"class":139},[129,141235,132006],{"class":188},[129,141237,129483],{"class":139},[129,141239,141240],{"class":131,"line":1194},[129,141241,132013],{"class":198},[129,141243,141244,141246,141248,141250,141252,141254],{"class":131,"line":1209},[129,141245,132018],{"class":1977},[129,141247,79808],{"class":139},[129,141249,128913],{"class":188},[129,141251,51438],{"class":139},[129,141253,54765],{"class":188},[129,141255,129483],{"class":139},[129,141257,141258],{"class":131,"line":1215},[129,141259,132033],{"class":198},[129,141261,141262,141264,141266,141268,141270,141272],{"class":131,"line":1229},[129,141263,132038],{"class":1977},[129,141265,79808],{"class":139},[129,141267,128913],{"class":188},[129,141269,51438],{"class":139},[129,141271,54832],{"class":188},[129,141273,129483],{"class":139},[129,141275,141276],{"class":131,"line":1235},[129,141277,132053],{"class":198},[129,141279,141280,141282,141284,141286,141288,141290],{"class":131,"line":1326},[129,141281,132058],{"class":1977},[129,141283,79808],{"class":139},[129,141285,128913],{"class":188},[129,141287,51438],{"class":139},[129,141289,86234],{"class":188},[129,141291,129483],{"class":139},[129,141293,141294],{"class":131,"line":1332},[129,141295,132073],{"class":198},[129,141297,141298,141300,141302,141304,141306,141308],{"class":131,"line":1344},[129,141299,132078],{"class":1977},[129,141301,79808],{"class":139},[129,141303,128913],{"class":188},[129,141305,51438],{"class":139},[129,141307,132087],{"class":188},[129,141309,129483],{"class":139},[1146,141311,141312,141323],{},[86,141313,141314,141315,141318,141319,101019,141321],{},"1 号盒子左侧浮动 ",[126,141316,141317],{},"sk_list"," 里面包含 ",[126,141320,1146],{},[126,141322,86],{},[86,141324,141325,141326,141318,141329,101019,141331],{},"2 号盒子左侧浮动 ",[126,141327,141328],{},"sk_con",[126,141330,1146],{},[126,141332,86],{},[14,141334,139923],{},[120,141336,141337],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,141338,141339,141345,141355],{"__ignoreMap":42},[129,141340,141341,141343],{"class":131,"line":132},[129,141342,130401],{"class":1977},[129,141344,15587],{"class":139},[129,141346,141347,141349,141351,141353],{"class":131,"line":51},[129,141348,131033],{"class":188},[129,141350,51438],{"class":139},[129,141352,23751],{"class":188},[129,141354,1305],{"class":139},[129,141356,141357],{"class":131,"line":1194},[129,141358,1579],{"class":139},[14,141360,140012],{},[120,141362,141363],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,141364,141365,141371,141381],{"__ignoreMap":42},[129,141366,141367,141369],{"class":131,"line":132},[129,141368,130401],{"class":1977},[129,141370,15587],{"class":139},[129,141372,141373,141375,141377,141379],{"class":131,"line":51},[129,141374,131033],{"class":188},[129,141376,51438],{"class":139},[129,141378,23751],{"class":188},[129,141380,1305],{"class":139},[129,141382,141383],{"class":131,"line":1194},[129,141384,1579],{"class":139},[100,141386,141388,141389],{"id":141387},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[126,141390,141391],{},"sk_container",[40,141393],{"style":126409,"src":141394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1146,141396,141397,141402],{},[86,141398,140577,141399,141401],{},[126,141400,141391],{}," 给宽度 1200，不要给高度",[86,141403,141404],{},"一定不要忘记清除浮动",[14,141406,139923],{},[120,141408,141409],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,141410,141411,141417,141427],{"__ignoreMap":42},[129,141412,141413,141415],{"class":131,"line":132},[129,141414,130401],{"class":1977},[129,141416,15587],{"class":139},[129,141418,141419,141421,141423,141425],{"class":131,"line":51},[129,141420,131033],{"class":188},[129,141422,51438],{"class":139},[129,141424,23751],{"class":188},[129,141426,1305],{"class":139},[129,141428,141429],{"class":131,"line":1194},[129,141430,1579],{"class":139},[83,141432,141433],{},[86,141434,141435],{},"sk_hd制作",[1146,141437,141438],{},[86,141439,140657,141440,141443],{},[126,141441,141442],{},"sk_hd"," ，插入图片即可",[14,141445,139923],{},[120,141447,141448],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,141449,141450],{"__ignoreMap":42},[129,141451,141452,141454,141456,141458,141460,141462,141464,141466,141468,141470,141472,141474],{"class":131,"line":132},[129,141453,1049],{"class":139},[129,141455,40],{"class":51301},[129,141457,55240],{"class":1977},[129,141459,185],{"class":139},[129,141461,134070],{"class":244},[129,141463,55248],{"class":1977},[129,141465,185],{"class":139},[129,141467,134077],{"class":244},[129,141469,134080],{"class":1977},[129,141471,185],{"class":139},[129,141473,134085],{"class":244},[129,141475,51308],{"class":139},[83,141477,141478],{"start":51},[86,141479,141480],{},"sk_bd制作",[1146,141482,141483],{},[86,141484,141485,141486,141489,141490,101019,141492,141494],{},"3 号盒子 ",[126,141487,141488],{},"sk_bd"," ，里面包含很多的 ",[126,141491,1146],{},[126,141493,86],{},[1146,141495,141496,141505],{},[86,141497,141498,141499,141501,141502,141504],{},"当鼠标移入到 ",[126,141500,86],{}," 上面的时候显示红色的边框，在这里先给 ",[126,141503,86],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[86,141506,141507,141508,141510,141511,141513,141514,141517,141518,141520],{},"由于给每个 ",[126,141509,86],{}," 都设置了外边距，导致一行的最后一个 ",[126,141512,86],{}," 掉了下来，在这里我们利用 ",[126,141515,141516],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[126,141519,86],{},"，去掉外边距就好了",[14,141522,139923],{},[120,141524,141525],{"className":126553,"code":138742,"language":126555,"meta":42,"style":42},[126,141526,141527,141533,141545],{"__ignoreMap":42},[129,141528,141529,141531],{"class":131,"line":132},[129,141530,51612],{"class":51301},[129,141532,15587],{"class":139},[129,141534,141535,141537,141539,141541,141543],{"class":131,"line":51},[129,141536,70471],{"class":188},[129,141538,51438],{"class":139},[129,141540,331],{"class":188},[129,141542,51557],{"class":188},[129,141544,1305],{"class":139},[129,141546,141547],{"class":131,"line":1194},[129,141548,1579],{"class":139},[14,141550,140012],{},[120,141552,141553],{"className":126553,"code":138742,"language":126555,"meta":42,"style":42},[126,141554,141555,141561,141573],{"__ignoreMap":42},[129,141556,141557,141559],{"class":131,"line":132},[129,141558,51612],{"class":51301},[129,141560,15587],{"class":139},[129,141562,141563,141565,141567,141569,141571],{"class":131,"line":51},[129,141564,70471],{"class":188},[129,141566,51438],{"class":139},[129,141568,331],{"class":188},[129,141570,51557],{"class":188},[129,141572,1305],{"class":139},[129,141574,141575],{"class":131,"line":1194},[129,141576,1579],{"class":139},[71,141578,141580],{"id":141579},"_163-注册页面制作","16.3 注册页面制作",[40,141582],{"style":126409,"src":141583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141585,141586,141588],{},[289,141587,9040],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[40,141590],{"style":126409,"src":141591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[100,141593,141595],{"id":141594},"_1631-准备工作","16.3.1 准备工作",[1146,141597,141598,141601],{},[86,141599,141600],{},"创建register.html，引入 base.css，引入favicon图标",[86,141602,141603],{},"创建register.css ，在html页面进行引入",[100,141605,141607,141608,141610],{"id":141606},"_1632-header-头部实现","16.3.2 ",[126,141609,131558],{}," 头部实现",[1146,141612,141613,141616],{},[86,141614,141615],{},"整个内容用 版心 进行包裹",[86,141617,141618],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141620,139923],{},[120,141622,141623],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,141624,141625],{"__ignoreMap":42},[129,141626,141627,141629,141631,141633,141635,141637,141639,141641,141643,141645,141647,141649],{"class":131,"line":132},[129,141628,1049],{"class":139},[129,141630,40],{"class":51301},[129,141632,55240],{"class":1977},[129,141634,185],{"class":139},[129,141636,134070],{"class":244},[129,141638,55248],{"class":1977},[129,141640,185],{"class":139},[129,141642,134077],{"class":244},[129,141644,134080],{"class":1977},[129,141646,185],{"class":139},[129,141648,134085],{"class":244},[129,141650,51308],{"class":139},[14,141652,140012],{},[120,141654,141655],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,141656,141657],{"__ignoreMap":42},[129,141658,141659,141661,141663,141665,141667,141669,141671,141673,141675,141677,141679,141681],{"class":131,"line":132},[129,141660,1049],{"class":139},[129,141662,40],{"class":51301},[129,141664,55240],{"class":1977},[129,141666,185],{"class":139},[129,141668,134070],{"class":244},[129,141670,55248],{"class":1977},[129,141672,185],{"class":139},[129,141674,134077],{"class":244},[129,141676,134080],{"class":1977},[129,141678,185],{"class":139},[129,141680,134085],{"class":244},[129,141682,51308],{"class":139},[100,141684,141686,141687,141690],{"id":141685},"_1633-registerarea-主体模块实现","16.3.3 ",[126,141688,141689],{},"registerarea"," 主体模块实现",[40,141692],{"style":126409,"src":141693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141695,141696],{},"整个大盒子 高度为 522px，设置4个边框",[14,141698,139923],{},[120,141700,141701],{"className":126553,"code":130710,"language":126555,"meta":42,"style":42},[126,141702,141703,141709,141725],{"__ignoreMap":42},[129,141704,141705,141707],{"class":131,"line":132},[129,141706,51612],{"class":51301},[129,141708,15587],{"class":139},[129,141710,141711,141713,141715,141717,141719,141721,141723],{"class":131,"line":51},[129,141712,70897],{"class":188},[129,141714,51438],{"class":139},[129,141716,357],{"class":188},[129,141718,51493],{"class":135},[129,141720,51522],{"class":188},[129,141722,129945],{"class":188},[129,141724,1305],{"class":139},[129,141726,141727],{"class":131,"line":1194},[129,141728,1579],{"class":139},[14,141730,140012],{},[120,141732,141733],{"className":126553,"code":130710,"language":126555,"meta":42,"style":42},[126,141734,141735,141741,141757],{"__ignoreMap":42},[129,141736,141737,141739],{"class":131,"line":132},[129,141738,51612],{"class":51301},[129,141740,15587],{"class":139},[129,141742,141743,141745,141747,141749,141751,141753,141755],{"class":131,"line":51},[129,141744,70897],{"class":188},[129,141746,51438],{"class":139},[129,141748,357],{"class":188},[129,141750,51493],{"class":135},[129,141752,51522],{"class":188},[129,141754,129945],{"class":188},[129,141756,1305],{"class":139},[129,141758,141759],{"class":131,"line":1194},[129,141760,1579],{"class":139},[14,141762,141763],{},"1号盒子 是一个 h3 标签，放标题",[1146,141765,141766],{},[86,141767,141768],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141770,139923],{},[120,141772,141773],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,141774,141775,141781,141791],{"__ignoreMap":42},[129,141776,141777,141779],{"class":131,"line":132},[129,141778,130401],{"class":1977},[129,141780,15587],{"class":139},[129,141782,141783,141785,141787,141789],{"class":131,"line":51},[129,141784,131033],{"class":188},[129,141786,51438],{"class":139},[129,141788,23751],{"class":188},[129,141790,1305],{"class":139},[129,141792,141793],{"class":131,"line":1194},[129,141794,1579],{"class":139},[14,141796,140012],{},[120,141798,141799],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,141800,141801,141807,141817],{"__ignoreMap":42},[129,141802,141803,141805],{"class":131,"line":132},[129,141804,130401],{"class":1977},[129,141806,15587],{"class":139},[129,141808,141809,141811,141813,141815],{"class":131,"line":51},[129,141810,131033],{"class":188},[129,141812,51438],{"class":139},[129,141814,23751],{"class":188},[129,141816,1305],{"class":139},[129,141818,141819],{"class":131,"line":1194},[129,141820,1579],{"class":139},[14,141822,141823],{},"2号盒子 里面放注册的内容",[1146,141825,141826,141829,141838,141852,141865,141868,141871,141889,141903],{},[86,141827,141828],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[86,141830,141831,141832,141834,141835,141837],{},"里面的内容利用 ",[126,141833,1146],{}," 包含 ",[126,141836,86],{}," 来实现的（不需要用表格）",[86,141839,139067,141840,141842,141843,141845,141846,141848,141849,141851],{},[126,141841,86],{}," 里面，左侧放 ",[126,141844,33609],{}," 标签， 中间放",[126,141847,53822],{}," 标签， 右侧放 ",[126,141850,129],{}," 提示信息",[86,141853,141854,141855,141857,141858,141860,141861,141864],{},"左侧 ",[126,141856,33609],{},"里面的文字都是右对齐，我们可以给",[126,141859,33609],{},"设置一个宽度（88px），然后利用",[126,141862,141863],{},"text-align"," 来设置右对齐",[86,141866,141867],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[86,141869,141870],{},"右侧 span修饰一下文字颜色",[86,141872,141873,141874],{},"提示信息的样式优化",[1146,141875,141876,141879,141882],{},[86,141877,141878],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[86,141880,141881],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[86,141883,141884,141885,141888],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[126,141886,141887],{},"vertical-algin"," 来设置 图片与文字对齐方式",[86,141890,141891,141892],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1146,141893,141894,141900],{},[86,141895,141896,141897,141899],{},"设置 ",[126,141898,23568],{}," 的 左右 12px 的内边距，设置一下文字颜色",[86,141901,141902],{},"分别设置 背景颜色",[86,141904,141905,141906,141908],{},"同意协议 和 完成注册 都是用 ",[126,141907,86],{}," 进行包裹",[14,141910,139923],{},[120,141912,141913],{"className":126553,"code":140496,"language":126555,"meta":42,"style":42},[126,141914,141915,141921,141931],{"__ignoreMap":42},[129,141916,141917,141919],{"class":131,"line":132},[129,141918,51612],{"class":51301},[129,141920,15587],{"class":139},[129,141922,141923,141925,141927,141929],{"class":131,"line":51},[129,141924,70879],{"class":188},[129,141926,51438],{"class":139},[129,141928,140513],{"class":188},[129,141930,1305],{"class":139},[129,141932,141933],{"class":131,"line":1194},[129,141934,1579],{"class":139},[14,141936,140012],{},[120,141938,141939],{"className":126553,"code":140496,"language":126555,"meta":42,"style":42},[126,141940,141941,141947,141957],{"__ignoreMap":42},[129,141942,141943,141945],{"class":131,"line":132},[129,141944,51612],{"class":51301},[129,141946,15587],{"class":139},[129,141948,141949,141951,141953,141955],{"class":131,"line":51},[129,141950,70879],{"class":188},[129,141952,51438],{"class":139},[129,141954,140513],{"class":188},[129,141956,1305],{"class":139},[129,141958,141959],{"class":131,"line":1194},[129,141960,1579],{"class":139},[100,141962,141964],{"id":141963},"_1634-底部实现","16.3.4 底部实现",[14,141966,139923],{},[120,141968,141969],{"className":126553,"code":140496,"language":126555,"meta":42,"style":42},[126,141970,141971,141977,141987],{"__ignoreMap":42},[129,141972,141973,141975],{"class":131,"line":132},[129,141974,51612],{"class":51301},[129,141976,15587],{"class":139},[129,141978,141979,141981,141983,141985],{"class":131,"line":51},[129,141980,70879],{"class":188},[129,141982,51438],{"class":139},[129,141984,140513],{"class":188},[129,141986,1305],{"class":139},[129,141988,141989],{"class":131,"line":1194},[129,141990,1579],{"class":139},[14,141992,140012],{},[120,141994,141995],{"className":127300,"code":130657,"language":127302,"meta":42,"style":42},[126,141996,141997,142001,142015,142019],{"__ignoreMap":42},[129,141998,141999],{"class":131,"line":132},[129,142000,130664],{"class":198},[129,142002,142003,142005,142007,142009,142011,142013],{"class":131,"line":51},[129,142004,1049],{"class":139},[129,142006,51612],{"class":51301},[129,142008,53487],{"class":1977},[129,142010,185],{"class":139},[129,142012,130677],{"class":244},[129,142014,51308],{"class":139},[129,142016,142017],{"class":131,"line":1194},[129,142018,130684],{"class":139},[129,142020,142021,142023,142025],{"class":131,"line":1209},[129,142022,51786],{"class":139},[129,142024,51612],{"class":51301},[129,142026,51308],{"class":139},[71,142028,142030],{"id":142029},"_164-项目总结","16.4 项目总结",[83,142032,142033,142036,142039,142042],{},[86,142034,142035],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[86,142037,142038],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[86,142040,142041],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[86,142043,142044],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[40,142046],{"style":126409,"src":142047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[83,142049,142050],{"start":1215},[86,142051,142052],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[40,142054],{"style":126409,"src":142055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[83,142057,142058],{"start":1229},[86,142059,142060],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[40,142062],{"style":126409,"src":142063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[120,142065,142066],{"className":127300,"code":136710,"language":127302,"meta":42,"style":42},[126,142067,142068],{"__ignoreMap":42},[129,142069,142070,142072,142074,142076,142078,142080,142082,142084,142086,142088,142090,142092],{"class":131,"line":132},[129,142071,1049],{"class":139},[129,142073,53822],{"class":51301},[129,142075,53825],{"class":1977},[129,142077,185],{"class":139},[129,142079,62700],{"class":244},[129,142081,14935],{"class":1977},[129,142083,185],{"class":139},[129,142085,136731],{"class":244},[129,142087,61021],{"class":1977},[129,142089,185],{"class":139},[129,142091,136738],{"class":244},[129,142093,51308],{"class":139},[83,142095,142096,142099],{"start":1235},[86,142097,142098],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[86,142100,142101],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5141,142103,142104],{},"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":42,"searchDepth":51,"depth":51,"links":142106},[142107,142112,142119,142127],{"id":139733,"depth":51,"text":139734,"children":142108},[142109,142110,142111],{"id":139737,"depth":1194,"text":139738},{"id":140468,"depth":1194,"text":140469},{"id":140781,"depth":1194,"text":140782},{"id":141081,"depth":51,"text":141082,"children":142113},[142114,142115,142117],{"id":141085,"depth":1194,"text":141086},{"id":141103,"depth":1194,"text":142116},"16.2.2 列表页 header 和 nav 修改",{"id":141387,"depth":1194,"text":142118},"16.2.3 列表页主体 sk_container",{"id":141579,"depth":51,"text":141580,"children":142120},[142121,142122,142124,142126],{"id":141594,"depth":1194,"text":141595},{"id":141606,"depth":1194,"text":142123},"16.3.2 header 头部实现",{"id":141685,"depth":1194,"text":142125},"16.3.3 registerarea 主体模块实现",{"id":141963,"depth":1194,"text":141964},{"id":142029,"depth":51,"text":142030},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139725,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142134,"title":142135,"body":142136,"description":53,"extension":54,"meta":142244,"navigation":56,"path":142245,"seo":142246,"stem":142247,"__hash__":142248},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142137,"toc":142239},[142138,142141,142145,142148,142151,142160,142169,142173,142178,142185,142203,142206,142209,142212,142215,142218,142221,142224,142227,142230,142233,142236],[10,142139,142135],{"id":142140},"_17-web服务器与网站发布",[71,142142,142144],{"id":142143},"_171-web服务器","17.1 Web服务器",[14,142146,142147],{},"把自己网站上传到服务器上，可以让其他人访问",[40,142149],{"style":126409,"src":142150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142152,142153,142156,142157],{},[289,142154,142155],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[289,142158,142159],{},"Web 服务器等",[14,142161,142162,142163,101019,142166,25741],{},"根据服务器在网络中所在的位置不同，又可分为 ",[289,142164,142165],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[289,142167,142168],{},"远程服务器",[100,142170,142172],{"id":142171},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142174,142175],{},[289,142176,142177],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142179,142180,142181],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[20,142182,142183],{"href":142183,"rel":142184},"http:\u002F\u002Ffree.3v.do\u002F",[24],[1146,142186,142187,142190,142193,142200],{},[86,142188,142189],{},"去免费空间网站注册账号。",[86,142191,142192],{},"记录下主机名、用户名、密码、域名。",[86,142194,142195,142196,142199],{},"利用 ",[126,142197,142198],{},"utftp"," 软件 上传网站到远程服务器",[86,142201,142202],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142204,142205],{},"使用软件上传，对上传软件文件进行解压",[40,142207],{"style":126409,"src":142208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[40,142210],{"style":126409,"src":142211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142213,142214],{},"输入刚刚申请的服务器账号信息：",[40,142216],{"style":126409,"src":142217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[40,142219],{"style":126409,"src":142220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[40,142222],{"style":126409,"src":142223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[40,142225],{"style":126409,"src":142226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142228,142229],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[40,142231],{"style":126409,"src":142232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142234,142235],{},"浏览器输入域名即可访问",[14,142237,142238],{},"首页一定必须是index",{"title":42,"searchDepth":51,"depth":51,"links":142240},[142241],{"id":142143,"depth":51,"text":142144,"children":142242},[142243],{"id":142171,"depth":1194,"text":142172},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142135,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142250,"title":142251,"body":142252,"description":53,"extension":54,"meta":143179,"navigation":56,"path":143180,"seo":143181,"stem":143182,"__hash__":143183},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142253,"toc":143162},[142254,142257,142261,142264,142267,142278,142281,142285,142289,142294,142297,142300,142303,142306,142310,142336,142340,142344,142347,142350,142354,142387,142391,142394,142397,142461,142465,142469,142472,142475,142478,142482,142527,142531,142534,142564,142568,142572,142575,142578,142582,142585,142654,142657,142765,142767,142773,142777,142780,142783,142879,142882,142886,142910,142914,142917,142921,142924,142928,142931,142934,142937,142940,142944,142947,142950,142954,142958,142961,142964,142967,142970,142974,142977,142981,142984,142987,143032,143036,143040,143043,143046,143049,143081,143085,143088,143122,143126,143129,143159],[10,142255,142251],{"id":142256},"_18-2d动画与3d转换",[71,142258,142260],{"id":142259},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142262,142263],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142265,142266],{},"转换（transform）你可以简单理解为变形",[1146,142268,142269,142272,142275],{},[86,142270,142271],{},"移动：translate",[86,142273,142274],{},"旋转：rotate",[86,142276,142277],{},"缩放：scale",[40,142279],{"style":126409,"src":142280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[100,142282,142284],{"id":142283},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22013,142286,142288],{"id":142287},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142290,142291,142292],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[289,142293,133212],{},[40,142295],{"style":126409,"src":142296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142298,142299],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142301,142302],{},"对于行内元素无效",[14,142304,142305],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22013,142307,142309],{"id":142308},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[120,142311,142312],{"className":126553,"code":138742,"language":126555,"meta":42,"style":42},[126,142313,142314,142320,142332],{"__ignoreMap":42},[129,142315,142316,142318],{"class":131,"line":132},[129,142317,51612],{"class":51301},[129,142319,15587],{"class":139},[129,142321,142322,142324,142326,142328,142330],{"class":131,"line":51},[129,142323,70471],{"class":188},[129,142325,51438],{"class":139},[129,142327,331],{"class":188},[129,142329,51557],{"class":188},[129,142331,1305],{"class":139},[129,142333,142334],{"class":131,"line":1194},[129,142335,1579],{"class":139},[100,142337,142339],{"id":142338},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22013,142341,142343],{"id":142342},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142345,142346],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[40,142348],{"style":126409,"src":142349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22013,142351,142353],{"id":142352},"_18122-旋转效果","18.1.2.2 旋转效果",[120,142355,142357],{"className":126553,"code":142356,"language":126555,"meta":42,"style":42},"div {\n  transform: rotate(45deg);\n}\n",[126,142358,142359,142365,142383],{"__ignoreMap":42},[129,142360,142361,142363],{"class":131,"line":132},[129,142362,51612],{"class":51301},[129,142364,15587],{"class":139},[129,142366,142367,142369,142371,142374,142376,142378,142381],{"class":131,"line":51},[129,142368,136537],{"class":188},[129,142370,51438],{"class":139},[129,142372,142373],{"class":188},"rotate",[129,142375,140],{"class":139},[129,142377,668],{"class":188},[129,142379,142380],{"class":135},"deg",[129,142382,2733],{"class":139},[129,142384,142385],{"class":131,"line":1194},[129,142386,1579],{"class":139},[22013,142388,142390],{"id":142389},"_18123-三角做法","18.1.2.3 三角做法",[14,142392,142393],{},"该下标当经过最外层大盒子时会实现向上反转",[40,142395],{"style":126409,"src":142396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[120,142398,142399],{"className":126553,"code":135073,"language":126555,"meta":42,"style":42},[126,142400,142401,142405,142411,142421,142431,142447,142457],{"__ignoreMap":42},[129,142402,142403],{"class":131,"line":132},[129,142404,135080],{"class":198},[129,142406,142407,142409],{"class":131,"line":51},[129,142408,135085],{"class":1977},[129,142410,15587],{"class":139},[129,142412,142413,142415,142417,142419],{"class":131,"line":1194},[129,142414,70569],{"class":188},[129,142416,51438],{"class":139},[129,142418,331],{"class":188},[129,142420,1305],{"class":139},[129,142422,142423,142425,142427,142429],{"class":131,"line":1209},[129,142424,70789],{"class":188},[129,142426,51438],{"class":139},[129,142428,331],{"class":188},[129,142430,1305],{"class":139},[129,142432,142433,142435,142437,142439,142441,142443,142445],{"class":131,"line":1215},[129,142434,70897],{"class":188},[129,142436,51438],{"class":139},[129,142438,585],{"class":188},[129,142440,51493],{"class":135},[129,142442,51522],{"class":188},[129,142444,63992],{"class":188},[129,142446,1305],{"class":139},[129,142448,142449,142451,142453,142455],{"class":131,"line":1229},[129,142450,135128],{"class":188},[129,142452,51438],{"class":139},[129,142454,62370],{"class":188},[129,142456,1305],{"class":139},[129,142458,142459],{"class":131,"line":1235},[129,142460,1579],{"class":139},[100,142462,142464],{"id":142463},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22013,142466,142468],{"id":142467},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142470,142471],{},"设置中心点",[40,142473],{"style":126409,"src":142474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142476,142477],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22013,142479,142481],{"id":142480},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[120,142483,142485],{"className":126553,"code":142484,"language":126555,"meta":42,"style":42},"\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",[126,142486,142487,142492,142498,142513,142518,142523],{"__ignoreMap":42},[129,142488,142489],{"class":131,"line":132},[129,142490,142491],{"class":198},"\u002F* 转换中心点 *\u002F\n",[129,142493,142494,142496],{"class":131,"line":51},[129,142495,51612],{"class":51301},[129,142497,15587],{"class":139},[129,142499,142500,142503,142505,142507,142509,142511],{"class":131,"line":1194},[129,142501,142502],{"class":188},"  transform-origin",[129,142504,51438],{"class":139},[129,142506,51593],{"class":188},[129,142508,17159],{"class":188},[129,142510,130416],{"class":139},[129,142512,135226],{"class":198},[129,142514,142515],{"class":131,"line":1209},[129,142516,142517],{"class":198},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[129,142519,142520],{"class":131,"line":1215},[129,142521,142522],{"class":198},"  \u002F* transform-origin: left top; *\u002F\n",[129,142524,142525],{"class":131,"line":1229},[129,142526,1579],{"class":139},[22013,142528,142530],{"id":142529},"_18133-旋转案例","18.1.3.3 旋转案例",[40,142532],{"style":126409,"src":142533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[120,142535,142536],{"className":126553,"code":142356,"language":126555,"meta":42,"style":42},[126,142537,142538,142544,142560],{"__ignoreMap":42},[129,142539,142540,142542],{"class":131,"line":132},[129,142541,51612],{"class":51301},[129,142543,15587],{"class":139},[129,142545,142546,142548,142550,142552,142554,142556,142558],{"class":131,"line":51},[129,142547,136537],{"class":188},[129,142549,51438],{"class":139},[129,142551,142373],{"class":188},[129,142553,140],{"class":139},[129,142555,668],{"class":188},[129,142557,142380],{"class":135},[129,142559,2733],{"class":139},[129,142561,142562],{"class":131,"line":1194},[129,142563,1579],{"class":139},[100,142565,142567],{"id":142566},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22013,142569,142571],{"id":142570},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142573,142574],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[40,142576],{"style":126409,"src":142577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22013,142579,142581],{"id":142580},"_18142-分页按钮","18.1.4.2 分页按钮",[40,142583],{"style":126409,"src":142584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[120,142586,142588],{"className":126553,"code":142587,"language":126555,"meta":42,"style":42},"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",[126,142589,142590,142596,142612,142616,142620,142625,142631,142645,142650],{"__ignoreMap":42},[129,142591,142592,142594],{"class":131,"line":132},[129,142593,51612],{"class":51301},[129,142595,15587],{"class":139},[129,142597,142598,142600,142602,142605,142607,142610],{"class":131,"line":51},[129,142599,136537],{"class":188},[129,142601,51438],{"class":139},[129,142603,142604],{"class":188},"scale",[129,142606,140],{"class":139},[129,142608,142609],{"class":188},"1.2",[129,142611,2733],{"class":139},[129,142613,142614],{"class":131,"line":1194},[129,142615,1579],{"class":139},[129,142617,142618],{"class":131,"line":1209},[129,142619,136014],{"class":139},[129,142621,142622],{"class":131,"line":1215},[129,142623,142624],{"class":198},"\u002F* 2D 缩放 *\u002F\n",[129,142626,142627,142629],{"class":131,"line":1229},[129,142628,51612],{"class":51301},[129,142630,15587],{"class":139},[129,142632,142633,142635,142637,142639,142641,142643],{"class":131,"line":1235},[129,142634,136537],{"class":188},[129,142636,51438],{"class":139},[129,142638,142604],{"class":188},[129,142640,140],{"class":139},[129,142642,142609],{"class":188},[129,142644,2733],{"class":139},[129,142646,142647],{"class":131,"line":1326},[129,142648,142649],{"class":198},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[129,142651,142652],{"class":131,"line":1332},[129,142653,1579],{"class":139},[14,142655,142656],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[120,142658,142660],{"className":126553,"code":142659,"language":126555,"meta":42,"style":42},"\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",[126,142661,142662,142667,142677,142698,142719,142723,142728,142734,142761],{"__ignoreMap":42},[129,142663,142664],{"class":131,"line":132},[129,142665,142666],{"class":198},"\u002F* 定义动画 *\u002F\n",[129,142668,142669,142672,142675],{"class":131,"line":51},[129,142670,142671],{"class":135},"@keyframes",[129,142673,142674],{"class":5231}," move",[129,142676,15587],{"class":139},[129,142678,142679,142682,142684,142686,142688,142691,142693,142695],{"class":131,"line":1194},[129,142680,142681],{"class":1977},"  0%",[129,142683,79808],{"class":139},[129,142685,48135],{"class":188},[129,142687,51438],{"class":139},[129,142689,142690],{"class":188},"translateX",[129,142692,140],{"class":139},[129,142694,331],{"class":188},[129,142696,142697],{"class":139},"); }\n",[129,142699,142700,142703,142705,142707,142709,142711,142713,142715,142717],{"class":131,"line":1209},[129,142701,142702],{"class":1977},"  100%",[129,142704,79808],{"class":139},[129,142706,48135],{"class":188},[129,142708,51438],{"class":139},[129,142710,142690],{"class":188},[129,142712,140],{"class":139},[129,142714,450],{"class":188},[129,142716,51493],{"class":135},[129,142718,142697],{"class":139},[129,142720,142721],{"class":131,"line":1215},[129,142722,1579],{"class":139},[129,142724,142725],{"class":131,"line":1229},[129,142726,142727],{"class":198},"\u002F* 调用动画 *\u002F\n",[129,142729,142730,142732],{"class":131,"line":1235},[129,142731,51612],{"class":51301},[129,142733,15587],{"class":139},[129,142735,142736,142739,142741,142743,142745,142747,142749,142751,142753,142756,142759],{"class":131,"line":1326},[129,142737,142738],{"class":188},"  animation",[129,142740,51438],{"class":139},[129,142742,135239],{"class":188},[129,142744,25119],{"class":188},[129,142746,834],{"class":135},[129,142748,78681],{"class":188},[129,142750,4107],{"class":188},[129,142752,834],{"class":135},[129,142754,142755],{"class":188}," infinite",[129,142757,142758],{"class":188}," alternate",[129,142760,1305],{"class":139},[129,142762,142763],{"class":131,"line":1332},[129,142764,1579],{"class":139},[14,142766,142656],{},[120,142768,142771],{"className":142769,"code":142770,"language":5202},[5200],"\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",[126,142772,142770],{"__ignoreMap":42},[22013,142774,142776],{"id":142775},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142778,142779],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[40,142781],{"style":126409,"src":142782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[120,142784,142785],{"className":126553,"code":142659,"language":126555,"meta":42,"style":42},[126,142786,142787,142791,142799,142817,142837,142841,142845,142851,142875],{"__ignoreMap":42},[129,142788,142789],{"class":131,"line":132},[129,142790,142666],{"class":198},[129,142792,142793,142795,142797],{"class":131,"line":51},[129,142794,142671],{"class":135},[129,142796,142674],{"class":5231},[129,142798,15587],{"class":139},[129,142800,142801,142803,142805,142807,142809,142811,142813,142815],{"class":131,"line":1194},[129,142802,142681],{"class":1977},[129,142804,79808],{"class":139},[129,142806,48135],{"class":188},[129,142808,51438],{"class":139},[129,142810,142690],{"class":188},[129,142812,140],{"class":139},[129,142814,331],{"class":188},[129,142816,142697],{"class":139},[129,142818,142819,142821,142823,142825,142827,142829,142831,142833,142835],{"class":131,"line":1209},[129,142820,142702],{"class":1977},[129,142822,79808],{"class":139},[129,142824,48135],{"class":188},[129,142826,51438],{"class":139},[129,142828,142690],{"class":188},[129,142830,140],{"class":139},[129,142832,450],{"class":188},[129,142834,51493],{"class":135},[129,142836,142697],{"class":139},[129,142838,142839],{"class":131,"line":1215},[129,142840,1579],{"class":139},[129,142842,142843],{"class":131,"line":1229},[129,142844,142727],{"class":198},[129,142846,142847,142849],{"class":131,"line":1235},[129,142848,51612],{"class":51301},[129,142850,15587],{"class":139},[129,142852,142853,142855,142857,142859,142861,142863,142865,142867,142869,142871,142873],{"class":131,"line":1326},[129,142854,142738],{"class":188},[129,142856,51438],{"class":139},[129,142858,135239],{"class":188},[129,142860,25119],{"class":188},[129,142862,834],{"class":135},[129,142864,78681],{"class":188},[129,142866,4107],{"class":188},[129,142868,834],{"class":135},[129,142870,142755],{"class":188},[129,142872,142758],{"class":188},[129,142874,1305],{"class":139},[129,142876,142877],{"class":131,"line":1332},[129,142878,1579],{"class":139},[14,142880,142881],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[100,142883,142885],{"id":142884},"_1823-知识点回顾","18.2.3 知识点回顾",[120,142887,142888],{"className":126553,"code":128722,"language":126555,"meta":42,"style":42},[126,142889,142890,142896,142906],{"__ignoreMap":42},[129,142891,142892,142894],{"class":131,"line":132},[129,142893,51612],{"class":51301},[129,142895,15587],{"class":139},[129,142897,142898,142900,142902,142904],{"class":131,"line":51},[129,142899,128735],{"class":188},[129,142901,51438],{"class":139},[129,142903,61737],{"class":188},[129,142905,1305],{"class":139},[129,142907,142908],{"class":131,"line":1194},[129,142909,1579],{"class":139},[71,142911,142913],{"id":142912},"_183-3d-转换","18.3 3D 转换",[14,142915,142916],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[100,142918,142920],{"id":142919},"_1831-坐标轴认识","18.3.1 坐标轴认识",[40,142922],{"style":126409,"src":142923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[100,142925,142927],{"id":142926},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[40,142929],{"style":126409,"src":142930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142932,142933],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142935,142936],{},"translate3d的效果需要搭配透视perspective来使用",[40,142938],{"style":126409,"src":142939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[100,142941,142943],{"id":142942},"_1833-透视-perspective","18.3.3 透视 perspective",[40,142945],{"style":126409,"src":142946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142948,142949],{},"透视写在父盒子上，单位为像素",[100,142951,142953],{"id":142952},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22013,142955,142957],{"id":142956},"_18341-分开解释","18.3.4.1 分开解释",[40,142959],{"style":126409,"src":142960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[40,142962],{"style":126409,"src":142963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[40,142965],{"style":126409,"src":142966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,142968,142969],{},"总结来说就是左手原则",[22013,142971,142973],{"id":142972},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[40,142975],{"style":126409,"src":142976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[100,142978,142980],{"id":142979},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[40,142982],{"style":126409,"src":142983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[40,142985],{"style":126409,"src":142986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[120,142988,142990],{"className":126553,"code":142989,"language":126555,"meta":42,"style":42},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[126,142991,142992,142998,143011,143028],{"__ignoreMap":42},[129,142993,142994,142996],{"class":131,"line":132},[129,142995,51612],{"class":51301},[129,142997,15587],{"class":139},[129,142999,143000,143003,143005,143007,143009],{"class":131,"line":51},[129,143001,143002],{"class":188},"  perspective",[129,143004,51438],{"class":139},[129,143006,65075],{"class":188},[129,143008,51493],{"class":135},[129,143010,1305],{"class":139},[129,143012,143013,143015,143017,143020,143022,143024,143026],{"class":131,"line":1194},[129,143014,136537],{"class":188},[129,143016,51438],{"class":139},[129,143018,143019],{"class":188},"rotateX",[129,143021,140],{"class":139},[129,143023,668],{"class":188},[129,143025,142380],{"class":135},[129,143027,2733],{"class":139},[129,143029,143030],{"class":131,"line":1209},[129,143031,1579],{"class":139},[100,143033,143035],{"id":143034},"_1836-案例","18.3.6 案例",[22013,143037,143039],{"id":143038},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[40,143041],{"style":126409,"src":143042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[40,143044],{"style":126409,"src":143045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[40,143047],{"style":126409,"src":143048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[120,143050,143052],{"className":126553,"code":143051,"language":126555,"meta":42,"style":42},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[126,143053,143054,143059,143065,143077],{"__ignoreMap":42},[129,143055,143056],{"class":131,"line":132},[129,143057,143058],{"class":198},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[129,143060,143061,143063],{"class":131,"line":51},[129,143062,133550],{"class":1977},[129,143064,15587],{"class":139},[129,143066,143067,143069,143071,143073,143075],{"class":131,"line":1194},[129,143068,143002],{"class":188},[129,143070,51438],{"class":139},[129,143072,65075],{"class":188},[129,143074,51493],{"class":135},[129,143076,1305],{"class":139},[129,143078,143079],{"class":131,"line":1209},[129,143080,1579],{"class":139},[22013,143082,143084],{"id":143083},"_18362-3d导航栏","18.3.6.2 3D导航栏",[40,143086],{"style":126409,"src":143087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[120,143089,143090],{"className":127300,"code":130657,"language":127302,"meta":42,"style":42},[126,143091,143092,143096,143110,143114],{"__ignoreMap":42},[129,143093,143094],{"class":131,"line":132},[129,143095,130664],{"class":198},[129,143097,143098,143100,143102,143104,143106,143108],{"class":131,"line":51},[129,143099,1049],{"class":139},[129,143101,51612],{"class":51301},[129,143103,53487],{"class":1977},[129,143105,185],{"class":139},[129,143107,130677],{"class":244},[129,143109,51308],{"class":139},[129,143111,143112],{"class":131,"line":1194},[129,143113,130684],{"class":139},[129,143115,143116,143118,143120],{"class":131,"line":1209},[129,143117,51786],{"class":139},[129,143119,51612],{"class":51301},[129,143121,51308],{"class":139},[22013,143123,143125],{"id":143124},"_18363-旋转木马","18.3.6.3 旋转木马",[40,143127],{"style":126409,"src":143128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[120,143130,143131],{"className":126553,"code":142356,"language":126555,"meta":42,"style":42},[126,143132,143133,143139,143155],{"__ignoreMap":42},[129,143134,143135,143137],{"class":131,"line":132},[129,143136,51612],{"class":51301},[129,143138,15587],{"class":139},[129,143140,143141,143143,143145,143147,143149,143151,143153],{"class":131,"line":51},[129,143142,136537],{"class":188},[129,143144,51438],{"class":139},[129,143146,142373],{"class":188},[129,143148,140],{"class":139},[129,143150,668],{"class":188},[129,143152,142380],{"class":135},[129,143154,2733],{"class":139},[129,143156,143157],{"class":131,"line":1194},[129,143158,1579],{"class":139},[5141,143160,143161],{},"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":42,"searchDepth":51,"depth":51,"links":143163},[143164,143171],{"id":142259,"depth":51,"text":142260,"children":143165},[143166,143167,143168,143169,143170],{"id":142283,"depth":1194,"text":142284},{"id":142338,"depth":1194,"text":142339},{"id":142463,"depth":1194,"text":142464},{"id":142566,"depth":1194,"text":142567},{"id":142884,"depth":1194,"text":142885},{"id":142912,"depth":51,"text":142913,"children":143172},[143173,143174,143175,143176,143177,143178],{"id":142919,"depth":1194,"text":142920},{"id":142926,"depth":1194,"text":142927},{"id":142942,"depth":1194,"text":142943},{"id":142952,"depth":1194,"text":142953},{"id":142979,"depth":1194,"text":142980},{"id":143034,"depth":1194,"text":143035},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142251,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143185,"title":143186,"body":143187,"description":53,"extension":54,"meta":143390,"navigation":56,"path":143391,"seo":143392,"stem":143393,"__hash__":143394},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143188,"toc":143379},[143189,143192,143196,143199,143202,143206,143209,143212,143215,143219,143222,143226,143229,143233,143236,143240,143254,143258,143283,143286,143289,143306,143310,143314,143317,143320,143324,143327,143330,143348,143352,143355,143369,143373,143376],[10,143190,143186],{"id":143191},"_19-移动端基础-前缀现状与视口",[71,143193,143195],{"id":143194},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[40,143197],{"style":126409,"src":143198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143200,143201],{},"意思就是加个前缀，增加兼容性",[71,143203,143205],{"id":143204},"_192-移动端现状认识","19.2 移动端现状认识",[40,143207],{"style":126409,"src":143208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143210,143211],{},"调试方法：",[40,143213],{"style":126409,"src":143214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[71,143216,143218],{"id":143217},"_193-视口","19.3 视口",[14,143220,143221],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[100,143223,143225],{"id":143224},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[40,143227],{"style":126409,"src":143228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[100,143230,143232],{"id":143231},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[40,143234],{"style":126409,"src":143235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[100,143237,143239],{"id":143238},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1146,143241,143242,143245,143248,143251],{},[86,143243,143244],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[86,143246,143247],{},"理想视口，对设备来讲，是最理想的视口尺寸",[86,143249,143250],{},"需要手动添写meta视口标签通知浏览器操作",[86,143252,143253],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[100,143255,143257],{"id":143256},"_1934-meta视口标签","19.3.4 meta视口标签",[120,143259,143261],{"className":127300,"code":143260,"language":127302,"meta":42,"style":42},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[126,143262,143263],{"__ignoreMap":42},[129,143264,143265,143267,143269,143271,143273,143275,143277,143279,143281],{"class":131,"line":132},[129,143266,1049],{"class":139},[129,143268,51345],{"class":51301},[129,143270,14935],{"class":1977},[129,143272,185],{"class":139},[129,143274,51392],{"class":244},[129,143276,51372],{"class":1977},[129,143278,185],{"class":139},[129,143280,51399],{"class":244},[129,143282,51308],{"class":139},[40,143284],{"style":126409,"src":143285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143287,143288],{},"标准视口设置：",[83,143290,143291,143294,143297,143300,143303],{},[86,143292,143293],{},"视口宽度和设备保持一致",[86,143295,143296],{},"视口的默认缩放比例1.0",[86,143298,143299],{},"不允许用户自行缩放",[86,143301,143302],{},"最大允许的缩放比例1.0",[86,143304,143305],{},"最小允许的缩放比例1.0",[100,143307,143309],{"id":143308},"_1935-二倍图","19.3.5 二倍图",[22013,143311,143313],{"id":143312},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[40,143315],{"style":126409,"src":143316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[40,143318],{"style":126409,"src":143319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22013,143321,143323],{"id":143322},"_19352-多倍图","19.3.5.2 多倍图",[40,143325],{"style":126409,"src":143326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143328,143329],{},"二倍图法，代码如下：",[120,143331,143333],{"className":126553,"code":143332,"language":126555,"meta":42,"style":42},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[126,143334,143335,143340],{"__ignoreMap":42},[129,143336,143337],{"class":131,"line":132},[129,143338,143339],{"class":198},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[129,143341,143342,143345],{"class":131,"line":51},[129,143343,143344],{"class":51301},"background-size",[129,143346,143347],{"class":139},": 50% 50%;\n",[22013,143349,143351],{"id":143350},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[40,143353],{"style":126409,"src":143354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[83,143356,143357,143360,143363,143366],{},[86,143358,143359],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[86,143361,143362],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[86,143364,143365],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[86,143367,143368],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22013,143370,143372],{"id":143371},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[40,143374],{"style":126409,"src":143375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5141,143377,143378],{},"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":42,"searchDepth":51,"depth":51,"links":143380},[143381,143382,143383],{"id":143194,"depth":51,"text":143195},{"id":143204,"depth":51,"text":143205},{"id":143217,"depth":51,"text":143218,"children":143384},[143385,143386,143387,143388,143389],{"id":143224,"depth":1194,"text":143225},{"id":143231,"depth":1194,"text":143232},{"id":143238,"depth":1194,"text":143239},{"id":143256,"depth":1194,"text":143257},{"id":143308,"depth":1194,"text":143309},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143186,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143396,"title":143397,"body":143398,"description":53,"extension":54,"meta":144275,"navigation":56,"path":144276,"seo":144277,"stem":144278,"__hash__":144279},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143399,"toc":144259},[143400,143403,143407,143414,143417,143424,143427,143432,143435,143439,143443,143450,143453,143456,143460,143463,143466,143469,143472,143475,143479,143482,143486,143488,143491,143494,143497,143500,143502,143505,143507,143537,143539,143569,143573,143576,143580,143583,143600,143603,143606,143682,143684,143687,143690,143693,143696,143698,143701,143704,143708,143730,143733,143736,143740,143743,143749,143752,143756,143759,143762,143766,143769,143772,143775,143779,143782,143785,143788,143791,143795,143798,143802,143809,143812,143815,143818,143821,143831,143834,143837,143844,143847,143851,143854,143857,143861,143864,143867,143870,143915,143918,143921,143924,143926,144055,144057,144095,144098,144101,144103,144221,144223,144257],[10,143401,143397],{"id":143402},"_20-移动端布局实战上篇",[71,143404,143406],{"id":143405},"_201-移动端主流方案","20.1 移动端主流方案",[83,143408,143409],{},[86,143410,143411],{},[289,143412,143413],{},"单独移动端页面（主流）",[40,143415],{"style":126409,"src":143416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[83,143418,143419],{"start":51},[86,143420,143421],{},[289,143422,143423],{},"响应式兼容PC移动端",[40,143425],{"style":126409,"src":143426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[83,143428,143429],{"start":1194},[86,143430,143431],{},"两种页面选型布局方式",[40,143433],{"style":126409,"src":143434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[71,143436,143438],{"id":143437},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[100,143440,143442],{"id":143441},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143444,143445,143446],{},"官网地址： ",[20,143447,143448],{"href":143448,"rel":143449},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24],[40,143451],{"style":126409,"src":143452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[40,143454],{"style":126409,"src":143455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[100,143457,143459],{"id":143458},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[40,143461],{"style":126409,"src":143462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[40,143464],{"style":126409,"src":143465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143467,143468],{},"去除高亮：",[14,143470,143471],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143473,143474],{},"-webkit- tap-highlight-color: transparent;",[71,143476,143478],{"id":143477},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[40,143480],{"style":126409,"src":143481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[71,143483,143485],{"id":143484},"_204-流式布局案例","20.4 流式布局案例",[14,143487,169],{},[14,143489,143490],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143492,143493],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143495,143496],{},"图片格式：",[40,143498],{"style":126409,"src":143499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143501,135596],{},[40,143503],{"style":126409,"src":143504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143506,139923],{},[120,143508,143509],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,143510,143511],{"__ignoreMap":42},[129,143512,143513,143515,143517,143519,143521,143523,143525,143527,143529,143531,143533,143535],{"class":131,"line":132},[129,143514,1049],{"class":139},[129,143516,40],{"class":51301},[129,143518,55240],{"class":1977},[129,143520,185],{"class":139},[129,143522,134070],{"class":244},[129,143524,55248],{"class":1977},[129,143526,185],{"class":139},[129,143528,134077],{"class":244},[129,143530,134080],{"class":1977},[129,143532,185],{"class":139},[129,143534,134085],{"class":244},[129,143536,51308],{"class":139},[14,143538,140012],{},[120,143540,143541],{"className":127300,"code":134055,"language":127302,"meta":42,"style":42},[126,143542,143543],{"__ignoreMap":42},[129,143544,143545,143547,143549,143551,143553,143555,143557,143559,143561,143563,143565,143567],{"class":131,"line":132},[129,143546,1049],{"class":139},[129,143548,40],{"class":51301},[129,143550,55240],{"class":1977},[129,143552,185],{"class":139},[129,143554,134070],{"class":244},[129,143556,55248],{"class":1977},[129,143558,185],{"class":139},[129,143560,134077],{"class":244},[129,143562,134080],{"class":1977},[129,143564,185],{"class":139},[129,143566,134085],{"class":244},[129,143568,51308],{"class":139},[71,143570,143572],{"id":143571},"_205-flex布局","20.5 flex布局",[40,143574],{"style":126409,"src":143575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[100,143577,143579],{"id":143578},"_2051-布局原理","20.5.1 布局原理",[14,143581,143582],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1146,143584,143585,143588,143591,143594,143597],{},[86,143586,143587],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[86,143589,143590],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[86,143592,143593],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[86,143595,143596],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[86,143598,143599],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143601,143602],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143604,143605],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[120,143607,143609],{"className":126553,"code":143608,"language":126555,"meta":42,"style":42},"\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",[126,143610,143611,143616,143623,143633,143645,143656,143667,143678],{"__ignoreMap":42},[129,143612,143613],{"class":131,"line":132},[129,143614,143615],{"class":198},"\u002F* Flex 弹性布局 *\u002F\n",[129,143617,143618,143621],{"class":131,"line":51},[129,143619,143620],{"class":1977},".container",[129,143622,15587],{"class":139},[129,143624,143625,143627,143629,143631],{"class":131,"line":1194},[129,143626,128169],{"class":188},[129,143628,51438],{"class":139},[129,143630,51478],{"class":188},[129,143632,1305],{"class":139},[129,143634,143635,143638,143640,143643],{"class":131,"line":1209},[129,143636,143637],{"class":188},"  flex-direction",[129,143639,51438],{"class":139},[129,143641,143642],{"class":188},"row",[129,143644,1305],{"class":139},[129,143646,143647,143650,143652,143654],{"class":131,"line":1215},[129,143648,143649],{"class":188},"  justify-content",[129,143651,51438],{"class":139},[129,143653,51669],{"class":188},[129,143655,1305],{"class":139},[129,143657,143658,143661,143663,143665],{"class":131,"line":1229},[129,143659,143660],{"class":188},"  align-items",[129,143662,51438],{"class":139},[129,143664,51593],{"class":188},[129,143666,1305],{"class":139},[129,143668,143669,143672,143674,143676],{"class":131,"line":1235},[129,143670,143671],{"class":188},"  flex-wrap",[129,143673,51438],{"class":139},[129,143675,78611],{"class":188},[129,143677,1305],{"class":139},[129,143679,143680],{"class":131,"line":1326},[129,143681,1579],{"class":139},[14,143683,70454],{},[14,143685,143686],{},".form-item .male-label {",[14,143688,143689],{},"   margin-right: 20px;",[14,143691,143692],{},"   display: inline-flex;",[14,143694,143695],{},"   align-items: center;",[14,143697,1085],{},[40,143699],{"style":126409,"src":143700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[40,143702],{"style":126409,"src":143703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[100,143705,143707],{"id":143706},"_2052-常见父项属性","20.5.2 常见父项属性",[83,143709,143710,143713,143716,143719,143722,143725,143728],{},[86,143711,143712],{},"flex-direction：设置主轴的方向",[86,143714,143715],{},"justify-content：设置主轴上的子元素排列方式",[86,143717,143718],{},"flex-wrap：设置子元素是否换行",[86,143720,143721],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[86,143723,143724],{},"align-items：设置侧轴上的子元素排列方式（单行）",[86,143726,143727],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[86,143729,143712],{},[40,143731],{"style":126409,"src":143732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[40,143734],{"style":126409,"src":143735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[83,143737,143738],{"start":51},[86,143739,143715],{},[40,143741],{"style":126409,"src":143742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143744,143745,143748],{},[126,143746,143747],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143750,143751],{},"跟着主轴走",[83,143753,143754],{"start":1194},[86,143755,143718],{},[40,143757],{"style":126409,"src":143758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143760,143761],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[83,143763,143764],{"start":1209},[86,143765,143721],{},[40,143767],{"style":126409,"src":143768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143770,143771],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143773,143774],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[83,143776,143777],{"start":1215},[86,143778,143724],{},[40,143780],{"style":126409,"src":143781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143783,143784],{},"align-items与align-content之间的区别：",[14,143786,143787],{},"单找items，多找content",[40,143789],{"style":126409,"src":143790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[83,143792,143793],{"start":1229},[86,143794,143727],{},[40,143796],{"style":126409,"src":143797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[100,143799,143801],{"id":143800},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[83,143803,143804],{},[86,143805,143806],{},[289,143807,143808],{},"flex 属性",[14,143810,143811],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[40,143813],{"style":126409,"src":143814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143816,143817],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143819,143820],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[83,143822,143823],{"start":51},[86,143824,143825,13810,143828],{},[289,143826,143827],{},"align-self",[289,143829,143830],{},"控制子项自己在侧轴上的排列方式",[40,143832],{"style":126409,"src":143833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143835,143836],{},"单个子盒子在父盒子侧轴上的排列方式",[83,143838,143839],{"start":1194},[86,143840,143841,143843],{},[289,143842,95298],{}," 属性定义项目的排列顺序",[40,143845],{"style":126409,"src":143846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[100,143848,143850],{"id":143849},"_2054-背景线性渐变","20.5.4 背景线性渐变",[40,143852],{"style":126409,"src":143853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143855,143856],{},"必须要添加浏览器的私有前缀",[100,143858,143860],{"id":143859},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143862,143863],{},"学到最重要的知识：",[14,143865,143866],{},"flex处理这样的布局思路",[40,143868],{"style":126409,"src":143869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[120,143871,143873],{"className":126553,"code":143872,"language":126555,"meta":42,"style":42},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[126,143874,143875,143881,143891,143901,143911],{"__ignoreMap":42},[129,143876,143877,143879],{"class":131,"line":132},[129,143878,143620],{"class":1977},[129,143880,15587],{"class":139},[129,143882,143883,143885,143887,143889],{"class":131,"line":51},[129,143884,128169],{"class":188},[129,143886,51438],{"class":139},[129,143888,51478],{"class":188},[129,143890,1305],{"class":139},[129,143892,143893,143895,143897,143899],{"class":131,"line":1194},[129,143894,143649],{"class":188},[129,143896,51438],{"class":139},[129,143898,51593],{"class":188},[129,143900,1305],{"class":139},[129,143902,143903,143905,143907,143909],{"class":131,"line":1209},[129,143904,143660],{"class":188},[129,143906,51438],{"class":139},[129,143908,51593],{"class":188},[129,143910,1305],{"class":139},[129,143912,143913],{"class":131,"line":1215},[129,143914,1579],{"class":139},[14,143916,143917],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143919,143920],{},"使用属性选择器",[40,143922],{"style":126409,"src":143923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143925,68890],{},[120,143927,143929],{"className":127300,"code":143928,"language":127302,"meta":42,"style":42},"\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",[126,143930,143931,143936,143950,143955,143975,143980,143999,144004,144023,144028,144047],{"__ignoreMap":42},[129,143932,143933],{"class":131,"line":132},[129,143934,143935],{"class":198},"\u003C!-- 携程网移动端案例结构 -->\n",[129,143937,143938,143940,143942,143944,143946,143948],{"class":131,"line":51},[129,143939,1049],{"class":139},[129,143941,51612],{"class":51301},[129,143943,53487],{"class":1977},[129,143945,185],{"class":139},[129,143947,92324],{"class":244},[129,143949,51308],{"class":139},[129,143951,143952],{"class":131,"line":1194},[129,143953,143954],{"class":198},"  \u003C!-- 搜索栏 -->\n",[129,143956,143957,143959,143961,143963,143965,143968,143971,143973],{"class":131,"line":1209},[129,143958,52145],{"class":139},[129,143960,51612],{"class":51301},[129,143962,53487],{"class":1977},[129,143964,185],{"class":139},[129,143966,143967],{"class":244},"\"search-index\"",[129,143969,143970],{"class":139},">...\u003C\u002F",[129,143972,51612],{"class":51301},[129,143974,51308],{"class":139},[129,143976,143977],{"class":131,"line":1215},[129,143978,143979],{"class":198},"  \u003C!-- 焦点图 -->\n",[129,143981,143982,143984,143986,143988,143990,143993,143995,143997],{"class":131,"line":1229},[129,143983,52145],{"class":139},[129,143985,51612],{"class":51301},[129,143987,53487],{"class":1977},[129,143989,185],{"class":139},[129,143991,143992],{"class":244},"\"focus\"",[129,143994,143970],{"class":139},[129,143996,51612],{"class":51301},[129,143998,51308],{"class":139},[129,144000,144001],{"class":131,"line":1235},[129,144002,144003],{"class":198},"  \u003C!-- 主导航 -->\n",[129,144005,144006,144008,144010,144012,144014,144017,144019,144021],{"class":131,"line":1326},[129,144007,52145],{"class":139},[129,144009,51612],{"class":51301},[129,144011,53487],{"class":1977},[129,144013,185],{"class":139},[129,144015,144016],{"class":244},"\"local-nav\"",[129,144018,143970],{"class":139},[129,144020,51612],{"class":51301},[129,144022,51308],{"class":139},[129,144024,144025],{"class":131,"line":1332},[129,144026,144027],{"class":198},"  \u003C!-- 子导航 -->\n",[129,144029,144030,144032,144034,144036,144038,144041,144043,144045],{"class":131,"line":1344},[129,144031,52145],{"class":139},[129,144033,51612],{"class":51301},[129,144035,53487],{"class":1977},[129,144037,185],{"class":139},[129,144039,144040],{"class":244},"\"nav-common\"",[129,144042,143970],{"class":139},[129,144044,51612],{"class":51301},[129,144046,51308],{"class":139},[129,144048,144049,144051,144053],{"class":131,"line":1626},[129,144050,51786],{"class":139},[129,144052,51612],{"class":51301},[129,144054,51308],{"class":139},[14,144056,70454],{},[120,144058,144059],{"className":126553,"code":137005,"language":126555,"meta":42,"style":42},[126,144060,144061,144075,144091],{"__ignoreMap":42},[129,144062,144063,144065,144067,144069,144071,144073],{"class":131,"line":132},[129,144064,53822],{"class":51301},[129,144066,1029],{"class":139},[129,144068,103108],{"class":1977},[129,144070,185],{"class":135},[129,144072,62700],{"class":244},[129,144074,137022],{"class":139},[129,144076,144077,144079,144081,144083,144085,144087,144089],{"class":131,"line":51},[129,144078,70897],{"class":188},[129,144080,51438],{"class":139},[129,144082,357],{"class":188},[129,144084,51493],{"class":135},[129,144086,51522],{"class":188},[129,144088,130133],{"class":188},[129,144090,1305],{"class":139},[129,144092,144093],{"class":131,"line":1194},[129,144094,1579],{"class":139},[14,144096,144097],{},"总代码和效果展示：",[40,144099],{"style":126409,"src":144100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144102,68890],{},[120,144104,144105],{"className":127300,"code":143928,"language":127302,"meta":42,"style":42},[126,144106,144107,144111,144125,144129,144147,144151,144169,144173,144191,144195,144213],{"__ignoreMap":42},[129,144108,144109],{"class":131,"line":132},[129,144110,143935],{"class":198},[129,144112,144113,144115,144117,144119,144121,144123],{"class":131,"line":51},[129,144114,1049],{"class":139},[129,144116,51612],{"class":51301},[129,144118,53487],{"class":1977},[129,144120,185],{"class":139},[129,144122,92324],{"class":244},[129,144124,51308],{"class":139},[129,144126,144127],{"class":131,"line":1194},[129,144128,143954],{"class":198},[129,144130,144131,144133,144135,144137,144139,144141,144143,144145],{"class":131,"line":1209},[129,144132,52145],{"class":139},[129,144134,51612],{"class":51301},[129,144136,53487],{"class":1977},[129,144138,185],{"class":139},[129,144140,143967],{"class":244},[129,144142,143970],{"class":139},[129,144144,51612],{"class":51301},[129,144146,51308],{"class":139},[129,144148,144149],{"class":131,"line":1215},[129,144150,143979],{"class":198},[129,144152,144153,144155,144157,144159,144161,144163,144165,144167],{"class":131,"line":1229},[129,144154,52145],{"class":139},[129,144156,51612],{"class":51301},[129,144158,53487],{"class":1977},[129,144160,185],{"class":139},[129,144162,143992],{"class":244},[129,144164,143970],{"class":139},[129,144166,51612],{"class":51301},[129,144168,51308],{"class":139},[129,144170,144171],{"class":131,"line":1235},[129,144172,144003],{"class":198},[129,144174,144175,144177,144179,144181,144183,144185,144187,144189],{"class":131,"line":1326},[129,144176,52145],{"class":139},[129,144178,51612],{"class":51301},[129,144180,53487],{"class":1977},[129,144182,185],{"class":139},[129,144184,144016],{"class":244},[129,144186,143970],{"class":139},[129,144188,51612],{"class":51301},[129,144190,51308],{"class":139},[129,144192,144193],{"class":131,"line":1332},[129,144194,144027],{"class":198},[129,144196,144197,144199,144201,144203,144205,144207,144209,144211],{"class":131,"line":1344},[129,144198,52145],{"class":139},[129,144200,51612],{"class":51301},[129,144202,53487],{"class":1977},[129,144204,185],{"class":139},[129,144206,144040],{"class":244},[129,144208,143970],{"class":139},[129,144210,51612],{"class":51301},[129,144212,51308],{"class":139},[129,144214,144215,144217,144219],{"class":131,"line":1626},[129,144216,51786],{"class":139},[129,144218,51612],{"class":51301},[129,144220,51308],{"class":139},[14,144222,70454],{},[120,144224,144225],{"className":127300,"code":130657,"language":127302,"meta":42,"style":42},[126,144226,144227,144231,144245,144249],{"__ignoreMap":42},[129,144228,144229],{"class":131,"line":132},[129,144230,130664],{"class":198},[129,144232,144233,144235,144237,144239,144241,144243],{"class":131,"line":51},[129,144234,1049],{"class":139},[129,144236,51612],{"class":51301},[129,144238,53487],{"class":1977},[129,144240,185],{"class":139},[129,144242,130677],{"class":244},[129,144244,51308],{"class":139},[129,144246,144247],{"class":131,"line":1194},[129,144248,130684],{"class":139},[129,144250,144251,144253,144255],{"class":131,"line":1209},[129,144252,51786],{"class":139},[129,144254,51612],{"class":51301},[129,144256,51308],{"class":139},[5141,144258,137954],{},{"title":42,"searchDepth":51,"depth":51,"links":144260},[144261,144262,144266,144267,144268],{"id":143405,"depth":51,"text":143406},{"id":143437,"depth":51,"text":143438,"children":144263},[144264,144265],{"id":143441,"depth":1194,"text":143442},{"id":143458,"depth":1194,"text":143459},{"id":143477,"depth":51,"text":143478},{"id":143484,"depth":51,"text":143485},{"id":143571,"depth":51,"text":143572,"children":144269},[144270,144271,144272,144273,144274],{"id":143578,"depth":1194,"text":143579},{"id":143706,"depth":1194,"text":143707},{"id":143800,"depth":1194,"text":143801},{"id":143849,"depth":1194,"text":143850},{"id":143859,"depth":1194,"text":143860},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143397,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144281,"title":144282,"body":144283,"description":53,"extension":54,"meta":145510,"navigation":56,"path":145511,"seo":145512,"stem":145513,"__hash__":145514},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144284,"toc":145488},[144285,144288,144292,144296,144299,144302,144306,144311,144314,144317,144320,144323,144326,144383,144386,144391,144394,144397,144401,144412,144416,144419,144422,144429,144434,144438,144441,144447,144450,144454,144457,144464,144467,144470,144477,144480,144487,144490,144493,144500,144503,144506,144508,144525,144529,144532,144535,144538,144542,144545,144548,144551,144554,144557,144560,144562,144565,144568,144630,144633,144743,144750,144756,144759,144762,144766,144769,144773,144778,144781,144788,144791,144797,144802,144805,144808,144811,144814,144817,144820,144823,144826,144882,144884,144910,144914,144917,144920,144923,144931,144934,144937,144941,144997,145000,145004,145010,145021,145024,145029,145032,145035,145041,145044,145047,145050,145053,145056,145059,145062,145065,145090,145096,145099,145102,145105,145108,145111,145114,145119,145122,145125,145128,145136,145139,145146,145149,145152,145154,145178,145180,145183,145186,145189,145192,145195,145198,145201,145235,145238,145241,145275,145282,145285,145288,145291,145294,145297,145300,145307,145310,145313,145316,145319,145326,145329,145332,145339,145342,145345,145349,145352,145355,145358,145361,145364,145367,145370,145373,145375,145399,145401,145425,145429,145440,145443,145446,145449,145452,145455,145458,145461,145464,145467,145470,145473,145476,145479,145482,145485],[10,144286,144282],{"id":144287},"_21-移动端布局实战下篇",[71,144289,144291],{"id":144290},"_211-rem适配布局","21.1 rem适配布局",[100,144293,144295],{"id":144294},"_2111-rem单位","21.1.1 rem单位",[40,144297],{"style":126409,"src":144298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144300,144301],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[100,144303,144305],{"id":144304},"_2112-媒体查询","21.1.2 媒体查询",[83,144307,144308],{},[86,144309,144310],{},"参数介绍",[40,144312],{"style":126409,"src":144313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[40,144315],{"style":126409,"src":144316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[40,144318],{"style":126409,"src":144319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[40,144321],{"style":126409,"src":144322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[40,144324],{"style":126409,"src":144325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[120,144327,144329],{"className":126553,"code":144328,"language":126555,"meta":42,"style":42},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[126,144330,144331,144336,144355,144362,144375,144379],{"__ignoreMap":42},[129,144332,144333],{"class":131,"line":132},[129,144334,144335],{"class":198},"\u002F* 媒体查询 *\u002F\n",[129,144337,144338,144341,144343,144346,144348,144351,144353],{"class":131,"line":51},[129,144339,144340],{"class":135},"@media",[129,144342,1672],{"class":139},[129,144344,144345],{"class":188},"max-width",[129,144347,51438],{"class":139},[129,144349,144350],{"class":188},"768",[129,144352,51493],{"class":135},[129,144354,12457],{"class":139},[129,144356,144357,144360],{"class":131,"line":1194},[129,144358,144359],{"class":1977},"  .container",[129,144361,15587],{"class":139},[129,144363,144364,144367,144369,144371,144373],{"class":131,"line":1209},[129,144365,144366],{"class":188},"    width",[129,144368,51438],{"class":139},[129,144370,450],{"class":188},[129,144372,467],{"class":135},[129,144374,1305],{"class":139},[129,144376,144377],{"class":131,"line":1215},[129,144378,127349],{"class":139},[129,144380,144381],{"class":131,"line":1229},[129,144382,1579],{"class":139},[14,144384,144385],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[83,144387,144388],{"start":51},[86,144389,144390],{},"引入资源",[40,144392],{"style":126409,"src":144393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144395,144396],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[100,144398,144400],{"id":144399},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1146,144402,144403,144406,144409],{},[86,144404,144405],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[86,144407,144408],{},"媒体查询可以根据不同设备宽度来修改样式",[86,144410,144411],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[71,144413,144415],{"id":144414},"_212-less基础","21.2 Less基础",[14,144417,144418],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144420,144421],{},"Less可以解决该问题，它是css的扩展语言",[14,144423,144424,144425],{},"Less中文网址： ",[20,144426,144427],{"href":144427,"rel":144428},"http:\u002F\u002Flesscss.cn\u002F",[24],[14,144430,144431],{},[289,144432,144433],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[100,144435,144437],{"id":144436},"_2121-less安装","21.2.1 less安装",[14,144439,144440],{},"如果使用vscode，则无需进行下方安装步骤",[14,144442,144443],{},[20,144444,144445],{"href":144445,"rel":144446},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24],[40,144448],{"style":126409,"src":144449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[100,144451,144453],{"id":144452},"_2122-less使用","21.2.2 less使用",[14,144455,144456],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[83,144458,144459],{},[86,144460,144461],{},[289,144462,144463],{},"Less 变量",[40,144465],{"style":126409,"src":144466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[40,144468],{"style":126409,"src":144469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[83,144471,144472],{"start":51},[86,144473,144474],{},[289,144475,144476],{},"Less 编译",[40,144478],{"style":126409,"src":144479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[83,144481,144482],{"start":1194},[86,144483,144484],{},[289,144485,144486],{},"Less 嵌套",[40,144488],{"style":126409,"src":144489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[40,144491],{"style":126409,"src":144492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[83,144494,144495],{"start":1209},[86,144496,144497],{},[289,144498,144499],{},"Less 运算",[40,144501],{"style":126409,"src":144502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144504,144505],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144507,169],{},[1146,144509,144510,144513,144516,144519,144522],{},[86,144511,144512],{},"乘号（*）和除号（\u002F）的写法",[86,144514,144515],{},"运算符中间左右有个空格隔开 1px + 5",[86,144517,144518],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[86,144520,144521],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[86,144523,144524],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[71,144526,144528],{"id":144527},"_213-rem-适配方案","21.3 rem 适配方案",[14,144530,144531],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144533,144534],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[40,144536],{"style":126409,"src":144537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[100,144539,144541],{"id":144540},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144543,144544],{},"rem + 媒体查询 + less 技术",[40,144546],{"style":126409,"src":144547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144549,144550],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144552,144553],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[40,144555],{"style":126409,"src":144556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144558,144559],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144561,14648],{},[40,144563],{"style":126409,"src":144564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144566,144567],{},"index.html:",[120,144569,144571],{"className":126553,"code":144570,"language":126555,"meta":42,"style":42},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[126,144572,144573,144578,144584,144600,144604,144610,144626],{"__ignoreMap":42},[129,144574,144575],{"class":131,"line":132},[129,144576,144577],{"class":198},"\u002F* rem 适配方案 *\u002F\n",[129,144579,144580,144582],{"class":131,"line":51},[129,144581,50636],{"class":51301},[129,144583,15587],{"class":139},[129,144585,144586,144588,144590,144593,144595,144597],{"class":131,"line":1194},[129,144587,70627],{"class":188},[129,144589,51438],{"class":139},[129,144591,144592],{"class":188},"62.5",[129,144594,467],{"class":135},[129,144596,130416],{"class":139},[129,144598,144599],{"class":198},"\u002F* 1rem = 10px *\u002F\n",[129,144601,144602],{"class":131,"line":1209},[129,144603,1579],{"class":139},[129,144605,144606,144608],{"class":131,"line":1215},[129,144607,130401],{"class":1977},[129,144609,15587],{"class":139},[129,144611,144612,144614,144616,144618,144621,144623],{"class":131,"line":1229},[129,144613,70569],{"class":188},[129,144615,51438],{"class":139},[129,144617,585],{"class":188},[129,144619,144620],{"class":135},"rem",[129,144622,130416],{"class":139},[129,144624,144625],{"class":198},"\u002F* 100px *\u002F\n",[129,144627,144628],{"class":131,"line":1235},[129,144629,1579],{"class":139},[14,144631,144632],{},"common.less",[120,144634,144636],{"className":126553,"code":144635,"language":126555,"meta":42,"style":42},"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",[126,144637,144638,144644,144659,144663,144669,144683,144687,144691,144695,144701,144715,144719,144725,144739],{"__ignoreMap":42},[129,144639,144640,144642],{"class":131,"line":132},[129,144641,50636],{"class":51301},[129,144643,15587],{"class":139},[129,144645,144646,144648,144650,144652,144654,144656],{"class":131,"line":51},[129,144647,70627],{"class":188},[129,144649,51438],{"class":139},[129,144651,144592],{"class":188},[129,144653,467],{"class":135},[129,144655,26068],{"class":139},[129,144657,144658],{"class":198},"\u002F* 10px *\u002F\n",[129,144660,144661],{"class":131,"line":1194},[129,144662,1579],{"class":139},[129,144664,144665,144667],{"class":131,"line":1209},[129,144666,51612],{"class":51301},[129,144668,15587],{"class":139},[129,144670,144671,144673,144675,144677,144679,144681],{"class":131,"line":1215},[129,144672,70569],{"class":188},[129,144674,51438],{"class":139},[129,144676,585],{"class":188},[129,144678,144620],{"class":135},[129,144680,26068],{"class":139},[129,144682,144625],{"class":198},[129,144684,144685],{"class":131,"line":1229},[129,144686,1579],{"class":139},[129,144688,144689],{"class":131,"line":1235},[129,144690,136014],{"class":139},[129,144692,144693],{"class":131,"line":1326},[129,144694,144577],{"class":198},[129,144696,144697,144699],{"class":131,"line":1332},[129,144698,50636],{"class":51301},[129,144700,15587],{"class":139},[129,144702,144703,144705,144707,144709,144711,144713],{"class":131,"line":1344},[129,144704,70627],{"class":188},[129,144706,51438],{"class":139},[129,144708,144592],{"class":188},[129,144710,467],{"class":135},[129,144712,130416],{"class":139},[129,144714,144599],{"class":198},[129,144716,144717],{"class":131,"line":1626},[129,144718,1579],{"class":139},[129,144720,144721,144723],{"class":131,"line":1631},[129,144722,130401],{"class":1977},[129,144724,15587],{"class":139},[129,144726,144727,144729,144731,144733,144735,144737],{"class":131,"line":1637},[129,144728,70569],{"class":188},[129,144730,51438],{"class":139},[129,144732,585],{"class":188},[129,144734,144620],{"class":135},[129,144736,130416],{"class":139},[129,144738,144625],{"class":198},[129,144740,144741],{"class":131,"line":1642},[129,144742,1579],{"class":139},[14,144744,144745,144746,144749],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23568,144747,144748],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[120,144751,144754],{"className":144752,"code":144753,"language":5202},[5200],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[126,144755,144753],{"__ignoreMap":42},[14,144757,144758],{},"less保存时会自动变成.css文件",[14,144760,144761],{},"好好搞懂上述代码写法",[100,144763,144765],{"id":144764},"_2132-样式导入样式","21.3.2 样式导入样式",[40,144767],{"style":126409,"src":144768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[100,144770,144772],{"id":144771},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[83,144774,144775],{},[86,144776,144777],{},"准备工作",[40,144779],{"style":126409,"src":144780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144782,144783,144784],{},"github地址：",[20,144785,144786],{"href":144786,"rel":144787},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24],[14,144789,144790],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144792,144793,144794],{},"js文件引入到index.html中使用的是",[126,144795,144796],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[83,144798,144799],{"start":51},[86,144800,144801],{},"vscode插件",[40,144803],{"style":126409,"src":144804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144806,144807],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144809,144810],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[40,144812],{"style":126409,"src":144813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144815,144816],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[40,144818],{"style":126409,"src":144819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144821,144822],{},"修改成75就可以，alt+z为快捷键",[14,144824,144825],{},"index.css：",[120,144827,144828],{"className":126553,"code":144570,"language":126555,"meta":42,"style":42},[126,144829,144830,144834,144840,144854,144858,144864,144878],{"__ignoreMap":42},[129,144831,144832],{"class":131,"line":132},[129,144833,144577],{"class":198},[129,144835,144836,144838],{"class":131,"line":51},[129,144837,50636],{"class":51301},[129,144839,15587],{"class":139},[129,144841,144842,144844,144846,144848,144850,144852],{"class":131,"line":1194},[129,144843,70627],{"class":188},[129,144845,51438],{"class":139},[129,144847,144592],{"class":188},[129,144849,467],{"class":135},[129,144851,130416],{"class":139},[129,144853,144599],{"class":198},[129,144855,144856],{"class":131,"line":1209},[129,144857,1579],{"class":139},[129,144859,144860,144862],{"class":131,"line":1215},[129,144861,130401],{"class":1977},[129,144863,15587],{"class":139},[129,144865,144866,144868,144870,144872,144874,144876],{"class":131,"line":1229},[129,144867,70569],{"class":188},[129,144869,51438],{"class":139},[129,144871,585],{"class":188},[129,144873,144620],{"class":135},[129,144875,130416],{"class":139},[129,144877,144625],{"class":198},[129,144879,144880],{"class":131,"line":1235},[129,144881,1579],{"class":139},[14,144883,144567],{},[120,144885,144886],{"className":126553,"code":126957,"language":126555,"meta":42,"style":42},[126,144887,144888,144894,144906],{"__ignoreMap":42},[129,144889,144890,144892],{"class":131,"line":132},[129,144891,51801],{"class":51301},[129,144893,15587],{"class":139},[129,144895,144896,144898,144900,144902,144904],{"class":131,"line":51},[129,144897,70627],{"class":188},[129,144899,51438],{"class":139},[129,144901,740],{"class":188},[129,144903,51493],{"class":135},[129,144905,1305],{"class":139},[129,144907,144908],{"class":131,"line":1194},[129,144909,1579],{"class":139},[71,144911,144913],{"id":144912},"_214-响应式开发","21.4 响应式开发",[14,144915,144916],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[40,144918],{"style":126409,"src":144919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144921,144922],{},"做法：",[1146,144924,144925,144928],{},[86,144926,144927],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[86,144929,144930],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[40,144932],{"style":126409,"src":144933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144935,144936],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[100,144938,144940],{"id":144939},"_2141-简单代码示范","21.4.1 简单代码示范",[120,144942,144943],{"className":126553,"code":144570,"language":126555,"meta":42,"style":42},[126,144944,144945,144949,144955,144969,144973,144979,144993],{"__ignoreMap":42},[129,144946,144947],{"class":131,"line":132},[129,144948,144577],{"class":198},[129,144950,144951,144953],{"class":131,"line":51},[129,144952,50636],{"class":51301},[129,144954,15587],{"class":139},[129,144956,144957,144959,144961,144963,144965,144967],{"class":131,"line":1194},[129,144958,70627],{"class":188},[129,144960,51438],{"class":139},[129,144962,144592],{"class":188},[129,144964,467],{"class":135},[129,144966,130416],{"class":139},[129,144968,144599],{"class":198},[129,144970,144971],{"class":131,"line":1209},[129,144972,1579],{"class":139},[129,144974,144975,144977],{"class":131,"line":1215},[129,144976,130401],{"class":1977},[129,144978,15587],{"class":139},[129,144980,144981,144983,144985,144987,144989,144991],{"class":131,"line":1229},[129,144982,70569],{"class":188},[129,144984,51438],{"class":139},[129,144986,585],{"class":188},[129,144988,144620],{"class":135},[129,144990,130416],{"class":139},[129,144992,144625],{"class":198},[129,144994,144995],{"class":131,"line":1235},[129,144996,1579],{"class":139},[14,144998,144999],{},"父盒子一般命名为container",[100,145001,145003],{"id":145002},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145005,145006,145007],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[289,145008,145009],{},"使得 Web 开发更加快捷",[1146,145011,145012],{},[86,145013,145014,145015],{},"官网：",[289,145016,145017],{},[20,145018,145019],{"href":145019,"rel":145020},"http:\u002F\u002Fgetbootstrap.com\u002F",[24],[14,145022,145023],{},"可以直接去官网拿现成的东西",[83,145025,145026],{},[86,145027,145028],{},"Bootstrap的使用",[14,145030,145031],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145033,145034],{},"Bootstrap 使用四步曲：",[14,145036,145037,145040],{},[289,145038,145039],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[40,145042],{"style":126409,"src":145043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145045,145046],{},"打开Bootstrap官网，然后下载",[40,145048],{"style":126409,"src":145049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[40,145051],{"style":126409,"src":145052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145054,145055],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145057,145058],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145060,145061],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[40,145063],{"style":126409,"src":145064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[120,145066,145068],{"className":126553,"code":145067,"language":126555,"meta":42,"style":42},".center {\n  color: red;\n}\n",[126,145069,145070,145076,145086],{"__ignoreMap":42},[129,145071,145072,145074],{"class":131,"line":132},[129,145073,126844],{"class":1977},[129,145075,15587],{"class":139},[129,145077,145078,145080,145082,145084],{"class":131,"line":51},[129,145079,70906],{"class":188},[129,145081,51438],{"class":139},[129,145083,57422],{"class":188},[129,145085,1305],{"class":139},[129,145087,145088],{"class":131,"line":1194},[129,145089,1579],{"class":139},[14,145091,145092,145095],{},[126,145093,145094],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[40,145097],{"style":126409,"src":145098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[40,145100],{"style":126409,"src":145101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[40,145103],{"style":126409,"src":145104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145106,145107],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[40,145109],{"style":126409,"src":145110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145112,145113],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[83,145115,145116],{"start":51},[86,145117,145118],{},"布局容器",[40,145120],{"style":126409,"src":145121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145123,145124],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145126,145127],{},"container-fluid用于移动式布局比较方便",[83,145129,145130],{"start":1194},[86,145131,145132,145133],{},"bootstrap ",[289,145134,145135],{},"栅格系统原理",[40,145137],{"style":126409,"src":145138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[83,145140,145141],{"start":1209},[86,145142,145143],{},[289,145144,145145],{},"栅格选项参数",[40,145147],{"style":126409,"src":145148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145150,145151],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145153,14648],{},[120,145155,145156],{"className":126553,"code":145067,"language":126555,"meta":42,"style":42},[126,145157,145158,145164,145174],{"__ignoreMap":42},[129,145159,145160,145162],{"class":131,"line":132},[129,145161,126844],{"class":1977},[129,145163,15587],{"class":139},[129,145165,145166,145168,145170,145172],{"class":131,"line":51},[129,145167,70906],{"class":188},[129,145169,51438],{"class":139},[129,145171,57422],{"class":188},[129,145173,1305],{"class":139},[129,145175,145176],{"class":131,"line":1194},[129,145177,1579],{"class":139},[14,145179,135596],{},[40,145181],{"style":126409,"src":145182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145184,145185],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145187,145188],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145190,145191],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145193,145194],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145196,145197],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145199,145200],{},"汇总展示说明：",[120,145202,145203],{"className":127300,"code":130657,"language":127302,"meta":42,"style":42},[126,145204,145205,145209,145223,145227],{"__ignoreMap":42},[129,145206,145207],{"class":131,"line":132},[129,145208,130664],{"class":198},[129,145210,145211,145213,145215,145217,145219,145221],{"class":131,"line":51},[129,145212,1049],{"class":139},[129,145214,51612],{"class":51301},[129,145216,53487],{"class":1977},[129,145218,185],{"class":139},[129,145220,130677],{"class":244},[129,145222,51308],{"class":139},[129,145224,145225],{"class":131,"line":1194},[129,145226,130684],{"class":139},[129,145228,145229,145231,145233],{"class":131,"line":1209},[129,145230,51786],{"class":139},[129,145232,51612],{"class":51301},[129,145234,51308],{"class":139},[40,145236],{"style":126409,"src":145237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145239,145240],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[120,145242,145243],{"className":127300,"code":130657,"language":127302,"meta":42,"style":42},[126,145244,145245,145249,145263,145267],{"__ignoreMap":42},[129,145246,145247],{"class":131,"line":132},[129,145248,130664],{"class":198},[129,145250,145251,145253,145255,145257,145259,145261],{"class":131,"line":51},[129,145252,1049],{"class":139},[129,145254,51612],{"class":51301},[129,145256,53487],{"class":1977},[129,145258,185],{"class":139},[129,145260,130677],{"class":244},[129,145262,51308],{"class":139},[129,145264,145265],{"class":131,"line":1194},[129,145266,130684],{"class":139},[129,145268,145269,145271,145273],{"class":131,"line":1209},[129,145270,51786],{"class":139},[129,145272,51612],{"class":51301},[129,145274,51308],{"class":139},[83,145276,145277],{"start":1215},[86,145278,145279],{},[289,145280,145281],{},"列嵌套",[40,145283],{"style":126409,"src":145284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145286,145287],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145289,145290],{},"没加row内部这样：",[40,145292],{"style":126409,"src":145293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145295,145296],{},"加上row之后内部为：",[40,145298],{"style":126409,"src":145299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[83,145301,145302],{"start":1229},[86,145303,145304],{},[289,145305,145306],{},"列偏移",[40,145308],{"style":126409,"src":145309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145311,145312],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145314,145315],{},"要加偏移量，即偏移份数",[14,145317,145318],{},"偏移的份数=12-两个盒子的份数",[83,145320,145321],{"start":1235},[86,145322,145323],{},[289,145324,145325],{},"列排序",[40,145327],{"style":126409,"src":145328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145330,145331],{},"pull拉左；push推右",[83,145333,145334],{"start":1326},[86,145335,145336],{},[289,145337,145338],{},"响应式工具",[40,145340],{"style":126409,"src":145341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145343,145344],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[100,145346,145348],{"id":145347},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145350,145351],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145353,145354],{},"ul {",[14,145356,145357],{},"list-style: none;",[14,145359,145360],{},"margin:0;",[14,145362,145363],{},"padding:0; }",[40,145365],{"style":126409,"src":145366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[40,145368],{"style":126409,"src":145369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145371,145372],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145374,68890],{},[120,145376,145377],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,145378,145379,145385,145395],{"__ignoreMap":42},[129,145380,145381,145383],{"class":131,"line":132},[129,145382,130401],{"class":1977},[129,145384,15587],{"class":139},[129,145386,145387,145389,145391,145393],{"class":131,"line":51},[129,145388,131033],{"class":188},[129,145390,51438],{"class":139},[129,145392,23751],{"class":188},[129,145394,1305],{"class":139},[129,145396,145397],{"class":131,"line":1194},[129,145398,1579],{"class":139},[14,145400,70454],{},[120,145402,145403],{"className":126553,"code":139223,"language":126555,"meta":42,"style":42},[126,145404,145405,145411,145421],{"__ignoreMap":42},[129,145406,145407,145409],{"class":131,"line":132},[129,145408,130401],{"class":1977},[129,145410,15587],{"class":139},[129,145412,145413,145415,145417,145419],{"class":131,"line":51},[129,145414,131033],{"class":188},[129,145416,51438],{"class":139},[129,145418,23751],{"class":188},[129,145420,1305],{"class":139},[129,145422,145423],{"class":131,"line":1194},[129,145424,1579],{"class":139},[71,145426,145428],{"id":145427},"_215-swiper-插件使用","21.5 swiper 插件使用",[1146,145430,145431,145434,145437],{},[86,145432,145433],{},"下载需要的css和js文件html页面中 引入相关文件",[86,145435,145436],{},"官网找到类似案例，复制html结构，css样式 js 语法",[86,145438,145439],{},"根据需求定制修改模块",[40,145441],{"style":126409,"src":145442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145444,145445],{},"解压后将这两部分放到项目中",[40,145447],{"style":126409,"src":145448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145450,145451],{},"这个插件可以帮助我们实现轮播图效果",[14,145453,145454],{},"用法：",[40,145456],{"style":126409,"src":145457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145459,145460],{},"找到自己喜欢的",[40,145462],{"style":126409,"src":145463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145465,145466],{},"右键，查看网页源代码",[40,145468],{"style":126409,"src":145469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145471,145472],{},"复制人家的结构内容",[14,145474,145475],{},"然后去看API文档：",[40,145477],{"style":126409,"src":145478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145480,145481],{},"可以看看如何修改样式",[14,145483,145484],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5141,145486,145487],{},"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":42,"searchDepth":51,"depth":51,"links":145489},[145490,145495,145499,145504,145509],{"id":144290,"depth":51,"text":144291,"children":145491},[145492,145493,145494],{"id":144294,"depth":1194,"text":144295},{"id":144304,"depth":1194,"text":144305},{"id":144399,"depth":1194,"text":144400},{"id":144414,"depth":51,"text":144415,"children":145496},[145497,145498],{"id":144436,"depth":1194,"text":144437},{"id":144452,"depth":1194,"text":144453},{"id":144527,"depth":51,"text":144528,"children":145500},[145501,145502,145503],{"id":144540,"depth":1194,"text":144541},{"id":144764,"depth":1194,"text":144765},{"id":144771,"depth":1194,"text":144772},{"id":144912,"depth":51,"text":144913,"children":145505},[145506,145507,145508],{"id":144939,"depth":1194,"text":144940},{"id":145002,"depth":1194,"text":145003},{"id":145347,"depth":1194,"text":145348},{"id":145427,"depth":51,"text":145428},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144282,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145516,"title":145517,"body":145518,"description":53,"extension":54,"meta":145738,"navigation":56,"path":145739,"seo":145740,"stem":145741,"__hash__":145742},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145519,"toc":145734},[145520,145523,145527,145530,145545,145550,145553,145558,145593,145598,145610,145615,145628,145633,145650,145655,145675,145680,145698,145701,145704,145707,145710,145714,145717,145720,145723,145726,145729,145732],[10,145521,145517],{"id":145522},"_22-代码提交与新型相对单位",[71,145524,145526],{"id":145525},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145528,145529],{},"法1：",[83,145531,145532,145539,145542],{},[86,145533,145534,145535],{},"登录网站注册：",[20,145536,145537],{"href":145537,"rel":145538},"https:\u002F\u002Fgitee.com\u002F",[24],[86,145540,145541],{},"码云创建新的仓库",[86,145543,145544],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1146,145546,145547],{},[86,145548,145549],{},"在网站根目录右键-- Git Bash Here",[40,145551],{"style":126409,"src":145552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1146,145554,145555],{},[86,145556,145557],{},"如果是第一次利用git提交，请配置好全局选项",[120,145559,145561],{"className":117297,"code":145560,"language":117299,"meta":42,"style":42},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[126,145562,145563,145579],{"__ignoreMap":42},[129,145564,145565,145568,145570,145573,145576],{"class":131,"line":132},[129,145566,145567],{"class":1977},"git",[129,145569,119720],{"class":244},[129,145571,145572],{"class":188}," --global",[129,145574,145575],{"class":244}," user.name",[129,145577,145578],{"class":244}," \"你的名字\"\n",[129,145580,145581,145583,145585,145587,145590],{"class":131,"line":51},[129,145582,145567],{"class":1977},[129,145584,119720],{"class":244},[129,145586,145572],{"class":188},[129,145588,145589],{"class":244}," user.email",[129,145591,145592],{"class":244}," \"你的邮箱\"\n",[1146,145594,145595],{},[86,145596,145597],{},"初始化仓库",[120,145599,145601],{"className":117297,"code":145600,"language":117299,"meta":42,"style":42},"git init\n",[126,145602,145603],{"__ignoreMap":42},[129,145604,145605,145607],{"class":131,"line":132},[129,145606,145567],{"class":1977},[129,145608,145609],{"class":244}," init\n",[1146,145611,145612],{},[86,145613,145614],{},"把本地文件放到暂存区",[120,145616,145618],{"className":117297,"code":145617,"language":117299,"meta":42,"style":42},"git add .\n",[126,145619,145620],{"__ignoreMap":42},[129,145621,145622,145624,145626],{"class":131,"line":132},[129,145623,145567],{"class":1977},[129,145625,5224],{"class":244},[129,145627,28742],{"class":244},[1146,145629,145630],{},[86,145631,145632],{},"把本地文件放到本地仓库里面",[120,145634,145636],{"className":117297,"code":145635,"language":117299,"meta":42,"style":42},"git commit -m \"first commit\"\n",[126,145637,145638],{"__ignoreMap":42},[129,145639,145640,145642,145645,145647],{"class":131,"line":132},[129,145641,145567],{"class":1977},[129,145643,145644],{"class":244}," commit",[129,145646,100883],{"class":188},[129,145648,145649],{"class":244}," \"first commit\"\n",[1146,145651,145652],{},[86,145653,145654],{},"链接远程仓库",[120,145656,145658],{"className":117297,"code":145657,"language":117299,"meta":42,"style":42},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[126,145659,145660],{"__ignoreMap":42},[129,145661,145662,145664,145667,145669,145672],{"class":131,"line":132},[129,145663,145567],{"class":1977},[129,145665,145666],{"class":244}," remote",[129,145668,5224],{"class":244},[129,145670,145671],{"class":244}," origin",[129,145673,145674],{"class":244}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1146,145676,145677],{},[86,145678,145679],{},"把本地仓库的文件推送到远程仓库 push",[120,145681,145683],{"className":117297,"code":145682,"language":117299,"meta":42,"style":42},"git push -u origin master\n",[126,145684,145685],{"__ignoreMap":42},[129,145686,145687,145689,145691,145693,145695],{"class":131,"line":132},[129,145688,145567],{"class":1977},[129,145690,29017],{"class":244},[129,145692,28291],{"class":188},[129,145694,145671],{"class":244},[129,145696,145697],{"class":244}," master\n",[40,145699],{"style":126409,"src":145700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145702,145703],{},"上方方法暂未实现，后边学完git后在整",[14,145705,145706],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[40,145708],{"style":126409,"src":145709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[71,145711,145713],{"id":145712},"_222-新型相对单位","22.2 新型相对单位",[40,145715],{"style":126409,"src":145716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[40,145718],{"style":126409,"src":145719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145721,145722],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145724,145725],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[40,145727],{"style":126409,"src":145728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145730,145731],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5141,145733,23972],{},{"title":42,"searchDepth":51,"depth":51,"links":145735},[145736,145737],{"id":145525,"depth":51,"text":145526},{"id":145712,"depth":51,"text":145713},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145517,"description":53},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145744,"title":145745,"body":145746,"description":145750,"extension":54,"meta":145751,"navigation":56,"path":145752,"seo":145753,"stem":145754,"__hash__":145755},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145747,"toc":145748},[],{"title":42,"searchDepth":51,"depth":51,"links":145749},[],"自己正经开始学编程的第一门语言！",{"category":92840},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145745,"description":145750},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145757,"title":145758,"body":145759,"description":53,"extension":54,"meta":146906,"navigation":56,"path":146907,"seo":146908,"stem":146909,"__hash__":146910},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145760,"toc":146882},[145761,145764,145768,145771,145774,145799,145802,145808,145812,145815,145842,145845,145885,145888,145900,145903,145909,145913,145917,145944,145961,145968,145972,145975,146001,146004,146008,146011,146051,146054,146071,146077,146081,146086,146130,146133,146151,146154,146222,146226,146233,146236,146251,146254,146263,146266,146277,146280,146289,146292,146309,146312,146327,146331,146335,146338,146340,146360,146364,146367,146370,146381,146384,146390,146394,146400,146427,146430,146442,146445,146456,146459,146465,146469,146475,146525,146528,146570,146573,146606,146609,146643,146647,146650,146670,146673,146709,146712,146725,146729,146733,146739,146742,146755,146759,146762,146768,146771,146775,146778,146781,146830,146834,146850,146856,146863,146869,146879],[10,145762,145758],{"id":145763},"_1-python环境与第一个程序",[71,145765,145767],{"id":145766},"_11-什么是python","1.1 什么是Python",[14,145769,145770],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145772,145773],{},"理解 Python 时抓住三个关键词：",[83,145775,145776,145779,145782],{},[86,145777,145778],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[86,145780,145781],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[86,145783,145784,145785,352,145788,352,145791,352,145794,352,145796,28386],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[126,145786,145787],{},"os",[126,145789,145790],{},"sys",[126,145792,145793],{},"json",[126,145795,57861],{},[126,145797,145798],{},"datetime",[14,145800,145801],{},"Python 程序的运行链路：",[120,145803,145806],{"className":145804,"code":145805,"language":5202,"meta":42},[5200],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[126,145807,145805],{"__ignoreMap":42},[71,145809,145811],{"id":145810},"_12-python解释器","1.2 Python解释器",[14,145813,145814],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[120,145816,145818],{"className":23837,"code":145817,"language":23839,"meta":42,"style":42},"python --version\npython3 --version\npython\npython3\n",[126,145819,145820,145826,145832,145837],{"__ignoreMap":42},[129,145821,145822,145824],{"class":131,"line":132},[129,145823,30381],{"class":1977},[129,145825,26294],{"class":188},[129,145827,145828,145830],{"class":131,"line":51},[129,145829,100880],{"class":1977},[129,145831,26294],{"class":188},[129,145833,145834],{"class":131,"line":1194},[129,145835,145836],{"class":1977},"python\n",[129,145838,145839],{"class":131,"line":1209},[129,145840,145841],{"class":1977},"python3\n",[14,145843,145844],{},"进入交互模式后，可以直接输入表达式：",[120,145846,145848],{"className":30379,"code":145847,"language":30381,"meta":42,"style":42},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[126,145849,145850,145861,145866,145880],{"__ignoreMap":42},[129,145851,145852,145855,145857,145859],{"class":131,"line":132},[129,145853,145854],{"class":135},">>>",[129,145856,25119],{"class":188},[129,145858,45567],{"class":135},[129,145860,47724],{"class":188},[129,145862,145863],{"class":131,"line":51},[129,145864,145865],{"class":188},"3\n",[129,145867,145868,145870,145873,145875,145878],{"class":131,"line":1194},[129,145869,145854],{"class":135},[129,145871,145872],{"class":188}," print",[129,145874,140],{"class":139},[129,145876,145877],{"class":244},"\"hello python\"",[129,145879,146],{"class":139},[129,145881,145882],{"class":131,"line":1209},[129,145883,145884],{"class":139},"hello python\n",[14,145886,145887],{},"退出交互模式：",[120,145889,145891],{"className":30379,"code":145890,"language":30381,"meta":42,"style":42},"exit()\n",[126,145892,145893],{"__ignoreMap":42},[129,145894,145895,145898],{"class":131,"line":132},[129,145896,145897],{"class":188},"exit",[129,145899,1990],{"class":139},[14,145901,145902],{},"或使用快捷键：",[120,145904,145907],{"className":145905,"code":145906,"language":5202,"meta":42},[5200],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[126,145908,145906],{"__ignoreMap":42},[71,145910,145912],{"id":145911},"_13-安装python","1.3 安装Python",[100,145914,145916],{"id":145915},"_131-windows安装","1.3.1 Windows安装",[83,145918,145919,145926,145929,145935,145941],{},[86,145920,145921,145922],{},"打开 Python 官网：",[20,145923,145924],{"href":145924,"rel":145925},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24],[86,145927,145928],{},"下载 Windows Installer。",[86,145930,145931,145932,28386],{},"安装时勾选 ",[126,145933,145934],{},"Add Python to PATH",[86,145936,145937,145938,28386],{},"点击 ",[126,145939,145940],{},"Install Now",[86,145942,145943],{},"安装完成后打开命令提示符验证：",[120,145945,145947],{"className":23837,"code":145946,"language":23839,"meta":42,"style":42},"python --version\npip --version\n",[126,145948,145949,145955],{"__ignoreMap":42},[129,145950,145951,145953],{"class":131,"line":132},[129,145952,30381],{"class":1977},[129,145954,26294],{"class":188},[129,145956,145957,145959],{"class":131,"line":51},[129,145958,23846],{"class":1977},[129,145960,26294],{"class":188},[14,145962,145963,145964,145967],{},"如果提示 ",[126,145965,145966],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[100,145969,145971],{"id":145970},"_132-macos安装","1.3.2 macOS安装",[14,145973,145974],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[120,145976,145978],{"className":23837,"code":145977,"language":23839,"meta":42,"style":42},"brew install python\npython3 --version\npip3 --version\n",[126,145979,145980,145989,145995],{"__ignoreMap":42},[129,145981,145982,145985,145987],{"class":131,"line":132},[129,145983,145984],{"class":1977},"brew",[129,145986,23849],{"class":244},[129,145988,124319],{"class":244},[129,145990,145991,145993],{"class":131,"line":51},[129,145992,100880],{"class":1977},[129,145994,26294],{"class":188},[129,145996,145997,145999],{"class":131,"line":1194},[129,145998,119701],{"class":1977},[129,146000,26294],{"class":188},[14,146002,146003],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[100,146005,146007],{"id":146006},"_133-linux安装","1.3.3 Linux安装",[14,146009,146010],{},"Ubuntu\u002FDebian：",[120,146012,146014],{"className":23837,"code":146013,"language":23839,"meta":42,"style":42},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[126,146015,146016,146024,146039,146045],{"__ignoreMap":42},[129,146017,146018,146020,146022],{"class":131,"line":132},[129,146019,24577],{"class":1977},[129,146021,117318],{"class":244},[129,146023,26243],{"class":244},[129,146025,146026,146028,146030,146032,146034,146036],{"class":131,"line":51},[129,146027,24577],{"class":1977},[129,146029,117318],{"class":244},[129,146031,23849],{"class":244},[129,146033,104404],{"class":244},[129,146035,100799],{"class":244},[129,146037,146038],{"class":244}," python3-venv\n",[129,146040,146041,146043],{"class":131,"line":1194},[129,146042,100880],{"class":1977},[129,146044,26294],{"class":188},[129,146046,146047,146049],{"class":131,"line":1209},[129,146048,119701],{"class":1977},[129,146050,26294],{"class":188},[14,146052,146053],{},"Fedora：",[120,146055,146057],{"className":23837,"code":146056,"language":23839,"meta":42,"style":42},"sudo dnf install python3 python3-pip\n",[126,146058,146059],{"__ignoreMap":42},[129,146060,146061,146063,146065,146067,146069],{"class":131,"line":132},[129,146062,24577],{"class":1977},[129,146064,26316],{"class":244},[129,146066,23849],{"class":244},[129,146068,104404],{"class":244},[129,146070,119766],{"class":244},[14,146072,146073,146074,146076],{},"Linux 上通常使用 ",[126,146075,100880],{}," 命令，避免和系统旧版本 Python 冲突。",[71,146078,146080],{"id":146079},"_14-pip包管理器","1.4 pip包管理器",[14,146082,146083,146085],{},[126,146084,23846],{}," 用来安装第三方库。",[120,146087,146089],{"className":23837,"code":146088,"language":23839,"meta":42,"style":42},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[126,146090,146091,146100,146109,146117,146123],{"__ignoreMap":42},[129,146092,146093,146095,146097],{"class":131,"line":132},[129,146094,23846],{"class":1977},[129,146096,23849],{"class":244},[129,146098,146099],{"class":244}," requests\n",[129,146101,146102,146104,146107],{"class":131,"line":51},[129,146103,23846],{"class":1977},[129,146105,146106],{"class":244}," uninstall",[129,146108,146099],{"class":244},[129,146110,146111,146113,146115],{"class":131,"line":1194},[129,146112,23846],{"class":1977},[129,146114,117575],{"class":244},[129,146116,146099],{"class":244},[129,146118,146119,146121],{"class":131,"line":1209},[129,146120,23846],{"class":1977},[129,146122,118956],{"class":244},[129,146124,146125,146127],{"class":131,"line":1215},[129,146126,23846],{"class":1977},[129,146128,146129],{"class":244}," freeze\n",[14,146131,146132],{},"国内网络较慢时可以临时使用镜像：",[120,146134,146136],{"className":23837,"code":146135,"language":23839,"meta":42,"style":42},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[126,146137,146138],{"__ignoreMap":42},[129,146139,146140,146142,146144,146147,146149],{"class":131,"line":132},[129,146141,23846],{"class":1977},[129,146143,23849],{"class":244},[129,146145,146146],{"class":244}," requests",[129,146148,26431],{"class":188},[129,146150,119729],{"class":244},[14,146152,146153],{},"常见第三方库：",[277,146155,146156,146165],{},[280,146157,146158],{},[283,146159,146160,146163],{},[286,146161,146162],{},"库",[286,146164,102697],{},[324,146166,146167,146175,146182,146190,146198,146206,146214],{},[283,146168,146169,146172],{},[329,146170,146171],{},"requests",[329,146173,146174],{},"网络请求",[283,146176,146177,146179],{},[329,146178,100627],{},[329,146180,146181],{},"数值计算",[283,146183,146184,146187],{},[329,146185,146186],{},"pandas",[329,146188,146189],{},"表格数据处理",[283,146191,146192,146195],{},[329,146193,146194],{},"matplotlib",[329,146196,146197],{},"绘图",[283,146199,146200,146203],{},[329,146201,146202],{},"pyecharts",[329,146204,146205],{},"ECharts 图表",[283,146207,146208,146211],{},[329,146209,146210],{},"flask",[329,146212,146213],{},"Web 后端",[283,146215,146216,146219],{},[329,146217,146218],{},"pytest",[329,146220,146221],{},"自动化测试",[71,146223,146225],{"id":146224},"_15-虚拟环境","1.5 虚拟环境",[14,146227,146228,146229,146232],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[126,146230,146231],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146234,146235],{},"创建虚拟环境：",[120,146237,146239],{"className":23837,"code":146238,"language":23839,"meta":42,"style":42},"python -m venv .venv\n",[126,146240,146241],{"__ignoreMap":42},[129,146242,146243,146245,146247,146249],{"class":131,"line":132},[129,146244,30381],{"class":1977},[129,146246,100883],{"class":188},[129,146248,100886],{"class":244},[129,146250,100889],{"class":244},[14,146252,146253],{},"Windows 激活：",[120,146255,146257],{"className":23837,"code":146256,"language":23839,"meta":42,"style":42},".venv\\Scripts\\activate\n",[126,146258,146259],{"__ignoreMap":42},[129,146260,146261],{"class":131,"line":132},[129,146262,146256],{"class":1977},[14,146264,146265],{},"macOS\u002FLinux 激活：",[120,146267,146269],{"className":23837,"code":146268,"language":23839,"meta":42,"style":42},"source .venv\u002Fbin\u002Factivate\n",[126,146270,146271],{"__ignoreMap":42},[129,146272,146273,146275],{"class":131,"line":132},[129,146274,100894],{"class":188},[129,146276,100897],{"class":244},[14,146278,146279],{},"退出虚拟环境：",[120,146281,146283],{"className":23837,"code":146282,"language":23839,"meta":42,"style":42},"deactivate\n",[126,146284,146285],{"__ignoreMap":42},[129,146286,146287],{"class":131,"line":132},[129,146288,146282],{"class":1977},[14,146290,146291],{},"保存依赖：",[120,146293,146295],{"className":23837,"code":146294,"language":23839,"meta":42,"style":42},"pip freeze > requirements.txt\n",[126,146296,146297],{"__ignoreMap":42},[129,146298,146299,146301,146304,146306],{"class":131,"line":132},[129,146300,23846],{"class":1977},[129,146302,146303],{"class":244}," freeze",[129,146305,26223],{"class":135},[129,146307,146308],{"class":244}," requirements.txt\n",[14,146310,146311],{},"安装依赖：",[120,146313,146315],{"className":23837,"code":146314,"language":23839,"meta":42,"style":42},"pip install -r requirements.txt\n",[126,146316,146317],{"__ignoreMap":42},[129,146318,146319,146321,146323,146325],{"class":131,"line":132},[129,146320,23846],{"class":1977},[129,146322,23849],{"class":244},[129,146324,119640],{"class":188},[129,146326,146308],{"class":244},[71,146328,146330],{"id":146329},"_16-开发工具","1.6 开发工具",[100,146332,146334],{"id":146333},"_161-pycharm","1.6.1 PyCharm",[14,146336,146337],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146339,122063],{},[83,146341,146342,146345,146348,146354,146357],{},[86,146343,146344],{},"New Project：创建项目。",[86,146346,146347],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[86,146349,146350,146351,125984],{},"New Python File：创建 ",[126,146352,146353],{},".py",[86,146355,146356],{},"Run：运行当前文件。",[86,146358,146359],{},"Debug：断点调试。",[100,146361,146363],{"id":146362},"_162-vs-code","1.6.2 VS Code",[14,146365,146366],{},"VS Code 轻量，适合后续多语言开发。",[14,146368,146369],{},"建议安装插件：",[83,146371,146372,146375,146378],{},[86,146373,146374],{},"Python。",[86,146376,146377],{},"Pylance。",[86,146379,146380],{},"Jupyter。",[14,146382,146383],{},"选择解释器：",[120,146385,146388],{"className":146386,"code":146387,"language":5202,"meta":42},[5200],"Ctrl + Shift + P -> Python: Select Interpreter\n",[126,146389,146387],{"__ignoreMap":42},[71,146391,146393],{"id":146392},"_17-第一个python程序","1.7 第一个Python程序",[14,146395,146396,146397,24619],{},"创建文件 ",[126,146398,146399],{},"hello.py",[120,146401,146403],{"className":30379,"code":146402,"language":30381,"meta":42,"style":42},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[126,146404,146405,146416],{"__ignoreMap":42},[129,146406,146407,146409,146411,146414],{"class":131,"line":132},[129,146408,30416],{"class":188},[129,146410,140],{"class":139},[129,146412,146413],{"class":244},"\"Hello World\"",[129,146415,146],{"class":139},[129,146417,146418,146420,146422,146425],{"class":131,"line":51},[129,146419,30416],{"class":188},[129,146421,140],{"class":139},[129,146423,146424],{"class":244},"\"你好，Python\"",[129,146426,146],{"class":139},[14,146428,146429],{},"在终端运行：",[120,146431,146433],{"className":23837,"code":146432,"language":23839,"meta":42,"style":42},"python hello.py\n",[126,146434,146435],{"__ignoreMap":42},[129,146436,146437,146439],{"class":131,"line":132},[129,146438,30381],{"class":1977},[129,146440,146441],{"class":244}," hello.py\n",[14,146443,146444],{},"或：",[120,146446,146448],{"className":23837,"code":146447,"language":23839,"meta":42,"style":42},"python3 hello.py\n",[126,146449,146450],{"__ignoreMap":42},[129,146451,146452,146454],{"class":131,"line":132},[129,146453,100880],{"class":1977},[129,146455,146441],{"class":244},[14,146457,146458],{},"输出：",[120,146460,146463],{"className":146461,"code":146462,"language":5202,"meta":42},[5200],"Hello World\n你好，Python\n",[126,146464,146462],{"__ignoreMap":42},[71,146466,146468],{"id":146467},"_18-print函数","1.8 print函数",[14,146470,146471,146474],{},[126,146472,146473],{},"print()"," 用来输出内容。",[120,146476,146478],{"className":30379,"code":146477,"language":30381,"meta":42,"style":42},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[126,146479,146480,146490,146500,146510],{"__ignoreMap":42},[129,146481,146482,146484,146486,146488],{"class":131,"line":132},[129,146483,30416],{"class":188},[129,146485,140],{"class":139},[129,146487,5859],{"class":244},[129,146489,146],{"class":139},[129,146491,146492,146494,146496,146498],{"class":131,"line":51},[129,146493,30416],{"class":188},[129,146495,140],{"class":139},[129,146497,450],{"class":188},[129,146499,146],{"class":139},[129,146501,146502,146504,146506,146508],{"class":131,"line":1194},[129,146503,30416],{"class":188},[129,146505,140],{"class":139},[129,146507,189],{"class":188},[129,146509,146],{"class":139},[129,146511,146512,146514,146516,146519,146521,146523],{"class":131,"line":1209},[129,146513,30416],{"class":188},[129,146515,140],{"class":139},[129,146517,146518],{"class":244},"\"年龄:\"",[129,146520,12450],{"class":139},[129,146522,789],{"class":188},[129,146524,146],{"class":139},[14,146526,146527],{},"多个内容用逗号隔开，默认中间加空格：",[120,146529,146531],{"className":30379,"code":146530,"language":30381,"meta":42,"style":42},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[126,146532,146533,146543,146553],{"__ignoreMap":42},[129,146534,146535,146538,146540],{"class":131,"line":132},[129,146536,146537],{"class":139},"name ",[129,146539,185],{"class":135},[129,146541,146542],{"class":244}," \"张三\"\n",[129,146544,146545,146548,146550],{"class":131,"line":51},[129,146546,146547],{"class":139},"age ",[129,146549,185],{"class":135},[129,146551,146552],{"class":188}," 18\n",[129,146554,146555,146557,146559,146562,146565,146567],{"class":131,"line":1194},[129,146556,30416],{"class":188},[129,146558,140],{"class":139},[129,146560,146561],{"class":244},"\"姓名:\"",[129,146563,146564],{"class":139},", name, ",[129,146566,146518],{"class":244},[129,146568,146569],{"class":139},", age)\n",[14,146571,146572],{},"修改分隔符：",[120,146574,146576],{"className":30379,"code":146575,"language":30381,"meta":42,"style":42},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[126,146577,146578],{"__ignoreMap":42},[129,146579,146580,146582,146584,146587,146589,146591,146593,146595,146597,146600,146602,146604],{"class":131,"line":132},[129,146581,30416],{"class":188},[129,146583,140],{"class":139},[129,146585,146586],{"class":244},"\"2024\"",[129,146588,12450],{"class":139},[129,146590,54317],{"class":244},[129,146592,12450],{"class":139},[129,146594,54317],{"class":244},[129,146596,12450],{"class":139},[129,146598,146599],{"class":5231},"sep",[129,146601,185],{"class":135},[129,146603,32484],{"class":244},[129,146605,146],{"class":139},[14,146607,146608],{},"修改结尾符：",[120,146610,146612],{"className":30379,"code":146611,"language":30381,"meta":42,"style":42},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[126,146613,146614,146632],{"__ignoreMap":42},[129,146615,146616,146618,146620,146622,146624,146626,146628,146630],{"class":131,"line":132},[129,146617,30416],{"class":188},[129,146619,140],{"class":139},[129,146621,5859],{"class":244},[129,146623,12450],{"class":139},[129,146625,45802],{"class":5231},[129,146627,185],{"class":135},[129,146629,4373],{"class":244},[129,146631,146],{"class":139},[129,146633,146634,146636,146638,146641],{"class":131,"line":51},[129,146635,30416],{"class":188},[129,146637,140],{"class":139},[129,146639,146640],{"class":244},"\"python\"",[129,146642,146],{"class":139},[71,146644,146646],{"id":146645},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146648,146649],{},"交互运行适合临时验证：",[120,146651,146653],{"className":30379,"code":146652,"language":30381,"meta":42,"style":42},">>> 10 * 3\n30\n",[126,146654,146655,146665],{"__ignoreMap":42},[129,146656,146657,146659,146661,146663],{"class":131,"line":132},[129,146658,145854],{"class":135},[129,146660,2052],{"class":188},[129,146662,6533],{"class":135},[129,146664,120037],{"class":188},[129,146666,146667],{"class":131,"line":51},[129,146668,146669],{"class":188},"30\n",[14,146671,146672],{},"脚本运行适合保存程序：",[120,146674,146676],{"className":30379,"code":146675,"language":30381,"meta":42,"style":42},"price = 8\ncount = 5\nprint(price * count)\n",[126,146677,146678,146688,146697],{"__ignoreMap":42},[129,146679,146680,146683,146685],{"class":131,"line":132},[129,146681,146682],{"class":139},"price ",[129,146684,185],{"class":135},[129,146686,146687],{"class":188}," 8\n",[129,146689,146690,146693,146695],{"class":131,"line":51},[129,146691,146692],{"class":139},"count ",[129,146694,185],{"class":135},[129,146696,54428],{"class":188},[129,146698,146699,146701,146704,146706],{"class":131,"line":1194},[129,146700,30416],{"class":188},[129,146702,146703],{"class":139},"(price ",[129,146705,594],{"class":135},[129,146707,146708],{"class":139}," count)\n",[14,146710,146711],{},"实际学习中推荐：",[83,146713,146714,146717,146722],{},[86,146715,146716],{},"临时试一个语法，用交互模式。",[86,146718,146719,146720,125984],{},"写完整练习，用 ",[126,146721,146353],{},[86,146723,146724],{},"写项目，用独立目录和虚拟环境。",[71,146726,146728],{"id":146727},"_110-常见错误","1.10 常见错误",[100,146730,146732],{"id":146731},"_1101-命令找不到","1.10.1 命令找不到",[120,146734,146737],{"className":146735,"code":146736,"language":5202,"meta":42},[5200],"python: command not found\n",[126,146738,146736],{"__ignoreMap":42},[14,146740,146741],{},"原因：",[83,146743,146744,146747,146750],{},[86,146745,146746],{},"没安装 Python。",[86,146748,146749],{},"PATH 没配置。",[86,146751,146752,146753,28386],{},"Linux\u002FmacOS 应该使用 ",[126,146754,100880],{},[100,146756,146758],{"id":146757},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146760,146761],{},"不要把文件命名为：",[120,146763,146766],{"className":146764,"code":146765,"language":5202,"meta":42},[5200],"random.py\njson.py\ntime.py\nrequests.py\n",[126,146767,146765],{"__ignoreMap":42},[14,146769,146770],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[100,146772,146774],{"id":146773},"_1103-中文乱码","1.10.3 中文乱码",[14,146776,146777],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146779,146780],{},"如果读写文件出现乱码，要明确指定编码：",[120,146782,146784],{"className":30379,"code":146783,"language":30381,"meta":42,"style":42},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[126,146785,146786,146820],{"__ignoreMap":42},[129,146787,146788,146790,146793,146795,146798,146800,146803,146805,146808,146810,146813,146815,146817],{"class":131,"line":132},[129,146789,107834],{"class":135},[129,146791,146792],{"class":188}," open",[129,146794,140],{"class":139},[129,146796,146797],{"class":244},"\"data.txt\"",[129,146799,12450],{"class":139},[129,146801,146802],{"class":244},"\"r\"",[129,146804,12450],{"class":139},[129,146806,146807],{"class":5231},"encoding",[129,146809,185],{"class":135},[129,146811,146812],{"class":244},"\"utf-8\"",[129,146814,13729],{"class":139},[129,146816,31384],{"class":135},[129,146818,146819],{"class":139}," f:\n",[129,146821,146822,146825,146827],{"class":131,"line":51},[129,146823,146824],{"class":139},"    content ",[129,146826,185],{"class":135},[129,146828,146829],{"class":139}," f.read()\n",[71,146831,146833],{"id":146832},"_111-本章练习","1.11 本章练习",[83,146835,146836,146839,146845],{},[86,146837,146838],{},"安装 Python，并在终端输出版本号。",[86,146840,146841,146842,146844],{},"新建 ",[126,146843,146399],{},"，输出自己的姓名、年龄、学习目标。",[86,146846,104367,146847,146849],{},[126,146848,146473],{}," 输出下面格式：",[120,146851,146854],{"className":146852,"code":146853,"language":5202,"meta":42},[5200],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[126,146855,146853],{"__ignoreMap":42},[83,146857,146858],{"start":1209},[86,146859,104367,146860,146862],{},[126,146861,146599],{}," 输出日期：",[120,146864,146867],{"className":146865,"code":146866,"language":5202,"meta":42},[5200],"2024-10-10\n",[126,146868,146866],{"__ignoreMap":42},[83,146870,146871],{"start":1215},[86,146872,104367,146873,146875,146876,146878],{},[126,146874,45802],{}," 让两次 ",[126,146877,146473],{}," 输出在同一行。",[5141,146880,146881],{},"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":42,"searchDepth":51,"depth":51,"links":146883},[146884,146885,146886,146891,146892,146893,146897,146898,146899,146900,146905],{"id":145766,"depth":51,"text":145767},{"id":145810,"depth":51,"text":145811},{"id":145911,"depth":51,"text":145912,"children":146887},[146888,146889,146890],{"id":145915,"depth":1194,"text":145916},{"id":145970,"depth":1194,"text":145971},{"id":146006,"depth":1194,"text":146007},{"id":146079,"depth":51,"text":146080},{"id":146224,"depth":51,"text":146225},{"id":146329,"depth":51,"text":146330,"children":146894},[146895,146896],{"id":146333,"depth":1194,"text":146334},{"id":146362,"depth":1194,"text":146363},{"id":146392,"depth":51,"text":146393},{"id":146467,"depth":51,"text":146468},{"id":146645,"depth":51,"text":146646},{"id":146727,"depth":51,"text":146728,"children":146901},[146902,146903,146904],{"id":146731,"depth":1194,"text":146732},{"id":146757,"depth":1194,"text":146758},{"id":146773,"depth":1194,"text":146774},{"id":146832,"depth":51,"text":146833},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145758,"description":53},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146912,"title":146913,"body":146914,"description":53,"extension":54,"meta":149318,"navigation":56,"path":149319,"seo":149320,"stem":149321,"__hash__":149322},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146915,"toc":149303},[146916,146919,146923,146926,146929,146946,146949,146991,146994,146998,147001,147004,147041,147044,147078,147081,147173,147177,147191,147194,147221,147224,147228,147331,147338,147341,147358,147362,147369,147558,147561,147634,147638,147641,147725,147728,147760,147764,147968,147971,147975,147981,148083,148086,148342,148346,148349,148352,148366,148368,148554,148558,148920,148926,148930,148933,149057,149060,149239,149242,149246,149279,149283,149300],[10,146917,146913],{"id":146918},"_10-json与pyecharts折线图",[71,146920,146922],{"id":146921},"_101-数据可视化","10.1 数据可视化",[14,146924,146925],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146927,146928],{},"常见图表：",[83,146930,146931,146934,146937,146940,146943],{},[86,146932,146933],{},"折线图：看趋势。",[86,146935,146936],{},"柱状图：看分类对比。",[86,146938,146939],{},"饼图：看占比。",[86,146941,146942],{},"地图：看地域分布。",[86,146944,146945],{},"散点图：看两个变量之间的关系。",[14,146947,146948],{},"Python 可视化常用库：",[277,146950,146951,146959],{},[280,146952,146953],{},[283,146954,146955,146957],{},[286,146956,146162],{},[286,146958,23755],{},[324,146960,146961,146968,146976,146983],{},[283,146962,146963,146965],{},[329,146964,146194],{},[329,146966,146967],{},"基础、经典、可定制",[283,146969,146970,146973],{},[329,146971,146972],{},"seaborn",[329,146974,146975],{},"统计图表更美观",[283,146977,146978,146980],{},[329,146979,146202],{},[329,146981,146982],{},"生成交互式网页图表",[283,146984,146985,146988],{},[329,146986,146987],{},"plotly",[329,146989,146990],{},"交互图表能力强",[14,146992,146993],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[71,146995,146997],{"id":146996},"_102-json回顾","10.2 JSON回顾",[14,146999,147000],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147002,147003],{},"Python 字典：",[120,147005,147007],{"className":30379,"code":147006,"language":30381,"meta":42,"style":42},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[126,147008,147009,147017,147028,147037],{"__ignoreMap":42},[129,147010,147011,147013,147015],{"class":131,"line":132},[129,147012,101659],{"class":139},[129,147014,185],{"class":135},[129,147016,15587],{"class":139},[129,147018,147019,147022,147024,147026],{"class":131,"line":51},[129,147020,147021],{"class":244},"    \"name\"",[129,147023,51438],{"class":139},[129,147025,69270],{"class":244},[129,147027,31467],{"class":139},[129,147029,147030,147033,147035],{"class":131,"line":1194},[129,147031,147032],{"class":244},"    \"value\"",[129,147034,51438],{"class":139},[129,147036,97459],{"class":188},[129,147038,147039],{"class":131,"line":1209},[129,147040,1579],{"class":139},[14,147042,147043],{},"JSON 字符串：",[120,147045,147048],{"className":147046,"code":147047,"language":145793,"meta":42,"style":42},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[126,147049,147050,147054,147065,147074],{"__ignoreMap":42},[129,147051,147052],{"class":131,"line":132},[129,147053,1560],{"class":139},[129,147055,147056,147059,147061,147063],{"class":131,"line":51},[129,147057,147058],{"class":188},"  \"name\"",[129,147060,51438],{"class":139},[129,147062,69270],{"class":244},[129,147064,31467],{"class":139},[129,147066,147067,147070,147072],{"class":131,"line":1194},[129,147068,147069],{"class":188},"  \"value\"",[129,147071,51438],{"class":139},[129,147073,97459],{"class":188},[129,147075,147076],{"class":131,"line":1209},[129,147077,1579],{"class":139},[14,147079,147080],{},"Python 与 JSON 的转换：",[120,147082,147084],{"className":30379,"code":147083,"language":30381,"meta":42,"style":42},"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",[126,147085,147086,147093,147097,147122,147126,147145,147152,147156,147166],{"__ignoreMap":42},[129,147087,147088,147090],{"class":131,"line":132},[129,147089,30393],{"class":135},[129,147091,147092],{"class":139}," json\n",[129,147094,147095],{"class":131,"line":51},[129,147096,2414],{"emptyLinePlaceholder":56},[129,147098,147099,147101,147103,147105,147107,147109,147111,147113,147116,147118,147120],{"class":131,"line":1194},[129,147100,101659],{"class":139},[129,147102,185],{"class":135},[129,147104,4462],{"class":139},[129,147106,62680],{"class":244},[129,147108,51438],{"class":139},[129,147110,69270],{"class":244},[129,147112,12450],{"class":139},[129,147114,147115],{"class":244},"\"value\"",[129,147117,51438],{"class":139},[129,147119,450],{"class":188},[129,147121,1579],{"class":139},[129,147123,147124],{"class":131,"line":1209},[129,147125,2414],{"emptyLinePlaceholder":56},[129,147127,147128,147131,147133,147136,147139,147141,147143],{"class":131,"line":1215},[129,147129,147130],{"class":139},"json_text ",[129,147132,185],{"class":135},[129,147134,147135],{"class":139}," json.dumps(data, ",[129,147137,147138],{"class":5231},"ensure_ascii",[129,147140,185],{"class":135},[129,147142,33988],{"class":188},[129,147144,146],{"class":139},[129,147146,147147,147149],{"class":131,"line":1229},[129,147148,30416],{"class":188},[129,147150,147151],{"class":139},"(json_text)\n",[129,147153,147154],{"class":131,"line":1235},[129,147155,2414],{"emptyLinePlaceholder":56},[129,147157,147158,147161,147163],{"class":131,"line":1326},[129,147159,147160],{"class":139},"new_data ",[129,147162,185],{"class":135},[129,147164,147165],{"class":139}," json.loads(json_text)\n",[129,147167,147168,147170],{"class":131,"line":1332},[129,147169,30416],{"class":188},[129,147171,147172],{"class":139},"(new_data)\n",[71,147174,147176],{"id":147175},"_103-安装pyecharts","10.3 安装pyecharts",[120,147178,147180],{"className":23837,"code":147179,"language":23839,"meta":42,"style":42},"pip install pyecharts\n",[126,147181,147182],{"__ignoreMap":42},[129,147183,147184,147186,147188],{"class":131,"line":132},[129,147185,23846],{"class":1977},[129,147187,23849],{"class":244},[129,147189,147190],{"class":244}," pyecharts\n",[14,147192,147193],{},"验证：",[120,147195,147197],{"className":30379,"code":147196,"language":30381,"meta":42,"style":42},"import pyecharts\n\nprint(pyecharts.__version__)\n",[126,147198,147199,147205,147209],{"__ignoreMap":42},[129,147200,147201,147203],{"class":131,"line":132},[129,147202,30393],{"class":135},[129,147204,147190],{"class":139},[129,147206,147207],{"class":131,"line":51},[129,147208,2414],{"emptyLinePlaceholder":56},[129,147210,147211,147213,147216,147219],{"class":131,"line":1194},[129,147212,30416],{"class":188},[129,147214,147215],{"class":139},"(pyecharts.",[129,147217,147218],{"class":188},"__version__",[129,147220,146],{"class":139},[14,147222,147223],{},"如果使用虚拟环境，要先激活环境再安装。",[71,147225,147227],{"id":147226},"_104-第一个折线图","10.4 第一个折线图",[120,147229,147231],{"className":30379,"code":147230,"language":30381,"meta":42,"style":42},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[126,147232,147233,147245,147249,147259,147289,147321],{"__ignoreMap":42},[129,147234,147235,147237,147240,147242],{"class":131,"line":132},[129,147236,30738],{"class":135},[129,147238,147239],{"class":139}," pyecharts.charts ",[129,147241,30393],{"class":135},[129,147243,147244],{"class":139}," Line\n",[129,147246,147247],{"class":131,"line":51},[129,147248,2414],{"emptyLinePlaceholder":56},[129,147250,147251,147254,147256],{"class":131,"line":1194},[129,147252,147253],{"class":139},"line ",[129,147255,185],{"class":135},[129,147257,147258],{"class":139}," Line()\n",[129,147260,147261,147264,147267,147269,147272,147274,147277,147279,147282,147284,147287],{"class":131,"line":1209},[129,147262,147263],{"class":139},"line.add_xaxis([",[129,147265,147266],{"class":244},"\"周一\"",[129,147268,12450],{"class":139},[129,147270,147271],{"class":244},"\"周二\"",[129,147273,12450],{"class":139},[129,147275,147276],{"class":244},"\"周三\"",[129,147278,12450],{"class":139},[129,147280,147281],{"class":244},"\"周四\"",[129,147283,12450],{"class":139},[129,147285,147286],{"class":244},"\"周五\"",[129,147288,4671],{"class":139},[129,147290,147291,147294,147297,147299,147301,147303,147305,147307,147309,147311,147314,147316,147319],{"class":131,"line":1215},[129,147292,147293],{"class":139},"line.add_yaxis(",[129,147295,147296],{"class":244},"\"销售额\"",[129,147298,77519],{"class":139},[129,147300,450],{"class":188},[129,147302,12450],{"class":139},[129,147304,956],{"class":188},[129,147306,12450],{"class":139},[129,147308,1001],{"class":188},[129,147310,12450],{"class":139},[129,147312,147313],{"class":188},"150",[129,147315,12450],{"class":139},[129,147317,147318],{"class":188},"180",[129,147320,4671],{"class":139},[129,147322,147323,147326,147329],{"class":131,"line":1229},[129,147324,147325],{"class":139},"line.render(",[129,147327,147328],{"class":244},"\"line.html\"",[129,147330,146],{"class":139},[14,147332,147333,147334,147337],{},"运行后会生成 ",[126,147335,147336],{},"line.html","，用浏览器打开即可看到图表。",[14,147339,147340],{},"核心步骤：",[83,147342,147343,147346,147349,147352,147355],{},[86,147344,147345],{},"导入图表类。",[86,147347,147348],{},"创建图表对象。",[86,147350,147351],{},"添加 x 轴数据。",[86,147353,147354],{},"添加 y 轴数据。",[86,147356,147357],{},"渲染为 HTML。",[71,147359,147361],{"id":147360},"_105-全局配置","10.5 全局配置",[14,147363,147364,147365,147368],{},"常用配置在 ",[126,147366,147367],{},"pyecharts.options"," 中。",[120,147370,147372],{"className":30379,"code":147371,"language":30381,"meta":42,"style":42},"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",[126,147373,147374,147391,147401,147405,147413,147437,147465,147470,147489,147508,147526,147546,147550],{"__ignoreMap":42},[129,147375,147376,147378,147381,147383,147386,147388],{"class":131,"line":132},[129,147377,30738],{"class":135},[129,147379,147380],{"class":139}," pyecharts ",[129,147382,30393],{"class":135},[129,147384,147385],{"class":139}," options ",[129,147387,31384],{"class":135},[129,147389,147390],{"class":139}," opts\n",[129,147392,147393,147395,147397,147399],{"class":131,"line":51},[129,147394,30738],{"class":135},[129,147396,147239],{"class":139},[129,147398,30393],{"class":135},[129,147400,147244],{"class":139},[129,147402,147403],{"class":131,"line":1194},[129,147404,2414],{"emptyLinePlaceholder":56},[129,147406,147407,147409,147411],{"class":131,"line":1209},[129,147408,147253],{"class":139},[129,147410,185],{"class":135},[129,147412,147258],{"class":139},[129,147414,147415,147417,147419,147421,147423,147425,147427,147429,147431,147433,147435],{"class":131,"line":1215},[129,147416,147263],{"class":139},[129,147418,147266],{"class":244},[129,147420,12450],{"class":139},[129,147422,147271],{"class":244},[129,147424,12450],{"class":139},[129,147426,147276],{"class":244},[129,147428,12450],{"class":139},[129,147430,147281],{"class":244},[129,147432,12450],{"class":139},[129,147434,147286],{"class":244},[129,147436,4671],{"class":139},[129,147438,147439,147441,147443,147445,147447,147449,147451,147453,147455,147457,147459,147461,147463],{"class":131,"line":1229},[129,147440,147293],{"class":139},[129,147442,147296],{"class":244},[129,147444,77519],{"class":139},[129,147446,450],{"class":188},[129,147448,12450],{"class":139},[129,147450,956],{"class":188},[129,147452,12450],{"class":139},[129,147454,1001],{"class":188},[129,147456,12450],{"class":139},[129,147458,147313],{"class":188},[129,147460,12450],{"class":139},[129,147462,147318],{"class":188},[129,147464,4671],{"class":139},[129,147466,147467],{"class":131,"line":1235},[129,147468,147469],{"class":139},"line.set_global_opts(\n",[129,147471,147472,147475,147477,147480,147482,147484,147487],{"class":131,"line":1326},[129,147473,147474],{"class":5231},"    title_opts",[129,147476,185],{"class":135},[129,147478,147479],{"class":139},"opts.TitleOpts(",[129,147481,51408],{"class":5231},[129,147483,185],{"class":135},[129,147485,147486],{"class":244},"\"一周销售额\"",[129,147488,38048],{"class":139},[129,147490,147491,147494,147496,147499,147501,147503,147506],{"class":131,"line":1332},[129,147492,147493],{"class":5231},"    xaxis_opts",[129,147495,185],{"class":135},[129,147497,147498],{"class":139},"opts.AxisOpts(",[129,147500,79811],{"class":5231},[129,147502,185],{"class":135},[129,147504,147505],{"class":244},"\"日期\"",[129,147507,38048],{"class":139},[129,147509,147510,147513,147515,147517,147519,147521,147524],{"class":131,"line":1344},[129,147511,147512],{"class":5231},"    yaxis_opts",[129,147514,185],{"class":135},[129,147516,147498],{"class":139},[129,147518,79811],{"class":5231},[129,147520,185],{"class":135},[129,147522,147523],{"class":244},"\"金额\"",[129,147525,38048],{"class":139},[129,147527,147528,147531,147533,147536,147539,147541,147544],{"class":131,"line":1626},[129,147529,147530],{"class":5231},"    tooltip_opts",[129,147532,185],{"class":135},[129,147534,147535],{"class":139},"opts.TooltipOpts(",[129,147537,147538],{"class":5231},"trigger",[129,147540,185],{"class":135},[129,147542,147543],{"class":244},"\"axis\"",[129,147545,38048],{"class":139},[129,147547,147548],{"class":131,"line":1631},[129,147549,146],{"class":139},[129,147551,147552,147554,147556],{"class":131,"line":1637},[129,147553,147325],{"class":139},[129,147555,147328],{"class":244},[129,147557,146],{"class":139},[14,147559,147560],{},"常见全局配置：",[277,147562,147563,147572],{},[280,147564,147565],{},[283,147566,147567,147570],{},[286,147568,147569],{},"配置",[286,147571,102697],{},[324,147573,147574,147584,147594,147604,147614,147624],{},[283,147575,147576,147581],{},[329,147577,147578],{},[126,147579,147580],{},"TitleOpts",[329,147582,147583],{},"标题",[283,147585,147586,147591],{},[329,147587,147588],{},[126,147589,147590],{},"LegendOpts",[329,147592,147593],{},"图例",[283,147595,147596,147601],{},[329,147597,147598],{},[126,147599,147600],{},"TooltipOpts",[329,147602,147603],{},"提示框",[283,147605,147606,147611],{},[329,147607,147608],{},[126,147609,147610],{},"AxisOpts",[329,147612,147613],{},"坐标轴",[283,147615,147616,147621],{},[329,147617,147618],{},[126,147619,147620],{},"VisualMapOpts",[329,147622,147623],{},"视觉映射",[283,147625,147626,147631],{},[329,147627,147628],{},[126,147629,147630],{},"DataZoomOpts",[329,147632,147633],{},"区域缩放",[71,147635,147637],{"id":147636},"_106-系列配置","10.6 系列配置",[14,147639,147640],{},"系列配置作用于某一组数据。",[120,147642,147644],{"className":30379,"code":147643,"language":30381,"meta":42,"style":42},"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",[126,147645,147646,147651,147662,147691,147702,147721],{"__ignoreMap":42},[129,147647,147648],{"class":131,"line":132},[129,147649,147650],{"class":139},"line.add_yaxis(\n",[129,147652,147653,147656,147658,147660],{"class":131,"line":51},[129,147654,147655],{"class":5231},"    series_name",[129,147657,185],{"class":135},[129,147659,147296],{"class":244},[129,147661,31467],{"class":139},[129,147663,147664,147667,147669,147671,147673,147675,147677,147679,147681,147683,147685,147687,147689],{"class":131,"line":1194},[129,147665,147666],{"class":5231},"    y_axis",[129,147668,185],{"class":135},[129,147670,1029],{"class":139},[129,147672,450],{"class":188},[129,147674,12450],{"class":139},[129,147676,956],{"class":188},[129,147678,12450],{"class":139},[129,147680,1001],{"class":188},[129,147682,12450],{"class":139},[129,147684,147313],{"class":188},[129,147686,12450],{"class":139},[129,147688,147318],{"class":188},[129,147690,87837],{"class":139},[129,147692,147693,147696,147698,147700],{"class":131,"line":1209},[129,147694,147695],{"class":5231},"    is_smooth",[129,147697,185],{"class":135},[129,147699,31477],{"class":188},[129,147701,31467],{"class":139},[129,147703,147704,147707,147709,147712,147715,147717,147719],{"class":131,"line":1215},[129,147705,147706],{"class":5231},"    label_opts",[129,147708,185],{"class":135},[129,147710,147711],{"class":139},"opts.LabelOpts(",[129,147713,147714],{"class":5231},"is_show",[129,147716,185],{"class":135},[129,147718,31477],{"class":188},[129,147720,38048],{"class":139},[129,147722,147723],{"class":131,"line":1229},[129,147724,146],{"class":139},[14,147726,147727],{},"常用参数：",[83,147729,147730,147736,147742,147748,147754],{},[86,147731,147732,147735],{},[126,147733,147734],{},"series_name","：系列名称。",[86,147737,147738,147741],{},[126,147739,147740],{},"y_axis","：y 轴数据。",[86,147743,147744,147747],{},[126,147745,147746],{},"is_smooth","：是否平滑曲线。",[86,147749,147750,147753],{},[126,147751,147752],{},"label_opts","：标签配置。",[86,147755,147756,147759],{},[126,147757,147758],{},"symbol_size","：标记点大小。",[71,147761,147763],{"id":147762},"_107-多条折线","10.7 多条折线",[120,147765,147767],{"className":30379,"code":147766,"language":30381,"meta":42,"style":42},"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",[126,147768,147769,147783,147793,147797,147826,147830,147838,147843,147881,147918,147922,147939,147955,147959],{"__ignoreMap":42},[129,147770,147771,147773,147775,147777,147779,147781],{"class":131,"line":132},[129,147772,30738],{"class":135},[129,147774,147380],{"class":139},[129,147776,30393],{"class":135},[129,147778,147385],{"class":139},[129,147780,31384],{"class":135},[129,147782,147390],{"class":139},[129,147784,147785,147787,147789,147791],{"class":131,"line":51},[129,147786,30738],{"class":135},[129,147788,147239],{"class":139},[129,147790,30393],{"class":135},[129,147792,147244],{"class":139},[129,147794,147795],{"class":131,"line":1194},[129,147796,2414],{"emptyLinePlaceholder":56},[129,147798,147799,147802,147804,147806,147808,147810,147812,147814,147816,147818,147820,147822,147824],{"class":131,"line":1209},[129,147800,147801],{"class":139},"dates ",[129,147803,185],{"class":135},[129,147805,52227],{"class":139},[129,147807,147266],{"class":244},[129,147809,12450],{"class":139},[129,147811,147271],{"class":244},[129,147813,12450],{"class":139},[129,147815,147276],{"class":244},[129,147817,12450],{"class":139},[129,147819,147281],{"class":244},[129,147821,12450],{"class":139},[129,147823,147286],{"class":244},[129,147825,33247],{"class":139},[129,147827,147828],{"class":131,"line":1215},[129,147829,2414],{"emptyLinePlaceholder":56},[129,147831,147832,147834,147836],{"class":131,"line":1229},[129,147833,147253],{"class":139},[129,147835,185],{"class":135},[129,147837,147258],{"class":139},[129,147839,147840],{"class":131,"line":1235},[129,147841,147842],{"class":139},"line.add_xaxis(dates)\n",[129,147844,147845,147847,147850,147852,147854,147856,147859,147861,147863,147865,147867,147869,147871,147873,147875,147877,147879],{"class":131,"line":1326},[129,147846,147293],{"class":139},[129,147848,147849],{"class":244},"\"线上销售\"",[129,147851,77519],{"class":139},[129,147853,450],{"class":188},[129,147855,12450],{"class":139},[129,147857,147858],{"class":188},"130",[129,147860,12450],{"class":139},[129,147862,956],{"class":188},[129,147864,12450],{"class":139},[129,147866,21063],{"class":188},[129,147868,12450],{"class":139},[129,147870,1736],{"class":188},[129,147872,112203],{"class":139},[129,147874,147746],{"class":5231},[129,147876,185],{"class":135},[129,147878,31477],{"class":188},[129,147880,146],{"class":139},[129,147882,147883,147885,147888,147890,147892,147894,147896,147898,147900,147902,147904,147906,147908,147910,147912,147914,147916],{"class":131,"line":1332},[129,147884,147293],{"class":139},[129,147886,147887],{"class":244},"\"线下销售\"",[129,147889,77519],{"class":139},[129,147891,751],{"class":188},[129,147893,12450],{"class":139},[129,147895,1001],{"class":188},[129,147897,12450],{"class":139},[129,147899,450],{"class":188},[129,147901,12450],{"class":139},[129,147903,956],{"class":188},[129,147905,12450],{"class":139},[129,147907,147313],{"class":188},[129,147909,112203],{"class":139},[129,147911,147746],{"class":5231},[129,147913,185],{"class":135},[129,147915,31477],{"class":188},[129,147917,146],{"class":139},[129,147919,147920],{"class":131,"line":1344},[129,147921,147469],{"class":139},[129,147923,147924,147926,147928,147930,147932,147934,147937],{"class":131,"line":1626},[129,147925,147474],{"class":5231},[129,147927,185],{"class":135},[129,147929,147479],{"class":139},[129,147931,51408],{"class":5231},[129,147933,185],{"class":135},[129,147935,147936],{"class":244},"\"线上线下销售趋势\"",[129,147938,38048],{"class":139},[129,147940,147941,147943,147945,147947,147949,147951,147953],{"class":131,"line":1631},[129,147942,147530],{"class":5231},[129,147944,185],{"class":135},[129,147946,147535],{"class":139},[129,147948,147538],{"class":5231},[129,147950,185],{"class":135},[129,147952,147543],{"class":244},[129,147954,38048],{"class":139},[129,147956,147957],{"class":131,"line":1637},[129,147958,146],{"class":139},[129,147960,147961,147963,147966],{"class":131,"line":1642},[129,147962,147325],{"class":139},[129,147964,147965],{"class":244},"\"sales.html\"",[129,147967,146],{"class":139},[14,147969,147970],{},"多条折线适合比较不同指标或不同地区。",[71,147972,147974],{"id":147973},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,147976,147977,147978,24619],{},"假设 ",[126,147979,147980],{},"sales.json",[120,147982,147984],{"className":147046,"code":147983,"language":145793,"meta":42,"style":42},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[126,147985,147986,147991,148023,148051,148079],{"__ignoreMap":42},[129,147987,147988],{"class":131,"line":132},[129,147989,147990],{"class":139},"[\n",[129,147992,147993,147996,147999,148001,148003,148005,148008,148010,148012,148014,148017,148019,148021],{"class":131,"line":51},[129,147994,147995],{"class":139},"  {",[129,147997,147998],{"class":188},"\"date\"",[129,148000,51438],{"class":139},[129,148002,147266],{"class":244},[129,148004,12450],{"class":139},[129,148006,148007],{"class":188},"\"online\"",[129,148009,51438],{"class":139},[129,148011,450],{"class":188},[129,148013,12450],{"class":139},[129,148015,148016],{"class":188},"\"offline\"",[129,148018,51438],{"class":139},[129,148020,751],{"class":188},[129,148022,4944],{"class":139},[129,148024,148025,148027,148029,148031,148033,148035,148037,148039,148041,148043,148045,148047,148049],{"class":131,"line":1194},[129,148026,147995],{"class":139},[129,148028,147998],{"class":188},[129,148030,51438],{"class":139},[129,148032,147271],{"class":244},[129,148034,12450],{"class":139},[129,148036,148007],{"class":188},[129,148038,51438],{"class":139},[129,148040,147858],{"class":188},[129,148042,12450],{"class":139},[129,148044,148016],{"class":188},[129,148046,51438],{"class":139},[129,148048,1001],{"class":188},[129,148050,4944],{"class":139},[129,148052,148053,148055,148057,148059,148061,148063,148065,148067,148069,148071,148073,148075,148077],{"class":131,"line":1209},[129,148054,147995],{"class":139},[129,148056,147998],{"class":188},[129,148058,51438],{"class":139},[129,148060,147276],{"class":244},[129,148062,12450],{"class":139},[129,148064,148007],{"class":188},[129,148066,51438],{"class":139},[129,148068,956],{"class":188},[129,148070,12450],{"class":139},[129,148072,148016],{"class":188},[129,148074,51438],{"class":139},[129,148076,450],{"class":188},[129,148078,1579],{"class":139},[129,148080,148081],{"class":131,"line":1215},[129,148082,33247],{"class":139},[14,148084,148085],{},"读取并绘图：",[120,148087,148089],{"className":30379,"code":148088,"language":30381,"meta":42,"style":42},"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",[126,148090,148091,148097,148111,148121,148125,148157,148170,148174,148182,148191,148200,148204,148216,148225,148234,148243,148247,148255,148259,148276,148293,148297,148314,148330,148334],{"__ignoreMap":42},[129,148092,148093,148095],{"class":131,"line":132},[129,148094,30393],{"class":135},[129,148096,147092],{"class":139},[129,148098,148099,148101,148103,148105,148107,148109],{"class":131,"line":51},[129,148100,30738],{"class":135},[129,148102,147380],{"class":139},[129,148104,30393],{"class":135},[129,148106,147385],{"class":139},[129,148108,31384],{"class":135},[129,148110,147390],{"class":139},[129,148112,148113,148115,148117,148119],{"class":131,"line":1194},[129,148114,30738],{"class":135},[129,148116,147239],{"class":139},[129,148118,30393],{"class":135},[129,148120,147244],{"class":139},[129,148122,148123],{"class":131,"line":1209},[129,148124,2414],{"emptyLinePlaceholder":56},[129,148126,148127,148129,148131,148133,148136,148138,148140,148142,148144,148146,148148,148150,148152,148155],{"class":131,"line":1215},[129,148128,107834],{"class":135},[129,148130,146792],{"class":188},[129,148132,140],{"class":139},[129,148134,148135],{"class":244},"\"sales.json\"",[129,148137,12450],{"class":139},[129,148139,146802],{"class":244},[129,148141,12450],{"class":139},[129,148143,146807],{"class":5231},[129,148145,185],{"class":135},[129,148147,146812],{"class":244},[129,148149,13729],{"class":139},[129,148151,31384],{"class":135},[129,148153,148154],{"class":5231}," file",[129,148156,3753],{"class":139},[129,148158,148159,148161,148163,148166,148168],{"class":131,"line":1229},[129,148160,101422],{"class":139},[129,148162,185],{"class":135},[129,148164,148165],{"class":139}," json.load(",[129,148167,45355],{"class":5231},[129,148169,146],{"class":139},[129,148171,148172],{"class":131,"line":1235},[129,148173,2414],{"emptyLinePlaceholder":56},[129,148175,148176,148178,148180],{"class":131,"line":1326},[129,148177,147801],{"class":139},[129,148179,185],{"class":135},[129,148181,51839],{"class":139},[129,148183,148184,148187,148189],{"class":131,"line":1332},[129,148185,148186],{"class":139},"online_sales ",[129,148188,185],{"class":135},[129,148190,51839],{"class":139},[129,148192,148193,148196,148198],{"class":131,"line":1344},[129,148194,148195],{"class":139},"offline_sales ",[129,148197,185],{"class":135},[129,148199,51839],{"class":139},[129,148201,148202],{"class":131,"line":1626},[129,148203,2414],{"emptyLinePlaceholder":56},[129,148205,148206,148208,148211,148213],{"class":131,"line":1631},[129,148207,3039],{"class":135},[129,148209,148210],{"class":139}," item ",[129,148212,26044],{"class":135},[129,148214,148215],{"class":139}," data:\n",[129,148217,148218,148221,148223],{"class":131,"line":1637},[129,148219,148220],{"class":139},"    dates.append(item[",[129,148222,147998],{"class":244},[129,148224,4671],{"class":139},[129,148226,148227,148230,148232],{"class":131,"line":1642},[129,148228,148229],{"class":139},"    online_sales.append(item[",[129,148231,148007],{"class":244},[129,148233,4671],{"class":139},[129,148235,148236,148239,148241],{"class":131,"line":1656},[129,148237,148238],{"class":139},"    offline_sales.append(item[",[129,148240,148016],{"class":244},[129,148242,4671],{"class":139},[129,148244,148245],{"class":131,"line":1661},[129,148246,2414],{"emptyLinePlaceholder":56},[129,148248,148249,148251,148253],{"class":131,"line":1667},[129,148250,147253],{"class":139},[129,148252,185],{"class":135},[129,148254,147258],{"class":139},[129,148256,148257],{"class":131,"line":1688},[129,148258,147842],{"class":139},[129,148260,148261,148263,148265,148268,148270,148272,148274],{"class":131,"line":1693},[129,148262,147293],{"class":139},[129,148264,147849],{"class":244},[129,148266,148267],{"class":139},", online_sales, ",[129,148269,147746],{"class":5231},[129,148271,185],{"class":135},[129,148273,31477],{"class":188},[129,148275,146],{"class":139},[129,148277,148278,148280,148282,148285,148287,148289,148291],{"class":131,"line":1707},[129,148279,147293],{"class":139},[129,148281,147887],{"class":244},[129,148283,148284],{"class":139},", offline_sales, ",[129,148286,147746],{"class":5231},[129,148288,185],{"class":135},[129,148290,31477],{"class":188},[129,148292,146],{"class":139},[129,148294,148295],{"class":131,"line":1712},[129,148296,147469],{"class":139},[129,148298,148299,148301,148303,148305,148307,148309,148312],{"class":131,"line":1741},[129,148300,147474],{"class":5231},[129,148302,185],{"class":135},[129,148304,147479],{"class":139},[129,148306,51408],{"class":5231},[129,148308,185],{"class":135},[129,148310,148311],{"class":244},"\"销售趋势\"",[129,148313,38048],{"class":139},[129,148315,148316,148318,148320,148322,148324,148326,148328],{"class":131,"line":1746},[129,148317,147530],{"class":5231},[129,148319,185],{"class":135},[129,148321,147535],{"class":139},[129,148323,147538],{"class":5231},[129,148325,185],{"class":135},[129,148327,147543],{"class":244},[129,148329,38048],{"class":139},[129,148331,148332],{"class":131,"line":1763},[129,148333,146],{"class":139},[129,148335,148336,148338,148340],{"class":131,"line":1768},[129,148337,147325],{"class":139},[129,148339,147965],{"class":244},[129,148341,146],{"class":139},[71,148343,148345],{"id":148344},"_109-数据清洗","10.9 数据清洗",[14,148347,148348],{},"真实数据经常不整齐，需要清洗。",[14,148350,148351],{},"常见问题：",[83,148353,148354,148357,148360,148363],{},[86,148355,148356],{},"数字是字符串。",[86,148358,148359],{},"字段缺失。",[86,148361,148362],{},"空值。",[86,148364,148365],{},"日期格式不统一。",[14,148367,15150],{},[120,148369,148371],{"className":30379,"code":148370,"language":30381,"meta":42,"style":42},"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",[126,148372,148373,148382,148405,148425,148446,148450,148454,148462,148471,148475,148486,148500,148509,148514,148518,148526,148536,148540,148547],{"__ignoreMap":42},[129,148374,148375,148378,148380],{"class":131,"line":132},[129,148376,148377],{"class":139},"raw_data ",[129,148379,185],{"class":135},[129,148381,55448],{"class":139},[129,148383,148384,148387,148389,148391,148393,148395,148398,148400,148403],{"class":131,"line":51},[129,148385,148386],{"class":139},"    {",[129,148388,147998],{"class":244},[129,148390,51438],{"class":139},[129,148392,147266],{"class":244},[129,148394,12450],{"class":139},[129,148396,148397],{"class":244},"\"sales\"",[129,148399,51438],{"class":139},[129,148401,148402],{"class":244},"\"100\"",[129,148404,4944],{"class":139},[129,148406,148407,148409,148411,148413,148415,148417,148419,148421,148423],{"class":131,"line":1194},[129,148408,148386],{"class":139},[129,148410,147998],{"class":244},[129,148412,51438],{"class":139},[129,148414,147271],{"class":244},[129,148416,12450],{"class":139},[129,148418,148397],{"class":244},[129,148420,51438],{"class":139},[129,148422,7667],{"class":244},[129,148424,4944],{"class":139},[129,148426,148427,148429,148431,148433,148435,148437,148439,148441,148444],{"class":131,"line":1209},[129,148428,148386],{"class":139},[129,148430,147998],{"class":244},[129,148432,51438],{"class":139},[129,148434,147276],{"class":244},[129,148436,12450],{"class":139},[129,148438,148397],{"class":244},[129,148440,51438],{"class":139},[129,148442,148443],{"class":244},"\"120\"",[129,148445,4944],{"class":139},[129,148447,148448],{"class":131,"line":1215},[129,148449,33247],{"class":139},[129,148451,148452],{"class":131,"line":1229},[129,148453,2414],{"emptyLinePlaceholder":56},[129,148455,148456,148458,148460],{"class":131,"line":1235},[129,148457,147801],{"class":139},[129,148459,185],{"class":135},[129,148461,51839],{"class":139},[129,148463,148464,148467,148469],{"class":131,"line":1326},[129,148465,148466],{"class":139},"sales ",[129,148468,185],{"class":135},[129,148470,51839],{"class":139},[129,148472,148473],{"class":131,"line":1332},[129,148474,2414],{"emptyLinePlaceholder":56},[129,148476,148477,148479,148481,148483],{"class":131,"line":1344},[129,148478,3039],{"class":135},[129,148480,148210],{"class":139},[129,148482,26044],{"class":135},[129,148484,148485],{"class":139}," raw_data:\n",[129,148487,148488,148491,148493,148496,148498],{"class":131,"line":1626},[129,148489,148490],{"class":139},"    value ",[129,148492,185],{"class":135},[129,148494,148495],{"class":139}," item.get(",[129,148497,148397],{"class":244},[129,148499,146],{"class":139},[129,148501,148502,148504,148506],{"class":131,"line":1631},[129,148503,3115],{"class":135},[129,148505,38931],{"class":135},[129,148507,148508],{"class":139}," value:\n",[129,148510,148511],{"class":131,"line":1637},[129,148512,148513],{"class":135},"        continue\n",[129,148515,148516],{"class":131,"line":1642},[129,148517,2414],{"emptyLinePlaceholder":56},[129,148519,148520,148522,148524],{"class":131,"line":1656},[129,148521,148220],{"class":139},[129,148523,147998],{"class":244},[129,148525,4671],{"class":139},[129,148527,148528,148531,148533],{"class":131,"line":1661},[129,148529,148530],{"class":139},"    sales.append(",[129,148532,143],{"class":188},[129,148534,148535],{"class":139},"(value))\n",[129,148537,148538],{"class":131,"line":1667},[129,148539,2414],{"emptyLinePlaceholder":56},[129,148541,148542,148544],{"class":131,"line":1688},[129,148543,30416],{"class":188},[129,148545,148546],{"class":139},"(dates)\n",[129,148548,148549,148551],{"class":131,"line":1693},[129,148550,30416],{"class":188},[129,148552,148553],{"class":139},"(sales)\n",[71,148555,148557],{"id":148556},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[120,148559,148561],{"className":30379,"code":148560,"language":30381,"meta":42,"style":42},"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",[126,148562,148563,148577,148587,148591,148599,148620,148642,148664,148686,148708,148712,148716,148738,148759,148763,148771,148775,148779,148789,148798,148808,148824,148828,148832,148849,148865,148881,148897,148907,148911],{"__ignoreMap":42},[129,148564,148565,148567,148569,148571,148573,148575],{"class":131,"line":132},[129,148566,30738],{"class":135},[129,148568,147380],{"class":139},[129,148570,30393],{"class":135},[129,148572,147385],{"class":139},[129,148574,31384],{"class":135},[129,148576,147390],{"class":139},[129,148578,148579,148581,148583,148585],{"class":131,"line":51},[129,148580,30738],{"class":135},[129,148582,147239],{"class":139},[129,148584,30393],{"class":135},[129,148586,147244],{"class":139},[129,148588,148589],{"class":131,"line":1194},[129,148590,2414],{"emptyLinePlaceholder":56},[129,148592,148593,148595,148597],{"class":131,"line":1209},[129,148594,148466],{"class":139},[129,148596,185],{"class":135},[129,148598,55448],{"class":139},[129,148600,148601,148603,148605,148607,148610,148612,148614,148616,148618],{"class":131,"line":1215},[129,148602,148386],{"class":139},[129,148604,147998],{"class":244},[129,148606,51438],{"class":139},[129,148608,148609],{"class":244},"\"2024-10-01\"",[129,148611,12450],{"class":139},[129,148613,84085],{"class":244},[129,148615,51438],{"class":139},[129,148617,92024],{"class":188},[129,148619,4944],{"class":139},[129,148621,148622,148624,148626,148628,148631,148633,148635,148637,148640],{"class":131,"line":1229},[129,148623,148386],{"class":139},[129,148625,147998],{"class":244},[129,148627,51438],{"class":139},[129,148629,148630],{"class":244},"\"2024-10-02\"",[129,148632,12450],{"class":139},[129,148634,84085],{"class":244},[129,148636,51438],{"class":139},[129,148638,148639],{"class":188},"1800",[129,148641,4944],{"class":139},[129,148643,148644,148646,148648,148650,148653,148655,148657,148659,148662],{"class":131,"line":1235},[129,148645,148386],{"class":139},[129,148647,147998],{"class":244},[129,148649,51438],{"class":139},[129,148651,148652],{"class":244},"\"2024-10-03\"",[129,148654,12450],{"class":139},[129,148656,84085],{"class":244},[129,148658,51438],{"class":139},[129,148660,148661],{"class":188},"1500",[129,148663,4944],{"class":139},[129,148665,148666,148668,148670,148672,148675,148677,148679,148681,148684],{"class":131,"line":1326},[129,148667,148386],{"class":139},[129,148669,147998],{"class":244},[129,148671,51438],{"class":139},[129,148673,148674],{"class":244},"\"2024-10-04\"",[129,148676,12450],{"class":139},[129,148678,84085],{"class":244},[129,148680,51438],{"class":139},[129,148682,148683],{"class":188},"2100",[129,148685,4944],{"class":139},[129,148687,148688,148690,148692,148694,148697,148699,148701,148703,148706],{"class":131,"line":1332},[129,148689,148386],{"class":139},[129,148691,147998],{"class":244},[129,148693,51438],{"class":139},[129,148695,148696],{"class":244},"\"2024-10-05\"",[129,148698,12450],{"class":139},[129,148700,84085],{"class":244},[129,148702,51438],{"class":139},[129,148704,148705],{"class":188},"2600",[129,148707,4944],{"class":139},[129,148709,148710],{"class":131,"line":1344},[129,148711,33247],{"class":139},[129,148713,148714],{"class":131,"line":1626},[129,148715,2414],{"emptyLinePlaceholder":56},[129,148717,148718,148720,148722,148725,148727,148729,148731,148733,148735],{"class":131,"line":1631},[129,148719,147801],{"class":139},[129,148721,185],{"class":135},[129,148723,148724],{"class":139}," [item[",[129,148726,147998],{"class":244},[129,148728,4457],{"class":139},[129,148730,3039],{"class":135},[129,148732,148210],{"class":139},[129,148734,26044],{"class":135},[129,148736,148737],{"class":139}," sales]\n",[129,148739,148740,148743,148745,148747,148749,148751,148753,148755,148757],{"class":131,"line":1637},[129,148741,148742],{"class":139},"amounts ",[129,148744,185],{"class":135},[129,148746,148724],{"class":139},[129,148748,84085],{"class":244},[129,148750,4457],{"class":139},[129,148752,3039],{"class":135},[129,148754,148210],{"class":139},[129,148756,26044],{"class":135},[129,148758,148737],{"class":139},[129,148760,148761],{"class":131,"line":1642},[129,148762,2414],{"emptyLinePlaceholder":56},[129,148764,148765,148767,148769],{"class":131,"line":1656},[129,148766,147253],{"class":139},[129,148768,185],{"class":135},[129,148770,147258],{"class":139},[129,148772,148773],{"class":131,"line":1661},[129,148774,147842],{"class":139},[129,148776,148777],{"class":131,"line":1667},[129,148778,147650],{"class":139},[129,148780,148781,148783,148785,148787],{"class":131,"line":1688},[129,148782,147655],{"class":5231},[129,148784,185],{"class":135},[129,148786,147296],{"class":244},[129,148788,31467],{"class":139},[129,148790,148791,148793,148795],{"class":131,"line":1693},[129,148792,147666],{"class":5231},[129,148794,185],{"class":135},[129,148796,148797],{"class":139},"amounts,\n",[129,148799,148800,148802,148804,148806],{"class":131,"line":1707},[129,148801,147695],{"class":5231},[129,148803,185],{"class":135},[129,148805,31477],{"class":188},[129,148807,31467],{"class":139},[129,148809,148810,148812,148814,148816,148818,148820,148822],{"class":131,"line":1712},[129,148811,147706],{"class":5231},[129,148813,185],{"class":135},[129,148815,147711],{"class":139},[129,148817,147714],{"class":5231},[129,148819,185],{"class":135},[129,148821,31477],{"class":188},[129,148823,38048],{"class":139},[129,148825,148826],{"class":131,"line":1741},[129,148827,146],{"class":139},[129,148829,148830],{"class":131,"line":1746},[129,148831,147469],{"class":139},[129,148833,148834,148836,148838,148840,148842,148844,148847],{"class":131,"line":1763},[129,148835,147474],{"class":5231},[129,148837,185],{"class":135},[129,148839,147479],{"class":139},[129,148841,51408],{"class":5231},[129,148843,185],{"class":135},[129,148845,148846],{"class":244},"\"每日销售额\"",[129,148848,38048],{"class":139},[129,148850,148851,148853,148855,148857,148859,148861,148863],{"class":131,"line":1768},[129,148852,147493],{"class":5231},[129,148854,185],{"class":135},[129,148856,147498],{"class":139},[129,148858,79811],{"class":5231},[129,148860,185],{"class":135},[129,148862,147505],{"class":244},[129,148864,38048],{"class":139},[129,148866,148867,148869,148871,148873,148875,148877,148879],{"class":131,"line":1773},[129,148868,147512],{"class":5231},[129,148870,185],{"class":135},[129,148872,147498],{"class":139},[129,148874,79811],{"class":5231},[129,148876,185],{"class":135},[129,148878,147523],{"class":244},[129,148880,38048],{"class":139},[129,148882,148883,148885,148887,148889,148891,148893,148895],{"class":131,"line":1778},[129,148884,147530],{"class":5231},[129,148886,185],{"class":135},[129,148888,147535],{"class":139},[129,148890,147538],{"class":5231},[129,148892,185],{"class":135},[129,148894,147543],{"class":244},[129,148896,38048],{"class":139},[129,148898,148899,148902,148904],{"class":131,"line":1792},[129,148900,148901],{"class":5231},"    datazoom_opts",[129,148903,185],{"class":135},[129,148905,148906],{"class":139},"[opts.DataZoomOpts()],\n",[129,148908,148909],{"class":131,"line":1797},[129,148910,146],{"class":139},[129,148912,148913,148915,148918],{"class":131,"line":2591},[129,148914,147325],{"class":139},[129,148916,148917],{"class":244},"\"daily_sales.html\"",[129,148919,146],{"class":139},[14,148921,148922,148925],{},[126,148923,148924],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[71,148927,148929],{"id":148928},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148931,148932],{},"如果数据结构如下：",[120,148934,148936],{"className":30379,"code":148935,"language":30381,"meta":42,"style":42},"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",[126,148937,148938,148946,148954,148976,148997,149002,149009,149029,149049,149053],{"__ignoreMap":42},[129,148939,148940,148942,148944],{"class":131,"line":132},[129,148941,101659],{"class":139},[129,148943,185],{"class":135},[129,148945,15587],{"class":139},[129,148947,148948,148951],{"class":131,"line":51},[129,148949,148950],{"class":244},"    \"北京\"",[129,148952,148953],{"class":139},": [\n",[129,148955,148956,148958,148960,148962,148965,148967,148970,148972,148974],{"class":131,"line":1194},[129,148957,4931],{"class":139},[129,148959,147998],{"class":244},[129,148961,51438],{"class":139},[129,148963,148964],{"class":244},"\"2024-01-01\"",[129,148966,12450],{"class":139},[129,148968,148969],{"class":244},"\"confirm\"",[129,148971,51438],{"class":139},[129,148973,585],{"class":188},[129,148975,4944],{"class":139},[129,148977,148978,148980,148982,148984,148987,148989,148991,148993,148995],{"class":131,"line":1209},[129,148979,4931],{"class":139},[129,148981,147998],{"class":244},[129,148983,51438],{"class":139},[129,148985,148986],{"class":244},"\"2024-01-02\"",[129,148988,12450],{"class":139},[129,148990,148969],{"class":244},[129,148992,51438],{"class":139},[129,148994,637],{"class":188},[129,148996,4944],{"class":139},[129,148998,148999],{"class":131,"line":1215},[129,149000,149001],{"class":139},"    ],\n",[129,149003,149004,149007],{"class":131,"line":1229},[129,149005,149006],{"class":244},"    \"上海\"",[129,149008,148953],{"class":139},[129,149010,149011,149013,149015,149017,149019,149021,149023,149025,149027],{"class":131,"line":1235},[129,149012,4931],{"class":139},[129,149014,147998],{"class":244},[129,149016,51438],{"class":139},[129,149018,148964],{"class":244},[129,149020,12450],{"class":139},[129,149022,148969],{"class":244},[129,149024,51438],{"class":139},[129,149026,534],{"class":188},[129,149028,4944],{"class":139},[129,149030,149031,149033,149035,149037,149039,149041,149043,149045,149047],{"class":131,"line":1326},[129,149032,4931],{"class":139},[129,149034,147998],{"class":244},[129,149036,51438],{"class":139},[129,149038,148986],{"class":244},[129,149040,12450],{"class":139},[129,149042,148969],{"class":244},[129,149044,51438],{"class":139},[129,149046,662],{"class":188},[129,149048,4944],{"class":139},[129,149050,149051],{"class":131,"line":1332},[129,149052,149001],{"class":139},[129,149054,149055],{"class":131,"line":1344},[129,149056,1579],{"class":139},[14,149058,149059],{},"绘制多地区趋势：",[120,149061,149063],{"className":30379,"code":149062,"language":30381,"meta":42,"style":42},"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",[126,149064,149065,149079,149089,149093,149118,149122,149130,149134,149138,149150,149172,149185,149189,149193,149210,149226,149230],{"__ignoreMap":42},[129,149066,149067,149069,149071,149073,149075,149077],{"class":131,"line":132},[129,149068,30738],{"class":135},[129,149070,147380],{"class":139},[129,149072,30393],{"class":135},[129,149074,147385],{"class":139},[129,149076,31384],{"class":135},[129,149078,147390],{"class":139},[129,149080,149081,149083,149085,149087],{"class":131,"line":51},[129,149082,30738],{"class":135},[129,149084,147239],{"class":139},[129,149086,30393],{"class":135},[129,149088,147244],{"class":139},[129,149090,149091],{"class":131,"line":1194},[129,149092,2414],{"emptyLinePlaceholder":56},[129,149094,149095,149097,149099,149101,149103,149105,149107,149109,149111,149114,149116],{"class":131,"line":1209},[129,149096,147801],{"class":139},[129,149098,185],{"class":135},[129,149100,148724],{"class":139},[129,149102,147998],{"class":244},[129,149104,4457],{"class":139},[129,149106,3039],{"class":135},[129,149108,148210],{"class":139},[129,149110,26044],{"class":135},[129,149112,149113],{"class":139}," data[",[129,149115,69270],{"class":244},[129,149117,77528],{"class":139},[129,149119,149120],{"class":131,"line":1215},[129,149121,2414],{"emptyLinePlaceholder":56},[129,149123,149124,149126,149128],{"class":131,"line":1229},[129,149125,147253],{"class":139},[129,149127,185],{"class":135},[129,149129,147258],{"class":139},[129,149131,149132],{"class":131,"line":1235},[129,149133,147842],{"class":139},[129,149135,149136],{"class":131,"line":1326},[129,149137,2414],{"emptyLinePlaceholder":56},[129,149139,149140,149142,149145,149147],{"class":131,"line":1332},[129,149141,3039],{"class":135},[129,149143,149144],{"class":139}," city, records ",[129,149146,26044],{"class":135},[129,149148,149149],{"class":139}," data.items():\n",[129,149151,149152,149155,149157,149159,149161,149163,149165,149167,149169],{"class":131,"line":1344},[129,149153,149154],{"class":139},"    values ",[129,149156,185],{"class":135},[129,149158,148724],{"class":139},[129,149160,148969],{"class":244},[129,149162,4457],{"class":139},[129,149164,3039],{"class":135},[129,149166,148210],{"class":139},[129,149168,26044],{"class":135},[129,149170,149171],{"class":139}," records]\n",[129,149173,149174,149177,149179,149181,149183],{"class":131,"line":1626},[129,149175,149176],{"class":139},"    line.add_yaxis(city, values, ",[129,149178,147746],{"class":5231},[129,149180,185],{"class":135},[129,149182,31477],{"class":188},[129,149184,146],{"class":139},[129,149186,149187],{"class":131,"line":1631},[129,149188,2414],{"emptyLinePlaceholder":56},[129,149190,149191],{"class":131,"line":1637},[129,149192,147469],{"class":139},[129,149194,149195,149197,149199,149201,149203,149205,149208],{"class":131,"line":1642},[129,149196,147474],{"class":5231},[129,149198,185],{"class":135},[129,149200,147479],{"class":139},[129,149202,51408],{"class":5231},[129,149204,185],{"class":135},[129,149206,149207],{"class":244},"\"多地区趋势图\"",[129,149209,38048],{"class":139},[129,149211,149212,149214,149216,149218,149220,149222,149224],{"class":131,"line":1656},[129,149213,147530],{"class":5231},[129,149215,185],{"class":135},[129,149217,147535],{"class":139},[129,149219,147538],{"class":5231},[129,149221,185],{"class":135},[129,149223,147543],{"class":244},[129,149225,38048],{"class":139},[129,149227,149228],{"class":131,"line":1661},[129,149229,146],{"class":139},[129,149231,149232,149234,149237],{"class":131,"line":1667},[129,149233,147325],{"class":139},[129,149235,149236],{"class":244},"\"trend.html\"",[129,149238,146],{"class":139},[14,149240,149241],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[71,149243,149245],{"id":149244},"_1012-易错点","10.12 易错点",[83,149247,149248,149254,149260,149270,149276],{},[86,149249,149250,149253],{},[126,149251,149252],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[86,149255,149256,149259],{},[126,149257,149258],{},"render()"," 生成的是 HTML，不是图片。",[86,149261,149262,149263,149266,149267,28386],{},"JSON 字符串用 ",[126,149264,149265],{},"json.loads()","，JSON 文件用 ",[126,149268,149269],{},"json.load()",[86,149271,149272,149273,28386],{},"中文 JSON 保存时加 ",[126,149274,149275],{},"ensure_ascii=False",[86,149277,149278],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[71,149280,149282],{"id":149281},"_1013-本章练习","10.13 本章练习",[83,149284,149285,149288,149291,149294,149297],{},[86,149286,149287],{},"安装 pyecharts 并生成第一个折线图。",[86,149289,149290],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[86,149292,149293],{},"绘制两条折线，对比线上和线下销售额。",[86,149295,149296],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[86,149298,149299],{},"对含有空值的销售数据进行清洗后再绘图。",[5141,149301,149302],{},"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":42,"searchDepth":51,"depth":51,"links":149304},[149305,149306,149307,149308,149309,149310,149311,149312,149313,149314,149315,149316,149317],{"id":146921,"depth":51,"text":146922},{"id":146996,"depth":51,"text":146997},{"id":147175,"depth":51,"text":147176},{"id":147226,"depth":51,"text":147227},{"id":147360,"depth":51,"text":147361},{"id":147636,"depth":51,"text":147637},{"id":147762,"depth":51,"text":147763},{"id":147973,"depth":51,"text":147974},{"id":148344,"depth":51,"text":148345},{"id":148556,"depth":51,"text":148557},{"id":148928,"depth":51,"text":148929},{"id":149244,"depth":51,"text":149245},{"id":149281,"depth":51,"text":149282},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146913,"description":53},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149324,"title":149325,"body":149326,"description":53,"extension":54,"meta":151686,"navigation":56,"path":151687,"seo":151688,"stem":151689,"__hash__":151690},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149327,"toc":151663},[149328,149331,149335,149338,149341,149417,149420,149511,149514,149518,149521,149565,149578,149582,149585,149652,149655,149659,149662,149746,149754,149758,149763,149904,149907,149918,149924,149930,150044,150048,150051,150054,150307,150310,150314,150317,150421,150424,150428,150579,150583,150590,150703,150707,150710,150816,150819,150823,150826,150857,150860,150965,150968,150972,150976,150986,151054,151058,151065,151129,151132,151136,151142,151238,151247,151251,151575,151584,151588,151616,151620,151660],[10,149329,149325],{"id":149330},"_11-面向对象基础",[71,149332,149334],{"id":149333},"_111-什么是面向对象","11.1 什么是面向对象",[14,149336,149337],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149339,149340],{},"面向过程：",[120,149342,149344],{"className":30379,"code":149343,"language":30381,"meta":42,"style":42},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[126,149345,149346,149355,149363,149367,149377,149408,149412],{"__ignoreMap":42},[129,149347,149348,149350,149352],{"class":131,"line":132},[129,149349,146537],{"class":139},[129,149351,185],{"class":135},[129,149353,149354],{"class":244}," \"小明\"\n",[129,149356,149357,149359,149361],{"class":131,"line":51},[129,149358,146547],{"class":139},[129,149360,185],{"class":135},[129,149362,146552],{"class":188},[129,149364,149365],{"class":131,"line":1194},[129,149366,2414],{"emptyLinePlaceholder":56},[129,149368,149369,149371,149374],{"class":131,"line":1209},[129,149370,31948],{"class":135},[129,149372,149373],{"class":1977}," introduce",[129,149375,149376],{"class":139},"(name, age):\n",[129,149378,149379,149381,149383,149385,149388,149390,149392,149394,149397,149399,149401,149403,149406],{"class":131,"line":1215},[129,149380,31300],{"class":188},[129,149382,140],{"class":139},[129,149384,192],{"class":135},[129,149386,149387],{"class":244},"\"我叫",[129,149389,1035],{"class":188},[129,149391,79811],{"class":139},[129,149393,1085],{"class":188},[129,149395,149396],{"class":244},"，今年",[129,149398,1035],{"class":188},[129,149400,70222],{"class":139},[129,149402,1085],{"class":188},[129,149404,149405],{"class":244},"岁\"",[129,149407,146],{"class":139},[129,149409,149410],{"class":131,"line":1229},[129,149411,2414],{"emptyLinePlaceholder":56},[129,149413,149414],{"class":131,"line":1235},[129,149415,149416],{"class":139},"introduce(name, age)\n",[14,149418,149419],{},"面向对象：",[120,149421,149423],{"className":30379,"code":149422,"language":30381,"meta":42,"style":42},"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",[126,149424,149425,149433,149441,149470,149474,149478,149488,149497,149506],{"__ignoreMap":42},[129,149426,149427,149429,149431],{"class":131,"line":132},[129,149428,14709],{"class":135},[129,149430,7913],{"class":1977},[129,149432,3753],{"class":139},[129,149434,149435,149437,149439],{"class":131,"line":51},[129,149436,30802],{"class":135},[129,149438,149373],{"class":1977},[129,149440,30808],{"class":139},[129,149442,149443,149445,149447,149449,149451,149454,149456,149458,149460,149462,149464,149466,149468],{"class":131,"line":1194},[129,149444,32452],{"class":188},[129,149446,140],{"class":139},[129,149448,192],{"class":135},[129,149450,149387],{"class":244},[129,149452,149453],{"class":188},"{self",[129,149455,80302],{"class":139},[129,149457,1085],{"class":188},[129,149459,149396],{"class":244},[129,149461,149453],{"class":188},[129,149463,80314],{"class":139},[129,149465,1085],{"class":188},[129,149467,149405],{"class":244},[129,149469,146],{"class":139},[129,149471,149472],{"class":131,"line":1209},[129,149473,2414],{"emptyLinePlaceholder":56},[129,149475,149476],{"class":131,"line":1215},[129,149477,2414],{"emptyLinePlaceholder":56},[129,149479,149480,149483,149485],{"class":131,"line":1229},[129,149481,149482],{"class":139},"student ",[129,149484,185],{"class":135},[129,149486,149487],{"class":139}," Student()\n",[129,149489,149490,149493,149495],{"class":131,"line":1235},[129,149491,149492],{"class":139},"student.name ",[129,149494,185],{"class":135},[129,149496,149354],{"class":244},[129,149498,149499,149502,149504],{"class":131,"line":1326},[129,149500,149501],{"class":139},"student.age ",[129,149503,185],{"class":135},[129,149505,146552],{"class":188},[129,149507,149508],{"class":131,"line":1332},[129,149509,149510],{"class":139},"student.introduce()\n",[14,149512,149513],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[71,149515,149517],{"id":149516},"_112-类和对象","11.2 类和对象",[14,149519,149520],{},"类是模板，对象是根据模板创建出来的具体实例。",[120,149522,149524],{"className":30379,"code":149523,"language":30381,"meta":42,"style":42},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[126,149525,149526,149534,149539,149543,149547,149556],{"__ignoreMap":42},[129,149527,149528,149530,149532],{"class":131,"line":132},[129,149529,14709],{"class":135},[129,149531,7913],{"class":1977},[129,149533,3753],{"class":139},[129,149535,149536],{"class":131,"line":51},[129,149537,149538],{"class":135},"    pass\n",[129,149540,149541],{"class":131,"line":1194},[129,149542,2414],{"emptyLinePlaceholder":56},[129,149544,149545],{"class":131,"line":1209},[129,149546,2414],{"emptyLinePlaceholder":56},[129,149548,149549,149552,149554],{"class":131,"line":1215},[129,149550,149551],{"class":139},"student1 ",[129,149553,185],{"class":135},[129,149555,149487],{"class":139},[129,149557,149558,149561,149563],{"class":131,"line":1229},[129,149559,149560],{"class":139},"student2 ",[129,149562,185],{"class":135},[129,149564,149487],{"class":139},[14,149566,149567,149570,149571,101019,149574,149577],{},[126,149568,149569],{},"Student"," 是类，",[126,149572,149573],{},"student1",[126,149575,149576],{},"student2"," 是对象。",[71,149579,149581],{"id":149580},"_113-属性","11.3 属性",[14,149583,149584],{},"属性是对象保存的数据。",[120,149586,149588],{"className":30379,"code":149587,"language":30381,"meta":42,"style":42},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[126,149589,149590,149598,149602,149606,149610,149618,149626,149634,149638,149645],{"__ignoreMap":42},[129,149591,149592,149594,149596],{"class":131,"line":132},[129,149593,14709],{"class":135},[129,149595,7913],{"class":1977},[129,149597,3753],{"class":139},[129,149599,149600],{"class":131,"line":51},[129,149601,149538],{"class":135},[129,149603,149604],{"class":131,"line":1194},[129,149605,2414],{"emptyLinePlaceholder":56},[129,149607,149608],{"class":131,"line":1209},[129,149609,2414],{"emptyLinePlaceholder":56},[129,149611,149612,149614,149616],{"class":131,"line":1215},[129,149613,149482],{"class":139},[129,149615,185],{"class":135},[129,149617,149487],{"class":139},[129,149619,149620,149622,149624],{"class":131,"line":1229},[129,149621,149492],{"class":139},[129,149623,185],{"class":135},[129,149625,149354],{"class":244},[129,149627,149628,149630,149632],{"class":131,"line":1235},[129,149629,149501],{"class":139},[129,149631,185],{"class":135},[129,149633,146552],{"class":188},[129,149635,149636],{"class":131,"line":1326},[129,149637,2414],{"emptyLinePlaceholder":56},[129,149639,149640,149642],{"class":131,"line":1332},[129,149641,30416],{"class":188},[129,149643,149644],{"class":139},"(student.name)\n",[129,149646,149647,149649],{"class":131,"line":1344},[129,149648,30416],{"class":188},[129,149650,149651],{"class":139},"(student.age)\n",[14,149653,149654],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[71,149656,149658],{"id":149657},"_114-方法","11.4 方法",[14,149660,149661],{},"类中的函数叫方法。",[120,149663,149664],{"className":30379,"code":149422,"language":30381,"meta":42,"style":42},[126,149665,149666,149674,149682,149710,149714,149718,149726,149734,149742],{"__ignoreMap":42},[129,149667,149668,149670,149672],{"class":131,"line":132},[129,149669,14709],{"class":135},[129,149671,7913],{"class":1977},[129,149673,3753],{"class":139},[129,149675,149676,149678,149680],{"class":131,"line":51},[129,149677,30802],{"class":135},[129,149679,149373],{"class":1977},[129,149681,30808],{"class":139},[129,149683,149684,149686,149688,149690,149692,149694,149696,149698,149700,149702,149704,149706,149708],{"class":131,"line":1194},[129,149685,32452],{"class":188},[129,149687,140],{"class":139},[129,149689,192],{"class":135},[129,149691,149387],{"class":244},[129,149693,149453],{"class":188},[129,149695,80302],{"class":139},[129,149697,1085],{"class":188},[129,149699,149396],{"class":244},[129,149701,149453],{"class":188},[129,149703,80314],{"class":139},[129,149705,1085],{"class":188},[129,149707,149405],{"class":244},[129,149709,146],{"class":139},[129,149711,149712],{"class":131,"line":1209},[129,149713,2414],{"emptyLinePlaceholder":56},[129,149715,149716],{"class":131,"line":1215},[129,149717,2414],{"emptyLinePlaceholder":56},[129,149719,149720,149722,149724],{"class":131,"line":1229},[129,149721,149482],{"class":139},[129,149723,185],{"class":135},[129,149725,149487],{"class":139},[129,149727,149728,149730,149732],{"class":131,"line":1235},[129,149729,149492],{"class":139},[129,149731,185],{"class":135},[129,149733,149354],{"class":244},[129,149735,149736,149738,149740],{"class":131,"line":1326},[129,149737,149501],{"class":139},[129,149739,185],{"class":135},[129,149741,146552],{"class":188},[129,149743,149744],{"class":131,"line":1332},[129,149745,149510],{"class":139},[14,149747,149748,149750,149751,149753],{},[126,149749,30824],{}," 表示当前对象。调用方法时不需要手动传入 ",[126,149752,30824],{},"，Python 会自动传。",[71,149755,149757],{"id":149756},"_115-构造方法__init__","11.5 构造方法__init__",[14,149759,149760,149762],{},[126,149761,30830],{}," 在对象创建时自动执行，用于初始化属性。",[120,149764,149766],{"className":30379,"code":149765,"language":30381,"meta":42,"style":42},"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",[126,149767,149768,149776,149785,149797,149809,149820,149824,149832,149870,149874,149878,149900],{"__ignoreMap":42},[129,149769,149770,149772,149774],{"class":131,"line":132},[129,149771,14709],{"class":135},[129,149773,7913],{"class":1977},[129,149775,3753],{"class":139},[129,149777,149778,149780,149782],{"class":131,"line":51},[129,149779,30802],{"class":135},[129,149781,30805],{"class":188},[129,149783,149784],{"class":139},"(self, name, age, score):\n",[129,149786,149787,149789,149792,149794],{"class":131,"line":1194},[129,149788,30846],{"class":188},[129,149790,149791],{"class":139},".name ",[129,149793,185],{"class":135},[129,149795,149796],{"class":139}," name\n",[129,149798,149799,149801,149804,149806],{"class":131,"line":1209},[129,149800,30846],{"class":188},[129,149802,149803],{"class":139},".age ",[129,149805,185],{"class":135},[129,149807,149808],{"class":139}," age\n",[129,149810,149811,149813,149816,149818],{"class":131,"line":1215},[129,149812,30846],{"class":188},[129,149814,149815],{"class":139},".score ",[129,149817,185],{"class":135},[129,149819,1593],{"class":139},[129,149821,149822],{"class":131,"line":1229},[129,149823,2414],{"emptyLinePlaceholder":56},[129,149825,149826,149828,149830],{"class":131,"line":1235},[129,149827,30802],{"class":135},[129,149829,149373],{"class":1977},[129,149831,30808],{"class":139},[129,149833,149834,149836,149838,149840,149842,149844,149846,149848,149850,149852,149854,149856,149859,149861,149864,149866,149868],{"class":131,"line":1326},[129,149835,32452],{"class":188},[129,149837,140],{"class":139},[129,149839,192],{"class":135},[129,149841,149387],{"class":244},[129,149843,149453],{"class":188},[129,149845,80302],{"class":139},[129,149847,1085],{"class":188},[129,149849,149396],{"class":244},[129,149851,149453],{"class":188},[129,149853,80314],{"class":139},[129,149855,1085],{"class":188},[129,149857,149858],{"class":244},"岁，成绩",[129,149860,149453],{"class":188},[129,149862,149863],{"class":139},".score",[129,149865,1085],{"class":188},[129,149867,390],{"class":244},[129,149869,146],{"class":139},[129,149871,149872],{"class":131,"line":1332},[129,149873,2414],{"emptyLinePlaceholder":56},[129,149875,149876],{"class":131,"line":1344},[129,149877,2414],{"emptyLinePlaceholder":56},[129,149879,149880,149882,149884,149887,149890,149892,149894,149896,149898],{"class":131,"line":1626},[129,149881,149482],{"class":139},[129,149883,185],{"class":135},[129,149885,149886],{"class":139}," Student(",[129,149888,149889],{"class":244},"\"小明\"",[129,149891,12450],{"class":139},[129,149893,789],{"class":188},[129,149895,12450],{"class":139},[129,149897,1128],{"class":188},[129,149899,146],{"class":139},[129,149901,149902],{"class":131,"line":1631},[129,149903,149510],{"class":139},[14,149905,149906],{},"构造方法的好处：",[83,149908,149909,149912,149915],{},[86,149910,149911],{},"创建对象时必须提供必要数据。",[86,149913,149914],{},"属性初始化集中，不容易漏。",[86,149916,149917],{},"对象状态更完整。",[71,149919,149921,149922],{"id":149920},"_116-str","11.6 ",[289,149923,1314],{},[14,149925,149926,149927,28386],{},"直接打印对象时，默认输出不直观。可以定义 ",[126,149928,149929],{},"__str__",[120,149931,149933],{"className":30379,"code":149932,"language":30381,"meta":42,"style":42},"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",[126,149934,149935,149943,149952,149962,149972,149976,149985,150013,150017,150021,150037],{"__ignoreMap":42},[129,149936,149937,149939,149941],{"class":131,"line":132},[129,149938,14709],{"class":135},[129,149940,7913],{"class":1977},[129,149942,3753],{"class":139},[129,149944,149945,149947,149949],{"class":131,"line":51},[129,149946,30802],{"class":135},[129,149948,30805],{"class":188},[129,149950,149951],{"class":139},"(self, name, age):\n",[129,149953,149954,149956,149958,149960],{"class":131,"line":1194},[129,149955,30846],{"class":188},[129,149957,149791],{"class":139},[129,149959,185],{"class":135},[129,149961,149796],{"class":139},[129,149963,149964,149966,149968,149970],{"class":131,"line":1209},[129,149965,30846],{"class":188},[129,149967,149803],{"class":139},[129,149969,185],{"class":135},[129,149971,149808],{"class":139},[129,149973,149974],{"class":131,"line":1215},[129,149975,2414],{"emptyLinePlaceholder":56},[129,149977,149978,149980,149983],{"class":131,"line":1229},[129,149979,30802],{"class":135},[129,149981,149982],{"class":188}," __str__",[129,149984,30808],{"class":139},[129,149986,149987,149989,149992,149995,149997,149999,150001,150004,150006,150008,150010],{"class":131,"line":1235},[129,149988,14767],{"class":135},[129,149990,149991],{"class":135}," f",[129,149993,149994],{"class":244},"\"Student(name=",[129,149996,149453],{"class":188},[129,149998,80302],{"class":139},[129,150000,1085],{"class":188},[129,150002,150003],{"class":244},", age=",[129,150005,149453],{"class":188},[129,150007,80314],{"class":139},[129,150009,1085],{"class":188},[129,150011,150012],{"class":244},")\"\n",[129,150014,150015],{"class":131,"line":1326},[129,150016,2414],{"emptyLinePlaceholder":56},[129,150018,150019],{"class":131,"line":1332},[129,150020,2414],{"emptyLinePlaceholder":56},[129,150022,150023,150025,150027,150029,150031,150033,150035],{"class":131,"line":1344},[129,150024,149482],{"class":139},[129,150026,185],{"class":135},[129,150028,149886],{"class":139},[129,150030,149889],{"class":244},[129,150032,12450],{"class":139},[129,150034,789],{"class":188},[129,150036,146],{"class":139},[129,150038,150039,150041],{"class":131,"line":1626},[129,150040,30416],{"class":188},[129,150042,150043],{"class":139},"(student)\n",[71,150045,150047],{"id":150046},"_117-封装","11.7 封装",[14,150049,150050],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150052,150053],{},"Python 中以双下划线开头的属性通常视为私有属性。",[120,150055,150057],{"className":30379,"code":150056,"language":30381,"meta":42,"style":42},"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",[126,150058,150059,150068,150077,150089,150101,150105,150114,150123,150127,150137,150150,150161,150166,150177,150181,150190,150202,150213,150217,150230,150241,150245,150256,150260,150264,150282,150291,150300],{"__ignoreMap":42},[129,150060,150061,150063,150066],{"class":131,"line":132},[129,150062,14709],{"class":135},[129,150064,150065],{"class":1977}," Account",[129,150067,3753],{"class":139},[129,150069,150070,150072,150074],{"class":131,"line":51},[129,150071,30802],{"class":135},[129,150073,30805],{"class":188},[129,150075,150076],{"class":139},"(self, owner, balance):\n",[129,150078,150079,150081,150084,150086],{"class":131,"line":1194},[129,150080,30846],{"class":188},[129,150082,150083],{"class":139},".owner ",[129,150085,185],{"class":135},[129,150087,150088],{"class":139}," owner\n",[129,150090,150091,150093,150096,150098],{"class":131,"line":1209},[129,150092,30846],{"class":188},[129,150094,150095],{"class":139},".__balance ",[129,150097,185],{"class":135},[129,150099,150100],{"class":139}," balance\n",[129,150102,150103],{"class":131,"line":1215},[129,150104,2414],{"emptyLinePlaceholder":56},[129,150106,150107,150109,150112],{"class":131,"line":1229},[129,150108,30802],{"class":135},[129,150110,150111],{"class":1977}," get_balance",[129,150113,30808],{"class":139},[129,150115,150116,150118,150120],{"class":131,"line":1235},[129,150117,14767],{"class":135},[129,150119,38874],{"class":188},[129,150121,150122],{"class":139},".__balance\n",[129,150124,150125],{"class":131,"line":1326},[129,150126,2414],{"emptyLinePlaceholder":56},[129,150128,150129,150131,150134],{"class":131,"line":1332},[129,150130,30802],{"class":135},[129,150132,150133],{"class":1977}," deposit",[129,150135,150136],{"class":139},"(self, money):\n",[129,150138,150139,150141,150144,150146,150148],{"class":131,"line":1344},[129,150140,2511],{"class":135},[129,150142,150143],{"class":139}," money ",[129,150145,1602],{"class":135},[129,150147,4107],{"class":188},[129,150149,3753],{"class":139},[129,150151,150152,150154,150156,150159],{"class":131,"line":1626},[129,150153,34651],{"class":188},[129,150155,140],{"class":139},[129,150157,150158],{"class":244},"\"存款金额必须大于0\"",[129,150160,146],{"class":139},[129,150162,150163],{"class":131,"line":1631},[129,150164,150165],{"class":135},"            return\n",[129,150167,150168,150170,150172,150174],{"class":131,"line":1637},[129,150169,30846],{"class":188},[129,150171,150095],{"class":139},[129,150173,9492],{"class":135},[129,150175,150176],{"class":139}," money\n",[129,150178,150179],{"class":131,"line":1642},[129,150180,2414],{"emptyLinePlaceholder":56},[129,150182,150183,150185,150188],{"class":131,"line":1656},[129,150184,30802],{"class":135},[129,150186,150187],{"class":1977}," withdraw",[129,150189,150136],{"class":139},[129,150191,150192,150194,150196,150198,150200],{"class":131,"line":1661},[129,150193,2511],{"class":135},[129,150195,150143],{"class":139},[129,150197,1602],{"class":135},[129,150199,4107],{"class":188},[129,150201,3753],{"class":139},[129,150203,150204,150206,150208,150211],{"class":131,"line":1667},[129,150205,34651],{"class":188},[129,150207,140],{"class":139},[129,150209,150210],{"class":244},"\"取款金额必须大于0\"",[129,150212,146],{"class":139},[129,150214,150215],{"class":131,"line":1688},[129,150216,150165],{"class":135},[129,150218,150219,150221,150223,150225,150227],{"class":131,"line":1693},[129,150220,2511],{"class":135},[129,150222,150143],{"class":139},[129,150224,1099],{"class":135},[129,150226,38874],{"class":188},[129,150228,150229],{"class":139},".__balance:\n",[129,150231,150232,150234,150236,150239],{"class":131,"line":1707},[129,150233,34651],{"class":188},[129,150235,140],{"class":139},[129,150237,150238],{"class":244},"\"余额不足\"",[129,150240,146],{"class":139},[129,150242,150243],{"class":131,"line":1712},[129,150244,150165],{"class":135},[129,150246,150247,150249,150251,150254],{"class":131,"line":1741},[129,150248,30846],{"class":188},[129,150250,150095],{"class":139},[129,150252,150253],{"class":135},"-=",[129,150255,150176],{"class":139},[129,150257,150258],{"class":131,"line":1746},[129,150259,2414],{"emptyLinePlaceholder":56},[129,150261,150262],{"class":131,"line":1763},[129,150263,2414],{"emptyLinePlaceholder":56},[129,150265,150266,150269,150271,150274,150276,150278,150280],{"class":131,"line":1768},[129,150267,150268],{"class":139},"account ",[129,150270,185],{"class":135},[129,150272,150273],{"class":139}," Account(",[129,150275,149889],{"class":244},[129,150277,12450],{"class":139},[129,150279,6425],{"class":188},[129,150281,146],{"class":139},[129,150283,150284,150287,150289],{"class":131,"line":1773},[129,150285,150286],{"class":139},"account.deposit(",[129,150288,1736],{"class":188},[129,150290,146],{"class":139},[129,150292,150293,150296,150298],{"class":131,"line":1778},[129,150294,150295],{"class":139},"account.withdraw(",[129,150297,450],{"class":188},[129,150299,146],{"class":139},[129,150301,150302,150304],{"class":131,"line":1792},[129,150303,30416],{"class":188},[129,150305,150306],{"class":139},"(account.get_balance())\n",[14,150308,150309],{},"封装的意义是避免外部随意修改内部状态。",[71,150311,150313],{"id":150312},"_118-继承","11.8 继承",[14,150315,150316],{},"继承可以让子类复用父类的属性和方法。",[120,150318,150320],{"className":30379,"code":150319,"language":30381,"meta":42,"style":42},"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",[126,150321,150322,150331,150340,150351,150355,150359,150373,150382,150393,150397,150401,150411,150416],{"__ignoreMap":42},[129,150323,150324,150326,150329],{"class":131,"line":132},[129,150325,14709],{"class":135},[129,150327,150328],{"class":1977}," Animal",[129,150330,3753],{"class":139},[129,150332,150333,150335,150338],{"class":131,"line":51},[129,150334,30802],{"class":135},[129,150336,150337],{"class":1977}," eat",[129,150339,30808],{"class":139},[129,150341,150342,150344,150346,150349],{"class":131,"line":1194},[129,150343,32452],{"class":188},[129,150345,140],{"class":139},[129,150347,150348],{"class":244},"\"吃东西\"",[129,150350,146],{"class":139},[129,150352,150353],{"class":131,"line":1209},[129,150354,2414],{"emptyLinePlaceholder":56},[129,150356,150357],{"class":131,"line":1215},[129,150358,2414],{"emptyLinePlaceholder":56},[129,150360,150361,150363,150366,150368,150371],{"class":131,"line":1229},[129,150362,14709],{"class":135},[129,150364,150365],{"class":1977}," Dog",[129,150367,140],{"class":139},[129,150369,150370],{"class":1977},"Animal",[129,150372,30787],{"class":139},[129,150374,150375,150377,150380],{"class":131,"line":1235},[129,150376,30802],{"class":135},[129,150378,150379],{"class":1977}," bark",[129,150381,30808],{"class":139},[129,150383,150384,150386,150388,150391],{"class":131,"line":1326},[129,150385,32452],{"class":188},[129,150387,140],{"class":139},[129,150389,150390],{"class":244},"\"汪汪\"",[129,150392,146],{"class":139},[129,150394,150395],{"class":131,"line":1332},[129,150396,2414],{"emptyLinePlaceholder":56},[129,150398,150399],{"class":131,"line":1344},[129,150400,2414],{"emptyLinePlaceholder":56},[129,150402,150403,150406,150408],{"class":131,"line":1626},[129,150404,150405],{"class":139},"dog ",[129,150407,185],{"class":135},[129,150409,150410],{"class":139}," Dog()\n",[129,150412,150413],{"class":131,"line":1631},[129,150414,150415],{"class":139},"dog.eat()\n",[129,150417,150418],{"class":131,"line":1637},[129,150419,150420],{"class":139},"dog.bark()\n",[14,150422,150423],{},"子类可以扩展新方法，也可以重写父类方法。",[71,150425,150427],{"id":150426},"_119-方法重写","11.9 方法重写",[120,150429,150431],{"className":30379,"code":150430,"language":30381,"meta":42,"style":42},"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",[126,150432,150433,150441,150450,150461,150465,150469,150481,150489,150499,150503,150507,150520,150528,150539,150543,150547,150555,150565,150569,150574],{"__ignoreMap":42},[129,150434,150435,150437,150439],{"class":131,"line":132},[129,150436,14709],{"class":135},[129,150438,150328],{"class":1977},[129,150440,3753],{"class":139},[129,150442,150443,150445,150448],{"class":131,"line":51},[129,150444,30802],{"class":135},[129,150446,150447],{"class":1977}," speak",[129,150449,30808],{"class":139},[129,150451,150452,150454,150456,150459],{"class":131,"line":1194},[129,150453,32452],{"class":188},[129,150455,140],{"class":139},[129,150457,150458],{"class":244},"\"动物叫\"",[129,150460,146],{"class":139},[129,150462,150463],{"class":131,"line":1209},[129,150464,2414],{"emptyLinePlaceholder":56},[129,150466,150467],{"class":131,"line":1215},[129,150468,2414],{"emptyLinePlaceholder":56},[129,150470,150471,150473,150475,150477,150479],{"class":131,"line":1229},[129,150472,14709],{"class":135},[129,150474,150365],{"class":1977},[129,150476,140],{"class":139},[129,150478,150370],{"class":1977},[129,150480,30787],{"class":139},[129,150482,150483,150485,150487],{"class":131,"line":1235},[129,150484,30802],{"class":135},[129,150486,150447],{"class":1977},[129,150488,30808],{"class":139},[129,150490,150491,150493,150495,150497],{"class":131,"line":1326},[129,150492,32452],{"class":188},[129,150494,140],{"class":139},[129,150496,150390],{"class":244},[129,150498,146],{"class":139},[129,150500,150501],{"class":131,"line":1332},[129,150502,2414],{"emptyLinePlaceholder":56},[129,150504,150505],{"class":131,"line":1344},[129,150506,2414],{"emptyLinePlaceholder":56},[129,150508,150509,150511,150514,150516,150518],{"class":131,"line":1626},[129,150510,14709],{"class":135},[129,150512,150513],{"class":1977}," Cat",[129,150515,140],{"class":139},[129,150517,150370],{"class":1977},[129,150519,30787],{"class":139},[129,150521,150522,150524,150526],{"class":131,"line":1631},[129,150523,30802],{"class":135},[129,150525,150447],{"class":1977},[129,150527,30808],{"class":139},[129,150529,150530,150532,150534,150537],{"class":131,"line":1637},[129,150531,32452],{"class":188},[129,150533,140],{"class":139},[129,150535,150536],{"class":244},"\"喵喵\"",[129,150538,146],{"class":139},[129,150540,150541],{"class":131,"line":1642},[129,150542,2414],{"emptyLinePlaceholder":56},[129,150544,150545],{"class":131,"line":1656},[129,150546,2414],{"emptyLinePlaceholder":56},[129,150548,150549,150551,150553],{"class":131,"line":1661},[129,150550,150405],{"class":139},[129,150552,185],{"class":135},[129,150554,150410],{"class":139},[129,150556,150557,150560,150562],{"class":131,"line":1667},[129,150558,150559],{"class":139},"cat ",[129,150561,185],{"class":135},[129,150563,150564],{"class":139}," Cat()\n",[129,150566,150567],{"class":131,"line":1688},[129,150568,2414],{"emptyLinePlaceholder":56},[129,150570,150571],{"class":131,"line":1693},[129,150572,150573],{"class":139},"dog.speak()\n",[129,150575,150576],{"class":131,"line":1707},[129,150577,150578],{"class":139},"cat.speak()\n",[71,150580,150582],{"id":150581},"_1110-super","11.10 super",[14,150584,150585,150586,150589],{},"子类可以通过 ",[126,150587,150588],{},"super()"," 调用父类方法。",[120,150591,150593],{"className":30379,"code":150592,"language":30381,"meta":42,"style":42},"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",[126,150594,150595,150603,150612,150622,150626,150630,150642,150651,150662,150672,150676,150680,150696],{"__ignoreMap":42},[129,150596,150597,150599,150601],{"class":131,"line":132},[129,150598,14709],{"class":135},[129,150600,15584],{"class":1977},[129,150602,3753],{"class":139},[129,150604,150605,150607,150609],{"class":131,"line":51},[129,150606,30802],{"class":135},[129,150608,30805],{"class":188},[129,150610,150611],{"class":139},"(self, name):\n",[129,150613,150614,150616,150618,150620],{"class":131,"line":1194},[129,150615,30846],{"class":188},[129,150617,149791],{"class":139},[129,150619,185],{"class":135},[129,150621,149796],{"class":139},[129,150623,150624],{"class":131,"line":1209},[129,150625,2414],{"emptyLinePlaceholder":56},[129,150627,150628],{"class":131,"line":1215},[129,150629,2414],{"emptyLinePlaceholder":56},[129,150631,150632,150634,150636,150638,150640],{"class":131,"line":1229},[129,150633,14709],{"class":135},[129,150635,7913],{"class":1977},[129,150637,140],{"class":139},[129,150639,19061],{"class":1977},[129,150641,30787],{"class":139},[129,150643,150644,150646,150648],{"class":131,"line":1235},[129,150645,30802],{"class":135},[129,150647,30805],{"class":188},[129,150649,150650],{"class":139},"(self, name, score):\n",[129,150652,150653,150655,150657,150659],{"class":131,"line":1326},[129,150654,30818],{"class":188},[129,150656,17276],{"class":139},[129,150658,30830],{"class":188},[129,150660,150661],{"class":139},"(name)\n",[129,150663,150664,150666,150668,150670],{"class":131,"line":1332},[129,150665,30846],{"class":188},[129,150667,149815],{"class":139},[129,150669,185],{"class":135},[129,150671,1593],{"class":139},[129,150673,150674],{"class":131,"line":1344},[129,150675,2414],{"emptyLinePlaceholder":56},[129,150677,150678],{"class":131,"line":1626},[129,150679,2414],{"emptyLinePlaceholder":56},[129,150681,150682,150684,150686,150688,150690,150692,150694],{"class":131,"line":1631},[129,150683,149482],{"class":139},[129,150685,185],{"class":135},[129,150687,149886],{"class":139},[129,150689,149889],{"class":244},[129,150691,12450],{"class":139},[129,150693,1128],{"class":188},[129,150695,146],{"class":139},[129,150697,150698,150700],{"class":131,"line":1637},[129,150699,30416],{"class":188},[129,150701,150702],{"class":139},"(student.name, student.score)\n",[71,150704,150706],{"id":150705},"_1111-多态","11.11 多态",[14,150708,150709],{},"多态指不同对象响应同一个方法，表现出不同结果。",[120,150711,150713],{"className":30379,"code":150712,"language":30381,"meta":42,"style":42},"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",[126,150714,150715,150723,150731,150741,150745,150749,150757,150765,150775,150779,150783,150793,150798,150802,150806,150811],{"__ignoreMap":42},[129,150716,150717,150719,150721],{"class":131,"line":132},[129,150718,14709],{"class":135},[129,150720,150365],{"class":1977},[129,150722,3753],{"class":139},[129,150724,150725,150727,150729],{"class":131,"line":51},[129,150726,30802],{"class":135},[129,150728,150447],{"class":1977},[129,150730,30808],{"class":139},[129,150732,150733,150735,150737,150739],{"class":131,"line":1194},[129,150734,32452],{"class":188},[129,150736,140],{"class":139},[129,150738,150390],{"class":244},[129,150740,146],{"class":139},[129,150742,150743],{"class":131,"line":1209},[129,150744,2414],{"emptyLinePlaceholder":56},[129,150746,150747],{"class":131,"line":1215},[129,150748,2414],{"emptyLinePlaceholder":56},[129,150750,150751,150753,150755],{"class":131,"line":1229},[129,150752,14709],{"class":135},[129,150754,150513],{"class":1977},[129,150756,3753],{"class":139},[129,150758,150759,150761,150763],{"class":131,"line":1235},[129,150760,30802],{"class":135},[129,150762,150447],{"class":1977},[129,150764,30808],{"class":139},[129,150766,150767,150769,150771,150773],{"class":131,"line":1326},[129,150768,32452],{"class":188},[129,150770,140],{"class":139},[129,150772,150536],{"class":244},[129,150774,146],{"class":139},[129,150776,150777],{"class":131,"line":1332},[129,150778,2414],{"emptyLinePlaceholder":56},[129,150780,150781],{"class":131,"line":1344},[129,150782,2414],{"emptyLinePlaceholder":56},[129,150784,150785,150787,150790],{"class":131,"line":1626},[129,150786,31948],{"class":135},[129,150788,150789],{"class":1977}," make_sound",[129,150791,150792],{"class":139},"(animal):\n",[129,150794,150795],{"class":131,"line":1631},[129,150796,150797],{"class":139},"    animal.speak()\n",[129,150799,150800],{"class":131,"line":1637},[129,150801,2414],{"emptyLinePlaceholder":56},[129,150803,150804],{"class":131,"line":1642},[129,150805,2414],{"emptyLinePlaceholder":56},[129,150807,150808],{"class":131,"line":1656},[129,150809,150810],{"class":139},"make_sound(Dog())\n",[129,150812,150813],{"class":131,"line":1661},[129,150814,150815],{"class":139},"make_sound(Cat())\n",[14,150817,150818],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[71,150820,150822],{"id":150821},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150824,150825],{},"实例属性属于对象：",[120,150827,150829],{"className":30379,"code":150828,"language":30381,"meta":42,"style":42},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[126,150830,150831,150839,150847],{"__ignoreMap":42},[129,150832,150833,150835,150837],{"class":131,"line":132},[129,150834,14709],{"class":135},[129,150836,7913],{"class":1977},[129,150838,3753],{"class":139},[129,150840,150841,150843,150845],{"class":131,"line":51},[129,150842,30802],{"class":135},[129,150844,30805],{"class":188},[129,150846,150611],{"class":139},[129,150848,150849,150851,150853,150855],{"class":131,"line":1194},[129,150850,30846],{"class":188},[129,150852,149791],{"class":139},[129,150854,185],{"class":135},[129,150856,149796],{"class":139},[14,150858,150859],{},"类属性属于类，所有对象共享：",[120,150861,150863],{"className":30379,"code":150862,"language":30381,"meta":42,"style":42},"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",[126,150864,150865,150873,150883,150887,150895,150905,150909,150913,150926,150940,150944,150951,150958],{"__ignoreMap":42},[129,150866,150867,150869,150871],{"class":131,"line":132},[129,150868,14709],{"class":135},[129,150870,7913],{"class":1977},[129,150872,3753],{"class":139},[129,150874,150875,150878,150880],{"class":131,"line":51},[129,150876,150877],{"class":139},"    school ",[129,150879,185],{"class":135},[129,150881,150882],{"class":244}," \"黑马学校\"\n",[129,150884,150885],{"class":131,"line":1194},[129,150886,2414],{"emptyLinePlaceholder":56},[129,150888,150889,150891,150893],{"class":131,"line":1209},[129,150890,30802],{"class":135},[129,150892,30805],{"class":188},[129,150894,150611],{"class":139},[129,150896,150897,150899,150901,150903],{"class":131,"line":1215},[129,150898,30846],{"class":188},[129,150900,149791],{"class":139},[129,150902,185],{"class":135},[129,150904,149796],{"class":139},[129,150906,150907],{"class":131,"line":1229},[129,150908,2414],{"emptyLinePlaceholder":56},[129,150910,150911],{"class":131,"line":1235},[129,150912,2414],{"emptyLinePlaceholder":56},[129,150914,150915,150918,150920,150922,150924],{"class":131,"line":1326},[129,150916,150917],{"class":139},"s1 ",[129,150919,185],{"class":135},[129,150921,149886],{"class":139},[129,150923,149889],{"class":244},[129,150925,146],{"class":139},[129,150927,150928,150931,150933,150935,150938],{"class":131,"line":1332},[129,150929,150930],{"class":139},"s2 ",[129,150932,185],{"class":135},[129,150934,149886],{"class":139},[129,150936,150937],{"class":244},"\"小红\"",[129,150939,146],{"class":139},[129,150941,150942],{"class":131,"line":1344},[129,150943,2414],{"emptyLinePlaceholder":56},[129,150945,150946,150948],{"class":131,"line":1626},[129,150947,30416],{"class":188},[129,150949,150950],{"class":139},"(s1.school)\n",[129,150952,150953,150955],{"class":131,"line":1631},[129,150954,30416],{"class":188},[129,150956,150957],{"class":139},"(s2.school)\n",[129,150959,150960,150962],{"class":131,"line":1637},[129,150961,30416],{"class":188},[129,150963,150964],{"class":139},"(Student.school)\n",[14,150966,150967],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[71,150969,150971],{"id":150970},"_1113-类方法和静态方法","11.13 类方法和静态方法",[100,150973,150975],{"id":150974},"_11131-类方法","11.13.1 类方法",[14,150977,150978,150979,150982,150983,28386],{},"类方法使用 ",[126,150980,150981],{},"@classmethod","，第一个参数通常是 ",[126,150984,150985],{},"cls",[120,150987,150989],{"className":30379,"code":150988,"language":30381,"meta":42,"style":42},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[126,150990,150991,150999,151007,151011,151019,151029,151039,151043,151047],{"__ignoreMap":42},[129,150992,150993,150995,150997],{"class":131,"line":132},[129,150994,14709],{"class":135},[129,150996,7913],{"class":1977},[129,150998,3753],{"class":139},[129,151000,151001,151003,151005],{"class":131,"line":51},[129,151002,150877],{"class":139},[129,151004,185],{"class":135},[129,151006,150882],{"class":244},[129,151008,151009],{"class":131,"line":1194},[129,151010,2414],{"emptyLinePlaceholder":56},[129,151012,151013,151016],{"class":131,"line":1209},[129,151014,151015],{"class":1977},"    @",[129,151017,151018],{"class":188},"classmethod\n",[129,151020,151021,151023,151026],{"class":131,"line":1215},[129,151022,30802],{"class":135},[129,151024,151025],{"class":1977}," get_school",[129,151027,151028],{"class":139},"(cls):\n",[129,151030,151031,151033,151036],{"class":131,"line":1229},[129,151032,14767],{"class":135},[129,151034,151035],{"class":188}," cls",[129,151037,151038],{"class":139},".school\n",[129,151040,151041],{"class":131,"line":1235},[129,151042,2414],{"emptyLinePlaceholder":56},[129,151044,151045],{"class":131,"line":1326},[129,151046,2414],{"emptyLinePlaceholder":56},[129,151048,151049,151051],{"class":131,"line":1332},[129,151050,30416],{"class":188},[129,151052,151053],{"class":139},"(Student.get_school())\n",[100,151055,151057],{"id":151056},"_11132-静态方法","11.13.2 静态方法",[14,151059,151060,151061,151064],{},"静态方法使用 ",[126,151062,151063],{},"@staticmethod","，不需要访问实例和类。",[120,151066,151068],{"className":30379,"code":151067,"language":30381,"meta":42,"style":42},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[126,151069,151070,151079,151086,151095,151106,151110,151114],{"__ignoreMap":42},[129,151071,151072,151074,151077],{"class":131,"line":132},[129,151073,14709],{"class":135},[129,151075,151076],{"class":1977}," MathUtils",[129,151078,3753],{"class":139},[129,151080,151081,151083],{"class":131,"line":51},[129,151082,151015],{"class":1977},[129,151084,151085],{"class":188},"staticmethod\n",[129,151087,151088,151090,151092],{"class":131,"line":1194},[129,151089,30802],{"class":135},[129,151091,5224],{"class":1977},[129,151093,151094],{"class":139},"(a, b):\n",[129,151096,151097,151099,151101,151103],{"class":131,"line":1209},[129,151098,14767],{"class":135},[129,151100,10884],{"class":139},[129,151102,620],{"class":135},[129,151104,151105],{"class":139}," b\n",[129,151107,151108],{"class":131,"line":1215},[129,151109,2414],{"emptyLinePlaceholder":56},[129,151111,151112],{"class":131,"line":1229},[129,151113,2414],{"emptyLinePlaceholder":56},[129,151115,151116,151118,151121,151123,151125,151127],{"class":131,"line":1235},[129,151117,30416],{"class":188},[129,151119,151120],{"class":139},"(MathUtils.add(",[129,151122,357],{"class":188},[129,151124,12450],{"class":139},[129,151126,217],{"class":188},[129,151128,30498],{"class":139},[14,151130,151131],{},"静态方法本质上是放在类命名空间里的普通函数。",[71,151133,151135],{"id":151134},"_1114-dataclass","11.14 dataclass",[14,151137,151138,151141],{},[126,151139,151140],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[120,151143,151145],{"className":30379,"code":151144,"language":30381,"meta":42,"style":42},"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",[126,151146,151147,151159,151163,151167,151172,151180,151188,151196,151204,151208,151212,151232],{"__ignoreMap":42},[129,151148,151149,151151,151154,151156],{"class":131,"line":132},[129,151150,30738],{"class":135},[129,151152,151153],{"class":139}," dataclasses ",[129,151155,30393],{"class":135},[129,151157,151158],{"class":139}," dataclass\n",[129,151160,151161],{"class":131,"line":51},[129,151162,2414],{"emptyLinePlaceholder":56},[129,151164,151165],{"class":131,"line":1194},[129,151166,2414],{"emptyLinePlaceholder":56},[129,151168,151169],{"class":131,"line":1209},[129,151170,151171],{"class":1977},"@dataclass\n",[129,151173,151174,151176,151178],{"class":131,"line":1215},[129,151175,14709],{"class":135},[129,151177,7913],{"class":1977},[129,151179,3753],{"class":139},[129,151181,151182,151185],{"class":131,"line":1229},[129,151183,151184],{"class":139},"    name: ",[129,151186,151187],{"class":188},"str\n",[129,151189,151190,151193],{"class":131,"line":1235},[129,151191,151192],{"class":139},"    age: ",[129,151194,151195],{"class":188},"int\n",[129,151197,151198,151201],{"class":131,"line":1326},[129,151199,151200],{"class":139},"    score: ",[129,151202,151203],{"class":188},"float\n",[129,151205,151206],{"class":131,"line":1332},[129,151207,2414],{"emptyLinePlaceholder":56},[129,151209,151210],{"class":131,"line":1344},[129,151211,2414],{"emptyLinePlaceholder":56},[129,151213,151214,151216,151218,151220,151222,151224,151226,151228,151230],{"class":131,"line":1626},[129,151215,149482],{"class":139},[129,151217,185],{"class":135},[129,151219,149886],{"class":139},[129,151221,149889],{"class":244},[129,151223,12450],{"class":139},[129,151225,789],{"class":188},[129,151227,12450],{"class":139},[129,151229,1128],{"class":188},[129,151231,146],{"class":139},[129,151233,151234,151236],{"class":131,"line":1631},[129,151235,30416],{"class":188},[129,151237,150043],{"class":139},[14,151239,151240,151241,352,151243,151246],{},"它会自动生成 ",[126,151242,30830],{},[126,151244,151245],{},"__repr__"," 等方法。适合数据模型类。",[71,151248,151250],{"id":151249},"_1115-小案例学生类","11.15 小案例：学生类",[120,151252,151254],{"className":30379,"code":151253,"language":30381,"meta":42,"style":42},"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",[126,151255,151256,151264,151273,151285,151295,151305,151315,151319,151328,151341,151345,151354,151360,151372,151384,151396,151408,151412,151416,151422,151432,151441,151451,151459,151467,151476,151480,151484,151492,151528,151532,151536,151561,151568],{"__ignoreMap":42},[129,151257,151258,151260,151262],{"class":131,"line":132},[129,151259,14709],{"class":135},[129,151261,7913],{"class":1977},[129,151263,3753],{"class":139},[129,151265,151266,151268,151270],{"class":131,"line":51},[129,151267,30802],{"class":135},[129,151269,30805],{"class":188},[129,151271,151272],{"class":139},"(self, student_id, name, age, score):\n",[129,151274,151275,151277,151280,151282],{"class":131,"line":1194},[129,151276,30846],{"class":188},[129,151278,151279],{"class":139},".student_id ",[129,151281,185],{"class":135},[129,151283,151284],{"class":139}," student_id\n",[129,151286,151287,151289,151291,151293],{"class":131,"line":1209},[129,151288,30846],{"class":188},[129,151290,149791],{"class":139},[129,151292,185],{"class":135},[129,151294,149796],{"class":139},[129,151296,151297,151299,151301,151303],{"class":131,"line":1215},[129,151298,30846],{"class":188},[129,151300,149803],{"class":139},[129,151302,185],{"class":135},[129,151304,149808],{"class":139},[129,151306,151307,151309,151311,151313],{"class":131,"line":1229},[129,151308,30846],{"class":188},[129,151310,149815],{"class":139},[129,151312,185],{"class":135},[129,151314,1593],{"class":139},[129,151316,151317],{"class":131,"line":1235},[129,151318,2414],{"emptyLinePlaceholder":56},[129,151320,151321,151323,151326],{"class":131,"line":1326},[129,151322,30802],{"class":135},[129,151324,151325],{"class":1977}," is_passed",[129,151327,30808],{"class":139},[129,151329,151330,151332,151334,151336,151338],{"class":131,"line":1332},[129,151331,14767],{"class":135},[129,151333,38874],{"class":188},[129,151335,149815],{"class":139},[129,151337,1724],{"class":135},[129,151339,151340],{"class":188}," 60\n",[129,151342,151343],{"class":131,"line":1344},[129,151344,2414],{"emptyLinePlaceholder":56},[129,151346,151347,151349,151352],{"class":131,"line":1626},[129,151348,30802],{"class":135},[129,151350,151351],{"class":1977}," to_dict",[129,151353,30808],{"class":139},[129,151355,151356,151358],{"class":131,"line":1631},[129,151357,14767],{"class":135},[129,151359,15587],{"class":139},[129,151361,151362,151365,151367,151369],{"class":131,"line":1637},[129,151363,151364],{"class":244},"            \"student_id\"",[129,151366,51438],{"class":139},[129,151368,30824],{"class":188},[129,151370,151371],{"class":139},".student_id,\n",[129,151373,151374,151377,151379,151381],{"class":131,"line":1642},[129,151375,151376],{"class":244},"            \"name\"",[129,151378,51438],{"class":139},[129,151380,30824],{"class":188},[129,151382,151383],{"class":139},".name,\n",[129,151385,151386,151389,151391,151393],{"class":131,"line":1656},[129,151387,151388],{"class":244},"            \"age\"",[129,151390,51438],{"class":139},[129,151392,30824],{"class":188},[129,151394,151395],{"class":139},".age,\n",[129,151397,151398,151401,151403,151405],{"class":131,"line":1661},[129,151399,151400],{"class":244},"            \"score\"",[129,151402,51438],{"class":139},[129,151404,30824],{"class":188},[129,151406,151407],{"class":139},".score,\n",[129,151409,151410],{"class":131,"line":1667},[129,151411,2543],{"class":139},[129,151413,151414],{"class":131,"line":1688},[129,151415,2414],{"emptyLinePlaceholder":56},[129,151417,151418,151420],{"class":131,"line":1693},[129,151419,151015],{"class":1977},[129,151421,151018],{"class":188},[129,151423,151424,151426,151429],{"class":131,"line":1707},[129,151425,30802],{"class":135},[129,151427,151428],{"class":1977}," from_dict",[129,151430,151431],{"class":139},"(cls, data):\n",[129,151433,151434,151436,151438],{"class":131,"line":1712},[129,151435,14767],{"class":135},[129,151437,151035],{"class":188},[129,151439,151440],{"class":139},"(\n",[129,151442,151443,151446,151449],{"class":131,"line":1741},[129,151444,151445],{"class":139},"            data[",[129,151447,151448],{"class":244},"\"student_id\"",[129,151450,87837],{"class":139},[129,151452,151453,151455,151457],{"class":131,"line":1746},[129,151454,151445],{"class":139},[129,151456,62680],{"class":244},[129,151458,87837],{"class":139},[129,151460,151461,151463,151465],{"class":131,"line":1763},[129,151462,151445],{"class":139},[129,151464,69125],{"class":244},[129,151466,87837],{"class":139},[129,151468,151469,151471,151474],{"class":131,"line":1768},[129,151470,151445],{"class":139},[129,151472,151473],{"class":244},"\"score\"",[129,151475,87837],{"class":139},[129,151477,151478],{"class":131,"line":1773},[129,151479,38127],{"class":139},[129,151481,151482],{"class":131,"line":1778},[129,151483,2414],{"emptyLinePlaceholder":56},[129,151485,151486,151488,151490],{"class":131,"line":1792},[129,151487,30802],{"class":135},[129,151489,149982],{"class":188},[129,151491,30808],{"class":139},[129,151493,151494,151496,151498,151500,151502,151505,151507,151510,151512,151514,151516,151518,151520,151522,151524,151526],{"class":131,"line":1797},[129,151495,14767],{"class":135},[129,151497,149991],{"class":135},[129,151499,390],{"class":244},[129,151501,149453],{"class":188},[129,151503,151504],{"class":139},".student_id",[129,151506,1085],{"class":188},[129,151508,151509],{"class":188}," {self",[129,151511,80302],{"class":139},[129,151513,1085],{"class":188},[129,151515,151509],{"class":188},[129,151517,80314],{"class":139},[129,151519,1085],{"class":188},[129,151521,151509],{"class":188},[129,151523,149863],{"class":139},[129,151525,1085],{"class":188},[129,151527,25134],{"class":244},[129,151529,151530],{"class":131,"line":2591},[129,151531,2414],{"emptyLinePlaceholder":56},[129,151533,151534],{"class":131,"line":2605},[129,151535,2414],{"emptyLinePlaceholder":56},[129,151537,151538,151540,151542,151544,151547,151549,151551,151553,151555,151557,151559],{"class":131,"line":2613},[129,151539,149482],{"class":139},[129,151541,185],{"class":135},[129,151543,149886],{"class":139},[129,151545,151546],{"class":244},"\"001\"",[129,151548,12450],{"class":139},[129,151550,149889],{"class":244},[129,151552,12450],{"class":139},[129,151554,789],{"class":188},[129,151556,12450],{"class":139},[129,151558,1128],{"class":188},[129,151560,146],{"class":139},[129,151562,151563,151565],{"class":131,"line":2618},[129,151564,30416],{"class":188},[129,151566,151567],{"class":139},"(student.is_passed())\n",[129,151569,151570,151572],{"class":131,"line":2624},[129,151571,30416],{"class":188},[129,151573,151574],{"class":139},"(student.to_dict())\n",[14,151576,151577,101019,151580,151583],{},[126,151578,151579],{},"to_dict()",[126,151581,151582],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[71,151585,151587],{"id":151586},"_1116-易错点","11.16 易错点",[83,151589,151590,151596,151602,151607,151610,151613],{},[86,151591,151592,151593,28386],{},"类名推荐使用大驼峰，如 ",[126,151594,151595],{},"StudentManager",[86,151597,151598,151599,151601],{},"方法第一个参数必须写 ",[126,151600,30824],{},"，调用时不用传。",[86,151603,151604,151606],{},[126,151605,30830],{}," 不是普通方法，它在创建对象时自动执行。",[86,151608,151609],{},"私有属性不是绝对安全，只是约定和名称改写。",[86,151611,151612],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[86,151614,151615],{},"类中方法太多时，说明职责可能过重。",[71,151617,151619],{"id":151618},"_1117-本章练习","11.17 本章练习",[83,151621,151622,151628,151634,151639,151652],{},[86,151623,151624,151625,151627],{},"定义 ",[126,151626,149569],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[86,151629,151624,151630,151633],{},[126,151631,151632],{},"Account"," 类，实现存款、取款、查询余额。",[86,151635,151624,151636,151638],{},[126,151637,17241],{}," 类，计算圆的周长和面积。",[86,151640,151624,151641,352,151644,151647,151648,151651],{},[126,151642,151643],{},"Dog",[126,151645,151646],{},"Cat"," 类，并用同一个函数调用它们的 ",[126,151649,151650],{},"speak()"," 方法。",[86,151653,104367,151654,151656,151657,28386],{},[126,151655,151140],{}," 定义一个商品类 ",[126,151658,151659],{},"Product",[5141,151661,151662],{},"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":42,"searchDepth":51,"depth":51,"links":151664},[151665,151666,151667,151668,151669,151670,151672,151673,151674,151675,151676,151677,151678,151682,151683,151684,151685],{"id":149333,"depth":51,"text":149334},{"id":149516,"depth":51,"text":149517},{"id":149580,"depth":51,"text":149581},{"id":149657,"depth":51,"text":149658},{"id":149756,"depth":51,"text":149757},{"id":149920,"depth":51,"text":151671},"11.6 str",{"id":150046,"depth":51,"text":150047},{"id":150312,"depth":51,"text":150313},{"id":150426,"depth":51,"text":150427},{"id":150581,"depth":51,"text":150582},{"id":150705,"depth":51,"text":150706},{"id":150821,"depth":51,"text":150822},{"id":150970,"depth":51,"text":150971,"children":151679},[151680,151681],{"id":150974,"depth":1194,"text":150975},{"id":151056,"depth":1194,"text":151057},{"id":151134,"depth":51,"text":151135},{"id":151249,"depth":51,"text":151250},{"id":151586,"depth":51,"text":151587},{"id":151618,"depth":51,"text":151619},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149325,"description":53},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151692,"title":151693,"body":151694,"description":53,"extension":54,"meta":155007,"navigation":56,"path":155008,"seo":155009,"stem":155010,"__hash__":155011},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151695,"toc":154983},[151696,151699,151703,151706,151709,151738,151741,151749,151753,151757,151760,151783,151786,151792,151796,153242,153245,153266,153270,153273,153285,153288,153472,153475,153601,153604,153608,153612,153748,153752,153838,153842,153924,153928,153965,153969,154158,154162,154165,154395,154399,154402,154583,154586,154590,154593,154599,154602,154628,154632,154635,154649,154652,154677,154680,154694,154697,154714,154717,154734,154737,154754,154758,154784,154788,154811,154815,154818,154820,154826,154828,154849,154852,154858,154864,154868,154871,154947,154950,154954,154980],[10,151697,151693],{"id":151698},"_12-综合案例与复习路线",[71,151700,151702],{"id":151701},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151704,151705],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151707,151708],{},"一个合格的入门综合项目最好覆盖：",[83,151710,151711,151714,151717,151720,151723,151726,151729,151732,151735],{},[86,151712,151713],{},"输入输出。",[86,151715,151716],{},"判断和循环。",[86,151718,151719],{},"函数拆分。",[86,151721,151722],{},"列表、字典等容器。",[86,151724,151725],{},"文件持久化。",[86,151727,151728],{},"异常处理。",[86,151730,151731],{},"模块拆分。",[86,151733,151734],{},"可选：面向对象。",[86,151736,151737],{},"可选：数据可视化。",[14,151739,151740],{},"本章整理两个方向：",[83,151742,151743,151746],{},[86,151744,151745],{},"学生管理系统。",[86,151747,151748],{},"销售数据统计和可视化。",[71,151750,151752],{"id":151751},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[100,151754,151756],{"id":151755},"_1221-需求","12.2.1 需求",[14,151758,151759],{},"实现一个命令行学生管理系统：",[83,151761,151762,151765,151768,151771,151774,151777,151780],{},[86,151763,151764],{},"添加学生。",[86,151766,151767],{},"删除学生。",[86,151769,151770],{},"修改学生。",[86,151772,151773],{},"查询学生。",[86,151775,151776],{},"显示所有学生。",[86,151778,151779],{},"保存到 JSON 文件。",[86,151781,151782],{},"程序启动时自动读取 JSON 文件。",[14,151784,151785],{},"学生字段：",[120,151787,151790],{"className":151788,"code":151789,"language":5202,"meta":42},[5200],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[126,151791,151789],{"__ignoreMap":42},[71,151793,151795],{"id":151794},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[120,151797,151799],{"className":30379,"code":151798,"language":30381,"meta":42,"style":42},"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",[126,151800,151801,151807,151817,151821,151835,151839,151843,151852,151864,151870,151874,151880,151911,151921,151928,151939,151945,151949,151953,151963,151994,152020,152024,152028,152037,152048,152059,152070,152081,152092,152103,152114,152118,152122,152132,152144,152160,152167,152174,152178,152182,152192,152200,152207,152220,152230,152241,152245,152249,152258,152266,152272,152284,152292,152303,152307,152311,152320,152336,152340,152347,152358,152363,152367,152383,152398,152413,152417,152422,152430,152438,152446,152454,152458,152463,152474,152478,152482,152491,152506,152516,152520,152532,152543,152547,152551,152556,152560,152571,152575,152579,152588,152603,152611,152615,152627,152637,152641,152645,152660,152673,152686,152690,152703,152715,152727,152731,152735,152746,152750,152754,152763,152778,152786,152790,152802,152812,152816,152820,152825,152829,152833,152843,152849,152871,152890,152909,152928,152933,152937,152941,152950,152958,152969,152973,152977,153003,153013,153018,153022,153026,153034,153044,153048,153056,153061,153077,153081,153095,153100,153114,153119,153132,153137,153150,153155,153168,153173,153186,153197,153201,153207,153218,153222,153226,153238],{"__ignoreMap":42},[129,151802,151803,151805],{"class":131,"line":132},[129,151804,30393],{"class":135},[129,151806,147092],{"class":139},[129,151808,151809,151811,151813,151815],{"class":131,"line":51},[129,151810,30738],{"class":135},[129,151812,108312],{"class":139},[129,151814,30393],{"class":135},[129,151816,108317],{"class":139},[129,151818,151819],{"class":131,"line":1194},[129,151820,2414],{"emptyLinePlaceholder":56},[129,151822,151823,151826,151828,151830,151833],{"class":131,"line":1209},[129,151824,151825],{"class":188},"DATA_FILE",[129,151827,13579],{"class":135},[129,151829,108546],{"class":139},[129,151831,151832],{"class":244},"\"students.json\"",[129,151834,146],{"class":139},[129,151836,151837],{"class":131,"line":1215},[129,151838,2414],{"emptyLinePlaceholder":56},[129,151840,151841],{"class":131,"line":1229},[129,151842,2414],{"emptyLinePlaceholder":56},[129,151844,151845,151847,151850],{"class":131,"line":1235},[129,151846,31948],{"class":135},[129,151848,151849],{"class":1977}," load_students",[129,151851,31954],{"class":139},[129,151853,151854,151856,151858,151861],{"class":131,"line":1326},[129,151855,3115],{"class":135},[129,151857,38931],{"class":135},[129,151859,151860],{"class":188}," DATA_FILE",[129,151862,151863],{"class":139},".exists():\n",[129,151865,151866,151868],{"class":131,"line":1332},[129,151867,14767],{"class":135},[129,151869,51839],{"class":139},[129,151871,151872],{"class":131,"line":1344},[129,151873,2414],{"emptyLinePlaceholder":56},[129,151875,151876,151878],{"class":131,"line":1626},[129,151877,125785],{"class":135},[129,151879,3753],{"class":139},[129,151881,151882,151885,151887,151889,151891,151893,151895,151897,151899,151901,151903,151905,151907,151909],{"class":131,"line":1631},[129,151883,151884],{"class":135},"        with",[129,151886,146792],{"class":188},[129,151888,140],{"class":139},[129,151890,151825],{"class":188},[129,151892,12450],{"class":139},[129,151894,146802],{"class":244},[129,151896,12450],{"class":139},[129,151898,146807],{"class":5231},[129,151900,185],{"class":135},[129,151902,146812],{"class":244},[129,151904,13729],{"class":139},[129,151906,31384],{"class":135},[129,151908,148154],{"class":5231},[129,151910,3753],{"class":139},[129,151912,151913,151915,151917,151919],{"class":131,"line":1637},[129,151914,15747],{"class":135},[129,151916,148165],{"class":139},[129,151918,45355],{"class":5231},[129,151920,146],{"class":139},[129,151922,151923,151925],{"class":131,"line":1642},[129,151924,125813],{"class":135},[129,151926,151927],{"class":139}," json.JSONDecodeError:\n",[129,151929,151930,151932,151934,151937],{"class":131,"line":1656},[129,151931,32452],{"class":188},[129,151933,140],{"class":139},[129,151935,151936],{"class":244},"\"数据文件格式错误，已使用空数据启动\"",[129,151938,146],{"class":139},[129,151940,151941,151943],{"class":131,"line":1661},[129,151942,14767],{"class":135},[129,151944,51839],{"class":139},[129,151946,151947],{"class":131,"line":1667},[129,151948,2414],{"emptyLinePlaceholder":56},[129,151950,151951],{"class":131,"line":1688},[129,151952,2414],{"emptyLinePlaceholder":56},[129,151954,151955,151957,151960],{"class":131,"line":1693},[129,151956,31948],{"class":135},[129,151958,151959],{"class":1977}," save_students",[129,151961,151962],{"class":139},"(students):\n",[129,151964,151965,151967,151969,151971,151973,151975,151978,151980,151982,151984,151986,151988,151990,151992],{"class":131,"line":1707},[129,151966,34179],{"class":135},[129,151968,146792],{"class":188},[129,151970,140],{"class":139},[129,151972,151825],{"class":188},[129,151974,12450],{"class":139},[129,151976,151977],{"class":244},"\"w\"",[129,151979,12450],{"class":139},[129,151981,146807],{"class":5231},[129,151983,185],{"class":135},[129,151985,146812],{"class":244},[129,151987,13729],{"class":139},[129,151989,31384],{"class":135},[129,151991,148154],{"class":5231},[129,151993,3753],{"class":139},[129,151995,151996,151999,152001,152003,152005,152007,152009,152011,152014,152016,152018],{"class":131,"line":1712},[129,151997,151998],{"class":139},"        json.dump(students, ",[129,152000,45355],{"class":5231},[129,152002,12450],{"class":139},[129,152004,147138],{"class":5231},[129,152006,185],{"class":135},[129,152008,33988],{"class":188},[129,152010,12450],{"class":139},[129,152012,152013],{"class":5231},"indent",[129,152015,185],{"class":135},[129,152017,217],{"class":188},[129,152019,146],{"class":139},[129,152021,152022],{"class":131,"line":1741},[129,152023,2414],{"emptyLinePlaceholder":56},[129,152025,152026],{"class":131,"line":1746},[129,152027,2414],{"emptyLinePlaceholder":56},[129,152029,152030,152032,152035],{"class":131,"line":1763},[129,152031,31948],{"class":135},[129,152033,152034],{"class":1977}," show_menu",[129,152036,31954],{"class":139},[129,152038,152039,152041,152043,152046],{"class":131,"line":1768},[129,152040,31300],{"class":188},[129,152042,140],{"class":139},[129,152044,152045],{"class":244},"\"====== 学生管理系统 ======\"",[129,152047,146],{"class":139},[129,152049,152050,152052,152054,152057],{"class":131,"line":1773},[129,152051,31300],{"class":188},[129,152053,140],{"class":139},[129,152055,152056],{"class":244},"\"1. 添加学生\"",[129,152058,146],{"class":139},[129,152060,152061,152063,152065,152068],{"class":131,"line":1778},[129,152062,31300],{"class":188},[129,152064,140],{"class":139},[129,152066,152067],{"class":244},"\"2. 删除学生\"",[129,152069,146],{"class":139},[129,152071,152072,152074,152076,152079],{"class":131,"line":1792},[129,152073,31300],{"class":188},[129,152075,140],{"class":139},[129,152077,152078],{"class":244},"\"3. 修改学生\"",[129,152080,146],{"class":139},[129,152082,152083,152085,152087,152090],{"class":131,"line":1797},[129,152084,31300],{"class":188},[129,152086,140],{"class":139},[129,152088,152089],{"class":244},"\"4. 查询学生\"",[129,152091,146],{"class":139},[129,152093,152094,152096,152098,152101],{"class":131,"line":2591},[129,152095,31300],{"class":188},[129,152097,140],{"class":139},[129,152099,152100],{"class":244},"\"5. 显示所有学生\"",[129,152102,146],{"class":139},[129,152104,152105,152107,152109,152112],{"class":131,"line":2605},[129,152106,31300],{"class":188},[129,152108,140],{"class":139},[129,152110,152111],{"class":244},"\"0. 退出系统\"",[129,152113,146],{"class":139},[129,152115,152116],{"class":131,"line":2613},[129,152117,2414],{"emptyLinePlaceholder":56},[129,152119,152120],{"class":131,"line":2618},[129,152121,2414],{"emptyLinePlaceholder":56},[129,152123,152124,152126,152129],{"class":131,"line":2624},[129,152125,31948],{"class":135},[129,152127,152128],{"class":1977}," find_student",[129,152130,152131],{"class":139},"(students, student_id):\n",[129,152133,152134,152136,152139,152141],{"class":131,"line":2630},[129,152135,3215],{"class":135},[129,152137,152138],{"class":139}," student ",[129,152140,26044],{"class":135},[129,152142,152143],{"class":139}," students:\n",[129,152145,152146,152148,152151,152153,152155,152157],{"class":131,"line":2635},[129,152147,2511],{"class":135},[129,152149,152150],{"class":139}," student[",[129,152152,151448],{"class":244},[129,152154,4457],{"class":139},[129,152156,2963],{"class":135},[129,152158,152159],{"class":139}," student_id:\n",[129,152161,152162,152164],{"class":131,"line":7963},[129,152163,15747],{"class":135},[129,152165,152166],{"class":139}," student\n",[129,152168,152169,152171],{"class":131,"line":7987},[129,152170,4104],{"class":135},[129,152172,152173],{"class":188}," None\n",[129,152175,152176],{"class":131,"line":7992},[129,152177,2414],{"emptyLinePlaceholder":56},[129,152179,152180],{"class":131,"line":7998},[129,152181,2414],{"emptyLinePlaceholder":56},[129,152183,152184,152186,152189],{"class":131,"line":8025},[129,152185,31948],{"class":135},[129,152187,152188],{"class":1977}," input_int",[129,152190,152191],{"class":139},"(prompt):\n",[129,152193,152194,152196,152198],{"class":131,"line":8030},[129,152195,2265],{"class":135},[129,152197,95293],{"class":188},[129,152199,3753],{"class":139},[129,152201,152202,152205],{"class":131,"line":8036},[129,152203,152204],{"class":135},"        try",[129,152206,3753],{"class":139},[129,152208,152209,152211,152213,152215,152217],{"class":131,"line":8048},[129,152210,15747],{"class":135},[129,152212,2396],{"class":188},[129,152214,140],{"class":139},[129,152216,53822],{"class":188},[129,152218,152219],{"class":139},"(prompt))\n",[129,152221,152222,152225,152228],{"class":131,"line":8060},[129,152223,152224],{"class":135},"        except",[129,152226,152227],{"class":188}," ValueError",[129,152229,3753],{"class":139},[129,152231,152232,152234,152236,152239],{"class":131,"line":8072},[129,152233,34651],{"class":188},[129,152235,140],{"class":139},[129,152237,152238],{"class":244},"\"请输入整数\"",[129,152240,146],{"class":139},[129,152242,152243],{"class":131,"line":9731},[129,152244,2414],{"emptyLinePlaceholder":56},[129,152246,152247],{"class":131,"line":9756},[129,152248,2414],{"emptyLinePlaceholder":56},[129,152250,152251,152253,152256],{"class":131,"line":9779},[129,152252,31948],{"class":135},[129,152254,152255],{"class":1977}," input_float",[129,152257,152191],{"class":139},[129,152259,152260,152262,152264],{"class":131,"line":9803},[129,152261,2265],{"class":135},[129,152263,95293],{"class":188},[129,152265,3753],{"class":139},[129,152267,152268,152270],{"class":131,"line":9808},[129,152269,152204],{"class":135},[129,152271,3753],{"class":139},[129,152273,152274,152276,152278,152280,152282],{"class":131,"line":9813},[129,152275,15747],{"class":135},[129,152277,109798],{"class":188},[129,152279,140],{"class":139},[129,152281,53822],{"class":188},[129,152283,152219],{"class":139},[129,152285,152286,152288,152290],{"class":131,"line":9818},[129,152287,152224],{"class":135},[129,152289,152227],{"class":188},[129,152291,3753],{"class":139},[129,152293,152294,152296,152298,152301],{"class":131,"line":9827},[129,152295,34651],{"class":188},[129,152297,140],{"class":139},[129,152299,152300],{"class":244},"\"请输入数字\"",[129,152302,146],{"class":139},[129,152304,152305],{"class":131,"line":9832},[129,152306,2414],{"emptyLinePlaceholder":56},[129,152308,152309],{"class":131,"line":9838},[129,152310,2414],{"emptyLinePlaceholder":56},[129,152312,152313,152315,152318],{"class":131,"line":9859},[129,152314,31948],{"class":135},[129,152316,152317],{"class":1977}," add_student",[129,152319,151962],{"class":139},[129,152321,152322,152325,152327,152329,152331,152334],{"class":131,"line":9865},[129,152323,152324],{"class":139},"    student_id ",[129,152326,185],{"class":135},[129,152328,60606],{"class":188},[129,152330,140],{"class":139},[129,152332,152333],{"class":244},"\"请输入学号:\"",[129,152335,146],{"class":139},[129,152337,152338],{"class":131,"line":9879},[129,152339,2414],{"emptyLinePlaceholder":56},[129,152341,152342,152344],{"class":131,"line":9885},[129,152343,3115],{"class":135},[129,152345,152346],{"class":139}," find_student(students, student_id):\n",[129,152348,152349,152351,152353,152356],{"class":131,"line":9912},[129,152350,32452],{"class":188},[129,152352,140],{"class":139},[129,152354,152355],{"class":244},"\"学号已存在\"",[129,152357,146],{"class":139},[129,152359,152360],{"class":131,"line":9921},[129,152361,152362],{"class":135},"        return\n",[129,152364,152365],{"class":131,"line":9927},[129,152366,2414],{"emptyLinePlaceholder":56},[129,152368,152369,152372,152374,152376,152378,152381],{"class":131,"line":9935},[129,152370,152371],{"class":139},"    name ",[129,152373,185],{"class":135},[129,152375,60606],{"class":188},[129,152377,140],{"class":139},[129,152379,152380],{"class":244},"\"请输入姓名:\"",[129,152382,146],{"class":139},[129,152384,152385,152388,152390,152393,152396],{"class":131,"line":9940},[129,152386,152387],{"class":139},"    age ",[129,152389,185],{"class":135},[129,152391,152392],{"class":139}," input_int(",[129,152394,152395],{"class":244},"\"请输入年龄:\"",[129,152397,146],{"class":139},[129,152399,152400,152403,152405,152408,152411],{"class":131,"line":16619},[129,152401,152402],{"class":139},"    score ",[129,152404,185],{"class":135},[129,152406,152407],{"class":139}," input_float(",[129,152409,152410],{"class":244},"\"请输入成绩:\"",[129,152412,146],{"class":139},[129,152414,152415],{"class":131,"line":16625},[129,152416,2414],{"emptyLinePlaceholder":56},[129,152418,152419],{"class":131,"line":16648},[129,152420,152421],{"class":139},"    students.append({\n",[129,152423,152424,152427],{"class":131,"line":16654},[129,152425,152426],{"class":244},"        \"student_id\"",[129,152428,152429],{"class":139},": student_id,\n",[129,152431,152432,152435],{"class":131,"line":16677},[129,152433,152434],{"class":244},"        \"name\"",[129,152436,152437],{"class":139},": name,\n",[129,152439,152440,152443],{"class":131,"line":16691},[129,152441,152442],{"class":244},"        \"age\"",[129,152444,152445],{"class":139},": age,\n",[129,152447,152448,152451],{"class":131,"line":16711},[129,152449,152450],{"class":244},"        \"score\"",[129,152452,152453],{"class":139},": score,\n",[129,152455,152456],{"class":131,"line":16717},[129,152457,33462],{"class":139},[129,152459,152460],{"class":131,"line":16728},[129,152461,152462],{"class":139},"    save_students(students)\n",[129,152464,152465,152467,152469,152472],{"class":131,"line":16751},[129,152466,31300],{"class":188},[129,152468,140],{"class":139},[129,152470,152471],{"class":244},"\"添加成功\"",[129,152473,146],{"class":139},[129,152475,152476],{"class":131,"line":16773},[129,152477,2414],{"emptyLinePlaceholder":56},[129,152479,152480],{"class":131,"line":16778},[129,152481,2414],{"emptyLinePlaceholder":56},[129,152483,152484,152486,152489],{"class":131,"line":16784},[129,152485,31948],{"class":135},[129,152487,152488],{"class":1977}," delete_student",[129,152490,151962],{"class":139},[129,152492,152493,152495,152497,152499,152501,152504],{"class":131,"line":16798},[129,152494,152324],{"class":139},[129,152496,185],{"class":135},[129,152498,60606],{"class":188},[129,152500,140],{"class":139},[129,152502,152503],{"class":244},"\"请输入要删除的学号:\"",[129,152505,146],{"class":139},[129,152507,152508,152511,152513],{"class":131,"line":16811},[129,152509,152510],{"class":139},"    student ",[129,152512,185],{"class":135},[129,152514,152515],{"class":139}," find_student(students, student_id)\n",[129,152517,152518],{"class":131,"line":16816},[129,152519,2414],{"emptyLinePlaceholder":56},[129,152521,152522,152524,152526,152528,152530],{"class":131,"line":16830},[129,152523,3115],{"class":135},[129,152525,152138],{"class":139},[129,152527,38928],{"class":135},[129,152529,38934],{"class":188},[129,152531,3753],{"class":139},[129,152533,152534,152536,152538,152541],{"class":131,"line":16835},[129,152535,32452],{"class":188},[129,152537,140],{"class":139},[129,152539,152540],{"class":244},"\"学生不存在\"",[129,152542,146],{"class":139},[129,152544,152545],{"class":131,"line":16841},[129,152546,152362],{"class":135},[129,152548,152549],{"class":131,"line":16846},[129,152550,2414],{"emptyLinePlaceholder":56},[129,152552,152553],{"class":131,"line":16860},[129,152554,152555],{"class":139},"    students.remove(student)\n",[129,152557,152558],{"class":131,"line":16865},[129,152559,152462],{"class":139},[129,152561,152562,152564,152566,152569],{"class":131,"line":16870},[129,152563,31300],{"class":188},[129,152565,140],{"class":139},[129,152567,152568],{"class":244},"\"删除成功\"",[129,152570,146],{"class":139},[129,152572,152573],{"class":131,"line":16884},[129,152574,2414],{"emptyLinePlaceholder":56},[129,152576,152577],{"class":131,"line":16896},[129,152578,2414],{"emptyLinePlaceholder":56},[129,152580,152581,152583,152586],{"class":131,"line":16901},[129,152582,31948],{"class":135},[129,152584,152585],{"class":1977}," update_student",[129,152587,151962],{"class":139},[129,152589,152590,152592,152594,152596,152598,152601],{"class":131,"line":16914},[129,152591,152324],{"class":139},[129,152593,185],{"class":135},[129,152595,60606],{"class":188},[129,152597,140],{"class":139},[129,152599,152600],{"class":244},"\"请输入要修改的学号:\"",[129,152602,146],{"class":139},[129,152604,152605,152607,152609],{"class":131,"line":16919},[129,152606,152510],{"class":139},[129,152608,185],{"class":135},[129,152610,152515],{"class":139},[129,152612,152613],{"class":131,"line":16924},[129,152614,2414],{"emptyLinePlaceholder":56},[129,152616,152617,152619,152621,152623,152625],{"class":131,"line":16929},[129,152618,3115],{"class":135},[129,152620,152138],{"class":139},[129,152622,38928],{"class":135},[129,152624,38934],{"class":188},[129,152626,3753],{"class":139},[129,152628,152629,152631,152633,152635],{"class":131,"line":16942},[129,152630,32452],{"class":188},[129,152632,140],{"class":139},[129,152634,152540],{"class":244},[129,152636,146],{"class":139},[129,152638,152639],{"class":131,"line":16947},[129,152640,152362],{"class":135},[129,152642,152643],{"class":131,"line":32634},[129,152644,2414],{"emptyLinePlaceholder":56},[129,152646,152647,152649,152651,152653,152655,152658],{"class":131,"line":32640},[129,152648,152371],{"class":139},[129,152650,185],{"class":135},[129,152652,60606],{"class":188},[129,152654,140],{"class":139},[129,152656,152657],{"class":244},"\"请输入新姓名:\"",[129,152659,146],{"class":139},[129,152661,152662,152664,152666,152668,152671],{"class":131,"line":32646},[129,152663,152387],{"class":139},[129,152665,185],{"class":135},[129,152667,152392],{"class":139},[129,152669,152670],{"class":244},"\"请输入新年龄:\"",[129,152672,146],{"class":139},[129,152674,152675,152677,152679,152681,152684],{"class":131,"line":32652},[129,152676,152402],{"class":139},[129,152678,185],{"class":135},[129,152680,152407],{"class":139},[129,152682,152683],{"class":244},"\"请输入新成绩:\"",[129,152685,146],{"class":139},[129,152687,152688],{"class":131,"line":32658},[129,152689,2414],{"emptyLinePlaceholder":56},[129,152691,152692,152695,152697,152699,152701],{"class":131,"line":32669},[129,152693,152694],{"class":139},"    student[",[129,152696,62680],{"class":244},[129,152698,4457],{"class":139},[129,152700,185],{"class":135},[129,152702,149796],{"class":139},[129,152704,152705,152707,152709,152711,152713],{"class":131,"line":32675},[129,152706,152694],{"class":139},[129,152708,69125],{"class":244},[129,152710,4457],{"class":139},[129,152712,185],{"class":135},[129,152714,149808],{"class":139},[129,152716,152717,152719,152721,152723,152725],{"class":131,"line":32695},[129,152718,152694],{"class":139},[129,152720,151473],{"class":244},[129,152722,4457],{"class":139},[129,152724,185],{"class":135},[129,152726,1593],{"class":139},[129,152728,152729],{"class":131,"line":32701},[129,152730,2414],{"emptyLinePlaceholder":56},[129,152732,152733],{"class":131,"line":32712},[129,152734,152462],{"class":139},[129,152736,152737,152739,152741,152744],{"class":131,"line":32718},[129,152738,31300],{"class":188},[129,152740,140],{"class":139},[129,152742,152743],{"class":244},"\"修改成功\"",[129,152745,146],{"class":139},[129,152747,152748],{"class":131,"line":32724},[129,152749,2414],{"emptyLinePlaceholder":56},[129,152751,152752],{"class":131,"line":32730},[129,152753,2414],{"emptyLinePlaceholder":56},[129,152755,152756,152758,152761],{"class":131,"line":32736},[129,152757,31948],{"class":135},[129,152759,152760],{"class":1977}," query_student",[129,152762,151962],{"class":139},[129,152764,152765,152767,152769,152771,152773,152776],{"class":131,"line":32742},[129,152766,152324],{"class":139},[129,152768,185],{"class":135},[129,152770,60606],{"class":188},[129,152772,140],{"class":139},[129,152774,152775],{"class":244},"\"请输入要查询的学号:\"",[129,152777,146],{"class":139},[129,152779,152780,152782,152784],{"class":131,"line":32748},[129,152781,152510],{"class":139},[129,152783,185],{"class":135},[129,152785,152515],{"class":139},[129,152787,152788],{"class":131,"line":32754},[129,152789,2414],{"emptyLinePlaceholder":56},[129,152791,152792,152794,152796,152798,152800],{"class":131,"line":32774},[129,152793,3115],{"class":135},[129,152795,152138],{"class":139},[129,152797,38928],{"class":135},[129,152799,38934],{"class":188},[129,152801,3753],{"class":139},[129,152803,152804,152806,152808,152810],{"class":131,"line":32780},[129,152805,32452],{"class":188},[129,152807,140],{"class":139},[129,152809,152540],{"class":244},[129,152811,146],{"class":139},[129,152813,152814],{"class":131,"line":32796},[129,152815,152362],{"class":135},[129,152817,152818],{"class":131,"line":32802},[129,152819,2414],{"emptyLinePlaceholder":56},[129,152821,152822],{"class":131,"line":32816},[129,152823,152824],{"class":139},"    print_student(student)\n",[129,152826,152827],{"class":131,"line":32822},[129,152828,2414],{"emptyLinePlaceholder":56},[129,152830,152831],{"class":131,"line":32837},[129,152832,2414],{"emptyLinePlaceholder":56},[129,152834,152835,152837,152840],{"class":131,"line":32843},[129,152836,31948],{"class":135},[129,152838,152839],{"class":1977}," print_student",[129,152841,152842],{"class":139},"(student):\n",[129,152844,152845,152847],{"class":131,"line":32852},[129,152846,31300],{"class":188},[129,152848,151440],{"class":139},[129,152850,152851,152854,152856,152858,152861,152864,152866,152869],{"class":131,"line":32858},[129,152852,152853],{"class":135},"        f",[129,152855,390],{"class":244},[129,152857,1035],{"class":188},[129,152859,152860],{"class":139},"student[",[129,152862,152863],{"class":244},"'student_id'",[129,152865,1079],{"class":139},[129,152867,152868],{"class":188},"}\\t",[129,152870,25134],{"class":244},[129,152872,152873,152875,152877,152879,152881,152884,152886,152888],{"class":131,"line":32867},[129,152874,152853],{"class":135},[129,152876,390],{"class":244},[129,152878,1035],{"class":188},[129,152880,152860],{"class":139},[129,152882,152883],{"class":244},"'name'",[129,152885,1079],{"class":139},[129,152887,152868],{"class":188},[129,152889,25134],{"class":244},[129,152891,152892,152894,152896,152898,152900,152903,152905,152907],{"class":131,"line":32873},[129,152893,152853],{"class":135},[129,152895,390],{"class":244},[129,152897,1035],{"class":188},[129,152899,152860],{"class":139},[129,152901,152902],{"class":244},"'age'",[129,152904,1079],{"class":139},[129,152906,152868],{"class":188},[129,152908,25134],{"class":244},[129,152910,152911,152913,152915,152917,152919,152922,152924,152926],{"class":131,"line":32879},[129,152912,152853],{"class":135},[129,152914,390],{"class":244},[129,152916,1035],{"class":188},[129,152918,152860],{"class":139},[129,152920,152921],{"class":244},"'score'",[129,152923,1079],{"class":139},[129,152925,1085],{"class":188},[129,152927,25134],{"class":244},[129,152929,152930],{"class":131,"line":32888},[129,152931,152932],{"class":139},"    )\n",[129,152934,152935],{"class":131,"line":32894},[129,152936,2414],{"emptyLinePlaceholder":56},[129,152938,152939],{"class":131,"line":32905},[129,152940,2414],{"emptyLinePlaceholder":56},[129,152942,152943,152945,152948],{"class":131,"line":32911},[129,152944,31948],{"class":135},[129,152946,152947],{"class":1977}," show_all_students",[129,152949,151962],{"class":139},[129,152951,152952,152954,152956],{"class":131,"line":32930},[129,152953,3115],{"class":135},[129,152955,38931],{"class":135},[129,152957,152143],{"class":139},[129,152959,152960,152962,152964,152967],{"class":131,"line":32936},[129,152961,32452],{"class":188},[129,152963,140],{"class":139},[129,152965,152966],{"class":244},"\"暂无学生\"",[129,152968,146],{"class":139},[129,152970,152971],{"class":131,"line":32947},[129,152972,152362],{"class":135},[129,152974,152975],{"class":131,"line":32953},[129,152976,2414],{"emptyLinePlaceholder":56},[129,152978,152979,152981,152983,152986,152988,152991,152993,152996,152998,153001],{"class":131,"line":32973},[129,152980,31300],{"class":188},[129,152982,140],{"class":139},[129,152984,152985],{"class":244},"\"学号",[129,152987,1245],{"class":188},[129,152989,152990],{"class":244},"姓名",[129,152992,1245],{"class":188},[129,152994,152995],{"class":244},"年龄",[129,152997,1245],{"class":188},[129,152999,153000],{"class":244},"成绩\"",[129,153002,146],{"class":139},[129,153004,153005,153007,153009,153011],{"class":131,"line":32989},[129,153006,3215],{"class":135},[129,153008,152138],{"class":139},[129,153010,26044],{"class":135},[129,153012,152143],{"class":139},[129,153014,153015],{"class":131,"line":32995},[129,153016,153017],{"class":139},"        print_student(student)\n",[129,153019,153020],{"class":131,"line":33009},[129,153021,2414],{"emptyLinePlaceholder":56},[129,153023,153024],{"class":131,"line":33015},[129,153025,2414],{"emptyLinePlaceholder":56},[129,153027,153028,153030,153032],{"class":131,"line":33021},[129,153029,31948],{"class":135},[129,153031,1987],{"class":1977},[129,153033,31954],{"class":139},[129,153035,153036,153039,153041],{"class":131,"line":33032},[129,153037,153038],{"class":139},"    students ",[129,153040,185],{"class":135},[129,153042,153043],{"class":139}," load_students()\n",[129,153045,153046],{"class":131,"line":33038},[129,153047,2414],{"emptyLinePlaceholder":56},[129,153049,153050,153052,153054],{"class":131,"line":33044},[129,153051,2265],{"class":135},[129,153053,95293],{"class":188},[129,153055,3753],{"class":139},[129,153057,153058],{"class":131,"line":33054},[129,153059,153060],{"class":139},"        show_menu()\n",[129,153062,153063,153066,153068,153070,153072,153075],{"class":131,"line":33060},[129,153064,153065],{"class":139},"        choice ",[129,153067,185],{"class":135},[129,153069,60606],{"class":188},[129,153071,140],{"class":139},[129,153073,153074],{"class":244},"\"请输入操作:\"",[129,153076,146],{"class":139},[129,153078,153079],{"class":131,"line":33071},[129,153080,2414],{"emptyLinePlaceholder":56},[129,153082,153083,153085,153088,153090,153093],{"class":131,"line":33077},[129,153084,2511],{"class":135},[129,153086,153087],{"class":139}," choice ",[129,153089,2963],{"class":135},[129,153091,153092],{"class":244}," \"1\"",[129,153094,3753],{"class":139},[129,153096,153097],{"class":131,"line":33087},[129,153098,153099],{"class":139},"            add_student(students)\n",[129,153101,153102,153105,153107,153109,153112],{"class":131,"line":33092},[129,153103,153104],{"class":135},"        elif",[129,153106,153087],{"class":139},[129,153108,2963],{"class":135},[129,153110,153111],{"class":244}," \"2\"",[129,153113,3753],{"class":139},[129,153115,153116],{"class":131,"line":33098},[129,153117,153118],{"class":139},"            delete_student(students)\n",[129,153120,153121,153123,153125,153127,153130],{"class":131,"line":33147},[129,153122,153104],{"class":135},[129,153124,153087],{"class":139},[129,153126,2963],{"class":135},[129,153128,153129],{"class":244}," \"3\"",[129,153131,3753],{"class":139},[129,153133,153134],{"class":131,"line":33194},[129,153135,153136],{"class":139},"            update_student(students)\n",[129,153138,153139,153141,153143,153145,153148],{"class":131,"line":33199},[129,153140,153104],{"class":135},[129,153142,153087],{"class":139},[129,153144,2963],{"class":135},[129,153146,153147],{"class":244}," \"4\"",[129,153149,3753],{"class":139},[129,153151,153152],{"class":131,"line":33205},[129,153153,153154],{"class":139},"            query_student(students)\n",[129,153156,153157,153159,153161,153163,153166],{"class":131,"line":33224},[129,153158,153104],{"class":135},[129,153160,153087],{"class":139},[129,153162,2963],{"class":135},[129,153164,153165],{"class":244}," \"5\"",[129,153167,3753],{"class":139},[129,153169,153170],{"class":131,"line":33230},[129,153171,153172],{"class":139},"            show_all_students(students)\n",[129,153174,153175,153177,153179,153181,153184],{"class":131,"line":33250},[129,153176,153104],{"class":135},[129,153178,153087],{"class":139},[129,153180,2963],{"class":135},[129,153182,153183],{"class":244}," \"0\"",[129,153185,3753],{"class":139},[129,153187,153188,153190,153192,153195],{"class":131,"line":33256},[129,153189,34651],{"class":188},[129,153191,140],{"class":139},[129,153193,153194],{"class":244},"\"退出系统\"",[129,153196,146],{"class":139},[129,153198,153199],{"class":131,"line":33262},[129,153200,115099],{"class":135},[129,153202,153203,153205],{"class":131,"line":33272},[129,153204,2548],{"class":135},[129,153206,3753],{"class":139},[129,153208,153209,153211,153213,153216],{"class":131,"line":33277},[129,153210,34651],{"class":188},[129,153212,140],{"class":139},[129,153214,153215],{"class":244},"\"输入错误\"",[129,153217,146],{"class":139},[129,153219,153220],{"class":131,"line":33283},[129,153221,2414],{"emptyLinePlaceholder":56},[129,153223,153224],{"class":131,"line":33299},[129,153225,2414],{"emptyLinePlaceholder":56},[129,153227,153228,153230,153232,153234,153236],{"class":131,"line":33344},[129,153229,1545],{"class":135},[129,153231,31221],{"class":188},[129,153233,101560],{"class":135},[129,153235,101563],{"class":244},[129,153237,3753],{"class":139},[129,153239,153240],{"class":131,"line":33350},[129,153241,101570],{"class":139},[14,153243,153244],{},"这个项目串联了：",[83,153246,153247,153250,153253,153256,153259,153261],{},[86,153248,153249],{},"菜单循环。",[86,153251,153252],{},"函数封装。",[86,153254,153255],{},"列表字典。",[86,153257,153258],{},"JSON 读写。",[86,153260,151728],{},[86,153262,153263,28386],{},[126,153264,153265],{},"if __name__ == \"__main__\"",[71,153267,153269],{"id":153268},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153271,153272],{},"可以进一步拆成两个类：",[83,153274,153275,153280],{},[86,153276,153277,153279],{},[126,153278,149569],{},"：表示单个学生。",[86,153281,153282,153284],{},[126,153283,151595],{},"：负责学生增删改查和文件保存。",[14,153286,153287],{},"示意代码：",[120,153289,153291],{"className":30379,"code":153290,"language":30381,"meta":42,"style":42},"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",[126,153292,153293,153303,153307,153311,153315,153323,153330,153336,153342,153348,153352,153360,153366,153376,153386,153396,153406,153410,153414,153420,153428,153436,153444,153452,153460,153468],{"__ignoreMap":42},[129,153294,153295,153297,153299,153301],{"class":131,"line":132},[129,153296,30738],{"class":135},[129,153298,151153],{"class":139},[129,153300,30393],{"class":135},[129,153302,151158],{"class":139},[129,153304,153305],{"class":131,"line":51},[129,153306,2414],{"emptyLinePlaceholder":56},[129,153308,153309],{"class":131,"line":1194},[129,153310,2414],{"emptyLinePlaceholder":56},[129,153312,153313],{"class":131,"line":1209},[129,153314,151171],{"class":1977},[129,153316,153317,153319,153321],{"class":131,"line":1215},[129,153318,14709],{"class":135},[129,153320,7913],{"class":1977},[129,153322,3753],{"class":139},[129,153324,153325,153328],{"class":131,"line":1229},[129,153326,153327],{"class":139},"    student_id: ",[129,153329,151187],{"class":188},[129,153331,153332,153334],{"class":131,"line":1235},[129,153333,151184],{"class":139},[129,153335,151187],{"class":188},[129,153337,153338,153340],{"class":131,"line":1326},[129,153339,151192],{"class":139},[129,153341,151195],{"class":188},[129,153343,153344,153346],{"class":131,"line":1332},[129,153345,151200],{"class":139},[129,153347,151203],{"class":188},[129,153349,153350],{"class":131,"line":1344},[129,153351,2414],{"emptyLinePlaceholder":56},[129,153353,153354,153356,153358],{"class":131,"line":1626},[129,153355,30802],{"class":135},[129,153357,151351],{"class":1977},[129,153359,30808],{"class":139},[129,153361,153362,153364],{"class":131,"line":1631},[129,153363,14767],{"class":135},[129,153365,15587],{"class":139},[129,153367,153368,153370,153372,153374],{"class":131,"line":1637},[129,153369,151364],{"class":244},[129,153371,51438],{"class":139},[129,153373,30824],{"class":188},[129,153375,151371],{"class":139},[129,153377,153378,153380,153382,153384],{"class":131,"line":1642},[129,153379,151376],{"class":244},[129,153381,51438],{"class":139},[129,153383,30824],{"class":188},[129,153385,151383],{"class":139},[129,153387,153388,153390,153392,153394],{"class":131,"line":1656},[129,153389,151388],{"class":244},[129,153391,51438],{"class":139},[129,153393,30824],{"class":188},[129,153395,151395],{"class":139},[129,153397,153398,153400,153402,153404],{"class":131,"line":1661},[129,153399,151400],{"class":244},[129,153401,51438],{"class":139},[129,153403,30824],{"class":188},[129,153405,151407],{"class":139},[129,153407,153408],{"class":131,"line":1667},[129,153409,2543],{"class":139},[129,153411,153412],{"class":131,"line":1688},[129,153413,2414],{"emptyLinePlaceholder":56},[129,153415,153416,153418],{"class":131,"line":1693},[129,153417,151015],{"class":1977},[129,153419,151018],{"class":188},[129,153421,153422,153424,153426],{"class":131,"line":1707},[129,153423,30802],{"class":135},[129,153425,151428],{"class":1977},[129,153427,151431],{"class":139},[129,153429,153430,153432,153434],{"class":131,"line":1712},[129,153431,14767],{"class":135},[129,153433,151035],{"class":188},[129,153435,151440],{"class":139},[129,153437,153438,153440,153442],{"class":131,"line":1741},[129,153439,151445],{"class":139},[129,153441,151448],{"class":244},[129,153443,87837],{"class":139},[129,153445,153446,153448,153450],{"class":131,"line":1746},[129,153447,151445],{"class":139},[129,153449,62680],{"class":244},[129,153451,87837],{"class":139},[129,153453,153454,153456,153458],{"class":131,"line":1763},[129,153455,151445],{"class":139},[129,153457,69125],{"class":244},[129,153459,87837],{"class":139},[129,153461,153462,153464,153466],{"class":131,"line":1768},[129,153463,151445],{"class":139},[129,153465,151473],{"class":244},[129,153467,87837],{"class":139},[129,153469,153470],{"class":131,"line":1773},[129,153471,38127],{"class":139},[14,153473,153474],{},"管理器示意：",[120,153476,153478],{"className":30379,"code":153477,"language":30381,"meta":42,"style":42},"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",[126,153479,153480,153489,153497,153508,153512,153522,153535,153546,153553,153559,153563,153572,153581,153587,153594],{"__ignoreMap":42},[129,153481,153482,153484,153487],{"class":131,"line":132},[129,153483,14709],{"class":135},[129,153485,153486],{"class":1977}," StudentManager",[129,153488,3753],{"class":139},[129,153490,153491,153493,153495],{"class":131,"line":51},[129,153492,30802],{"class":135},[129,153494,30805],{"class":188},[129,153496,30808],{"class":139},[129,153498,153499,153501,153504,153506],{"class":131,"line":1194},[129,153500,30846],{"class":188},[129,153502,153503],{"class":139},".students ",[129,153505,185],{"class":135},[129,153507,51839],{"class":139},[129,153509,153510],{"class":131,"line":1209},[129,153511,2414],{"emptyLinePlaceholder":56},[129,153513,153514,153516,153519],{"class":131,"line":1215},[129,153515,30802],{"class":135},[129,153517,153518],{"class":1977}," find_by_id",[129,153520,153521],{"class":139},"(self, student_id):\n",[129,153523,153524,153526,153528,153530,153532],{"class":131,"line":1229},[129,153525,3417],{"class":135},[129,153527,152138],{"class":139},[129,153529,26044],{"class":135},[129,153531,38874],{"class":188},[129,153533,153534],{"class":139},".students:\n",[129,153536,153537,153539,153542,153544],{"class":131,"line":1235},[129,153538,4656],{"class":135},[129,153540,153541],{"class":139}," student.student_id ",[129,153543,2963],{"class":135},[129,153545,152159],{"class":139},[129,153547,153548,153551],{"class":131,"line":1326},[129,153549,153550],{"class":135},"                return",[129,153552,152166],{"class":139},[129,153554,153555,153557],{"class":131,"line":1332},[129,153556,14767],{"class":135},[129,153558,152173],{"class":188},[129,153560,153561],{"class":131,"line":1344},[129,153562,2414],{"emptyLinePlaceholder":56},[129,153564,153565,153567,153569],{"class":131,"line":1626},[129,153566,30802],{"class":135},[129,153568,5224],{"class":1977},[129,153570,153571],{"class":139},"(self, student):\n",[129,153573,153574,153576,153578],{"class":131,"line":1631},[129,153575,2511],{"class":135},[129,153577,38874],{"class":188},[129,153579,153580],{"class":139},".find_by_id(student.student_id):\n",[129,153582,153583,153585],{"class":131,"line":1637},[129,153584,15747],{"class":135},[129,153586,125808],{"class":188},[129,153588,153589,153591],{"class":131,"line":1642},[129,153590,30846],{"class":188},[129,153592,153593],{"class":139},".students.append(student)\n",[129,153595,153596,153598],{"class":131,"line":1656},[129,153597,14767],{"class":135},[129,153599,153600],{"class":188}," True\n",[14,153602,153603],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[71,153605,153607],{"id":153606},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[100,153609,153611],{"id":153610},"_1251-数据结构","12.5.1 数据结构",[120,153613,153615],{"className":30379,"code":153614,"language":30381,"meta":42,"style":42},"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",[126,153616,153617,153625,153656,153686,153715,153744],{"__ignoreMap":42},[129,153618,153619,153621,153623],{"class":131,"line":132},[129,153620,148466],{"class":139},[129,153622,185],{"class":135},[129,153624,55448],{"class":139},[129,153626,153627,153629,153631,153633,153635,153637,153640,153642,153645,153647,153649,153651,153654],{"class":131,"line":51},[129,153628,148386],{"class":139},[129,153630,147998],{"class":244},[129,153632,51438],{"class":139},[129,153634,148609],{"class":244},[129,153636,12450],{"class":139},[129,153638,153639],{"class":244},"\"category\"",[129,153641,51438],{"class":139},[129,153643,153644],{"class":244},"\"手机\"",[129,153646,12450],{"class":139},[129,153648,84085],{"class":244},[129,153650,51438],{"class":139},[129,153652,153653],{"class":188},"12000",[129,153655,4944],{"class":139},[129,153657,153658,153660,153662,153664,153666,153668,153670,153672,153675,153677,153679,153681,153684],{"class":131,"line":1194},[129,153659,148386],{"class":139},[129,153661,147998],{"class":244},[129,153663,51438],{"class":139},[129,153665,148609],{"class":244},[129,153667,12450],{"class":139},[129,153669,153639],{"class":244},[129,153671,51438],{"class":139},[129,153673,153674],{"class":244},"\"电脑\"",[129,153676,12450],{"class":139},[129,153678,84085],{"class":244},[129,153680,51438],{"class":139},[129,153682,153683],{"class":188},"18000",[129,153685,4944],{"class":139},[129,153687,153688,153690,153692,153694,153696,153698,153700,153702,153704,153706,153708,153710,153713],{"class":131,"line":1209},[129,153689,148386],{"class":139},[129,153691,147998],{"class":244},[129,153693,51438],{"class":139},[129,153695,148630],{"class":244},[129,153697,12450],{"class":139},[129,153699,153639],{"class":244},[129,153701,51438],{"class":139},[129,153703,153644],{"class":244},[129,153705,12450],{"class":139},[129,153707,84085],{"class":244},[129,153709,51438],{"class":139},[129,153711,153712],{"class":188},"15000",[129,153714,4944],{"class":139},[129,153716,153717,153719,153721,153723,153725,153727,153729,153731,153733,153735,153737,153739,153742],{"class":131,"line":1215},[129,153718,148386],{"class":139},[129,153720,147998],{"class":244},[129,153722,51438],{"class":139},[129,153724,148630],{"class":244},[129,153726,12450],{"class":139},[129,153728,153639],{"class":244},[129,153730,51438],{"class":139},[129,153732,153674],{"class":244},[129,153734,12450],{"class":139},[129,153736,84085],{"class":244},[129,153738,51438],{"class":139},[129,153740,153741],{"class":188},"16000",[129,153743,4944],{"class":139},[129,153745,153746],{"class":131,"line":1229},[129,153747,33247],{"class":139},[100,153749,153751],{"id":153750},"_1252-按日期统计","12.5.2 按日期统计",[120,153753,153755],{"className":30379,"code":153754,"language":30381,"meta":42,"style":42},"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",[126,153756,153757,153766,153770,153781,153795,153808,153827,153831],{"__ignoreMap":42},[129,153758,153759,153762,153764],{"class":131,"line":132},[129,153760,153761],{"class":139},"daily_total ",[129,153763,185],{"class":135},[129,153765,87869],{"class":139},[129,153767,153768],{"class":131,"line":51},[129,153769,2414],{"emptyLinePlaceholder":56},[129,153771,153772,153774,153776,153778],{"class":131,"line":1194},[129,153773,3039],{"class":135},[129,153775,148210],{"class":139},[129,153777,26044],{"class":135},[129,153779,153780],{"class":139}," sales:\n",[129,153782,153783,153786,153788,153791,153793],{"class":131,"line":1209},[129,153784,153785],{"class":139},"    date ",[129,153787,185],{"class":135},[129,153789,153790],{"class":139}," item[",[129,153792,147998],{"class":244},[129,153794,33247],{"class":139},[129,153796,153797,153800,153802,153804,153806],{"class":131,"line":1215},[129,153798,153799],{"class":139},"    amount ",[129,153801,185],{"class":135},[129,153803,153790],{"class":139},[129,153805,84085],{"class":244},[129,153807,33247],{"class":139},[129,153809,153810,153813,153815,153818,153820,153822,153824],{"class":131,"line":1229},[129,153811,153812],{"class":139},"    daily_total[date] ",[129,153814,185],{"class":135},[129,153816,153817],{"class":139}," daily_total.get(date, ",[129,153819,331],{"class":188},[129,153821,13729],{"class":139},[129,153823,620],{"class":135},[129,153825,153826],{"class":139}," amount\n",[129,153828,153829],{"class":131,"line":1235},[129,153830,2414],{"emptyLinePlaceholder":56},[129,153832,153833,153835],{"class":131,"line":1326},[129,153834,30416],{"class":188},[129,153836,153837],{"class":139},"(daily_total)\n",[100,153839,153841],{"id":153840},"_1253-按类别统计","12.5.3 按类别统计",[120,153843,153845],{"className":30379,"code":153844,"language":30381,"meta":42,"style":42},"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",[126,153846,153847,153856,153860,153870,153883,153895,153913,153917],{"__ignoreMap":42},[129,153848,153849,153852,153854],{"class":131,"line":132},[129,153850,153851],{"class":139},"category_total ",[129,153853,185],{"class":135},[129,153855,87869],{"class":139},[129,153857,153858],{"class":131,"line":51},[129,153859,2414],{"emptyLinePlaceholder":56},[129,153861,153862,153864,153866,153868],{"class":131,"line":1194},[129,153863,3039],{"class":135},[129,153865,148210],{"class":139},[129,153867,26044],{"class":135},[129,153869,153780],{"class":139},[129,153871,153872,153875,153877,153879,153881],{"class":131,"line":1209},[129,153873,153874],{"class":139},"    category ",[129,153876,185],{"class":135},[129,153878,153790],{"class":139},[129,153880,153639],{"class":244},[129,153882,33247],{"class":139},[129,153884,153885,153887,153889,153891,153893],{"class":131,"line":1215},[129,153886,153799],{"class":139},[129,153888,185],{"class":135},[129,153890,153790],{"class":139},[129,153892,84085],{"class":244},[129,153894,33247],{"class":139},[129,153896,153897,153900,153902,153905,153907,153909,153911],{"class":131,"line":1229},[129,153898,153899],{"class":139},"    category_total[category] ",[129,153901,185],{"class":135},[129,153903,153904],{"class":139}," category_total.get(category, ",[129,153906,331],{"class":188},[129,153908,13729],{"class":139},[129,153910,620],{"class":135},[129,153912,153826],{"class":139},[129,153914,153915],{"class":131,"line":1235},[129,153916,2414],{"emptyLinePlaceholder":56},[129,153918,153919,153921],{"class":131,"line":1326},[129,153920,30416],{"class":188},[129,153922,153923],{"class":139},"(category_total)\n",[100,153925,153927],{"id":153926},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[120,153929,153931],{"className":30379,"code":153930,"language":30381,"meta":42,"style":42},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[126,153932,153933,153958],{"__ignoreMap":42},[129,153934,153935,153938,153940,153942,153945,153948,153951,153954,153956],{"class":131,"line":132},[129,153936,153937],{"class":139},"top_date, top_amount ",[129,153939,185],{"class":135},[129,153941,5966],{"class":188},[129,153943,153944],{"class":139},"(daily_total.items(), ",[129,153946,153947],{"class":5231},"key",[129,153949,153950],{"class":135},"=lambda",[129,153952,153953],{"class":139}," item: item[",[129,153955,357],{"class":188},[129,153957,4671],{"class":139},[129,153959,153960,153962],{"class":131,"line":51},[129,153961,30416],{"class":188},[129,153963,153964],{"class":139},"(top_date, top_amount)\n",[71,153966,153968],{"id":153967},"_126-绘制柱状图","12.6 绘制柱状图",[120,153970,153972],{"className":30379,"code":153971,"language":30381,"meta":42,"style":42},"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",[126,153973,153974,153988,153999,154003,154011,154023,154035,154046,154050,154054,154064,154075,154089,154094,154111,154128,154144,154148],{"__ignoreMap":42},[129,153975,153976,153978,153980,153982,153984,153986],{"class":131,"line":132},[129,153977,30738],{"class":135},[129,153979,147380],{"class":139},[129,153981,30393],{"class":135},[129,153983,147385],{"class":139},[129,153985,31384],{"class":135},[129,153987,147390],{"class":139},[129,153989,153990,153992,153994,153996],{"class":131,"line":51},[129,153991,30738],{"class":135},[129,153993,147239],{"class":139},[129,153995,30393],{"class":135},[129,153997,153998],{"class":139}," Bar\n",[129,154000,154001],{"class":131,"line":1194},[129,154002,2414],{"emptyLinePlaceholder":56},[129,154004,154005,154007,154009],{"class":131,"line":1209},[129,154006,153851],{"class":139},[129,154008,185],{"class":135},[129,154010,15587],{"class":139},[129,154012,154013,154016,154018,154021],{"class":131,"line":1215},[129,154014,154015],{"class":244},"    \"手机\"",[129,154017,51438],{"class":139},[129,154019,154020],{"class":188},"27000",[129,154022,31467],{"class":139},[129,154024,154025,154028,154030,154033],{"class":131,"line":1229},[129,154026,154027],{"class":244},"    \"电脑\"",[129,154029,51438],{"class":139},[129,154031,154032],{"class":188},"34000",[129,154034,31467],{"class":139},[129,154036,154037,154040,154042,154044],{"class":131,"line":1235},[129,154038,154039],{"class":244},"    \"耳机\"",[129,154041,51438],{"class":139},[129,154043,124400],{"class":188},[129,154045,31467],{"class":139},[129,154047,154048],{"class":131,"line":1326},[129,154049,1579],{"class":139},[129,154051,154052],{"class":131,"line":1332},[129,154053,2414],{"emptyLinePlaceholder":56},[129,154055,154056,154059,154061],{"class":131,"line":1344},[129,154057,154058],{"class":139},"bar ",[129,154060,185],{"class":135},[129,154062,154063],{"class":139}," Bar()\n",[129,154065,154066,154069,154072],{"class":131,"line":1626},[129,154067,154068],{"class":139},"bar.add_xaxis(",[129,154070,154071],{"class":188},"list",[129,154073,154074],{"class":139},"(category_total.keys()))\n",[129,154076,154077,154080,154082,154084,154086],{"class":131,"line":1631},[129,154078,154079],{"class":139},"bar.add_yaxis(",[129,154081,147296],{"class":244},[129,154083,12450],{"class":139},[129,154085,154071],{"class":188},[129,154087,154088],{"class":139},"(category_total.values()))\n",[129,154090,154091],{"class":131,"line":1637},[129,154092,154093],{"class":139},"bar.set_global_opts(\n",[129,154095,154096,154098,154100,154102,154104,154106,154109],{"class":131,"line":1642},[129,154097,147474],{"class":5231},[129,154099,185],{"class":135},[129,154101,147479],{"class":139},[129,154103,51408],{"class":5231},[129,154105,185],{"class":135},[129,154107,154108],{"class":244},"\"品类销售额\"",[129,154110,38048],{"class":139},[129,154112,154113,154115,154117,154119,154121,154123,154126],{"class":131,"line":1656},[129,154114,147493],{"class":5231},[129,154116,185],{"class":135},[129,154118,147498],{"class":139},[129,154120,79811],{"class":5231},[129,154122,185],{"class":135},[129,154124,154125],{"class":244},"\"品类\"",[129,154127,38048],{"class":139},[129,154129,154130,154132,154134,154136,154138,154140,154142],{"class":131,"line":1661},[129,154131,147512],{"class":5231},[129,154133,185],{"class":135},[129,154135,147498],{"class":139},[129,154137,79811],{"class":5231},[129,154139,185],{"class":135},[129,154141,147296],{"class":244},[129,154143,38048],{"class":139},[129,154145,154146],{"class":131,"line":1667},[129,154147,146],{"class":139},[129,154149,154150,154153,154156],{"class":131,"line":1688},[129,154151,154152],{"class":139},"bar.render(",[129,154154,154155],{"class":244},"\"category_sales.html\"",[129,154157,146],{"class":139},[71,154159,154161],{"id":154160},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154163,154164],{},"时间线适合展示不同日期、月份、年份的数据变化。",[120,154166,154168],{"className":30379,"code":154167,"language":30381,"meta":42,"style":42},"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",[126,154169,154170,154184,154195,154199,154207,154231,154254,154279,154283,154287,154297,154301,154312,154321,154331,154345,154376,154381,154385],{"__ignoreMap":42},[129,154171,154172,154174,154176,154178,154180,154182],{"class":131,"line":132},[129,154173,30738],{"class":135},[129,154175,147380],{"class":139},[129,154177,30393],{"class":135},[129,154179,147385],{"class":139},[129,154181,31384],{"class":135},[129,154183,147390],{"class":139},[129,154185,154186,154188,154190,154192],{"class":131,"line":51},[129,154187,30738],{"class":135},[129,154189,147239],{"class":139},[129,154191,30393],{"class":135},[129,154193,154194],{"class":139}," Bar, Timeline\n",[129,154196,154197],{"class":131,"line":1194},[129,154198,2414],{"emptyLinePlaceholder":56},[129,154200,154201,154203,154205],{"class":131,"line":1209},[129,154202,101659],{"class":139},[129,154204,185],{"class":135},[129,154206,15587],{"class":139},[129,154208,154209,154212,154215,154217,154219,154221,154223,154225,154227,154229],{"class":131,"line":1215},[129,154210,154211],{"class":244},"    \"2024-10-01\"",[129,154213,154214],{"class":139},": {",[129,154216,153644],{"class":244},[129,154218,51438],{"class":139},[129,154220,153653],{"class":188},[129,154222,12450],{"class":139},[129,154224,153674],{"class":244},[129,154226,51438],{"class":139},[129,154228,153683],{"class":188},[129,154230,4944],{"class":139},[129,154232,154233,154236,154238,154240,154242,154244,154246,154248,154250,154252],{"class":131,"line":1229},[129,154234,154235],{"class":244},"    \"2024-10-02\"",[129,154237,154214],{"class":139},[129,154239,153644],{"class":244},[129,154241,51438],{"class":139},[129,154243,153712],{"class":188},[129,154245,12450],{"class":139},[129,154247,153674],{"class":244},[129,154249,51438],{"class":139},[129,154251,153741],{"class":188},[129,154253,4944],{"class":139},[129,154255,154256,154259,154261,154263,154265,154268,154270,154272,154274,154277],{"class":131,"line":1235},[129,154257,154258],{"class":244},"    \"2024-10-03\"",[129,154260,154214],{"class":139},[129,154262,153644],{"class":244},[129,154264,51438],{"class":139},[129,154266,154267],{"class":188},"17000",[129,154269,12450],{"class":139},[129,154271,153674],{"class":244},[129,154273,51438],{"class":139},[129,154275,154276],{"class":188},"19000",[129,154278,4944],{"class":139},[129,154280,154281],{"class":131,"line":1326},[129,154282,1579],{"class":139},[129,154284,154285],{"class":131,"line":1332},[129,154286,2414],{"emptyLinePlaceholder":56},[129,154288,154289,154292,154294],{"class":131,"line":1344},[129,154290,154291],{"class":139},"timeline ",[129,154293,185],{"class":135},[129,154295,154296],{"class":139}," Timeline()\n",[129,154298,154299],{"class":131,"line":1626},[129,154300,2414],{"emptyLinePlaceholder":56},[129,154302,154303,154305,154308,154310],{"class":131,"line":1631},[129,154304,3039],{"class":135},[129,154306,154307],{"class":139}," date, category_data ",[129,154309,26044],{"class":135},[129,154311,149149],{"class":139},[129,154313,154314,154317,154319],{"class":131,"line":1637},[129,154315,154316],{"class":139},"    bar ",[129,154318,185],{"class":135},[129,154320,154063],{"class":139},[129,154322,154323,154326,154328],{"class":131,"line":1642},[129,154324,154325],{"class":139},"    bar.add_xaxis(",[129,154327,154071],{"class":188},[129,154329,154330],{"class":139},"(category_data.keys()))\n",[129,154332,154333,154336,154338,154340,154342],{"class":131,"line":1656},[129,154334,154335],{"class":139},"    bar.add_yaxis(",[129,154337,147296],{"class":244},[129,154339,12450],{"class":139},[129,154341,154071],{"class":188},[129,154343,154344],{"class":139},"(category_data.values()))\n",[129,154346,154347,154350,154353,154355,154357,154359,154361,154363,154365,154367,154369,154371,154374],{"class":131,"line":1661},[129,154348,154349],{"class":139},"    bar.set_global_opts(",[129,154351,154352],{"class":5231},"title_opts",[129,154354,185],{"class":135},[129,154356,147479],{"class":139},[129,154358,51408],{"class":5231},[129,154360,185],{"class":135},[129,154362,192],{"class":135},[129,154364,390],{"class":244},[129,154366,1035],{"class":188},[129,154368,73927],{"class":139},[129,154370,1085],{"class":188},[129,154372,154373],{"class":244},"销售额\"",[129,154375,30498],{"class":139},[129,154377,154378],{"class":131,"line":1667},[129,154379,154380],{"class":139},"    timeline.add(bar, date)\n",[129,154382,154383],{"class":131,"line":1688},[129,154384,2414],{"emptyLinePlaceholder":56},[129,154386,154387,154390,154393],{"class":131,"line":1693},[129,154388,154389],{"class":139},"timeline.render(",[129,154391,154392],{"class":244},"\"timeline_sales.html\"",[129,154394,146],{"class":139},[71,154396,154398],{"id":154397},"_128-绘制地图","12.8 绘制地图",[14,154400,154401],{},"地图适合展示地区数据。",[120,154403,154405],{"className":30379,"code":154404,"language":30381,"meta":42,"style":42},"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",[126,154406,154407,154421,154432,154436,154444,154457,154469,154482,154495,154499,154503,154513,154528,154533,154550,154569,154573],{"__ignoreMap":42},[129,154408,154409,154411,154413,154415,154417,154419],{"class":131,"line":132},[129,154410,30738],{"class":135},[129,154412,147380],{"class":139},[129,154414,30393],{"class":135},[129,154416,147385],{"class":139},[129,154418,31384],{"class":135},[129,154420,147390],{"class":139},[129,154422,154423,154425,154427,154429],{"class":131,"line":51},[129,154424,30738],{"class":135},[129,154426,147239],{"class":139},[129,154428,30393],{"class":135},[129,154430,154431],{"class":139}," Map\n",[129,154433,154434],{"class":131,"line":1194},[129,154435,2414],{"emptyLinePlaceholder":56},[129,154437,154438,154440,154442],{"class":131,"line":1209},[129,154439,101659],{"class":139},[129,154441,185],{"class":135},[129,154443,55448],{"class":139},[129,154445,154446,154449,154451,154453,154455],{"class":131,"line":1215},[129,154447,154448],{"class":139},"    (",[129,154450,69270],{"class":244},[129,154452,12450],{"class":139},[129,154454,956],{"class":188},[129,154456,38048],{"class":139},[129,154458,154459,154461,154463,154465,154467],{"class":131,"line":1229},[129,154460,154448],{"class":139},[129,154462,69290],{"class":244},[129,154464,12450],{"class":139},[129,154466,147313],{"class":188},[129,154468,38048],{"class":139},[129,154470,154471,154473,154476,154478,154480],{"class":131,"line":1235},[129,154472,154448],{"class":139},[129,154474,154475],{"class":244},"\"广东\"",[129,154477,12450],{"class":139},[129,154479,1736],{"class":188},[129,154481,38048],{"class":139},[129,154483,154484,154486,154489,154491,154493],{"class":131,"line":1326},[129,154485,154448],{"class":139},[129,154487,154488],{"class":244},"\"浙江\"",[129,154490,12450],{"class":139},[129,154492,147318],{"class":188},[129,154494,38048],{"class":139},[129,154496,154497],{"class":131,"line":1332},[129,154498,33247],{"class":139},[129,154500,154501],{"class":131,"line":1344},[129,154502,2414],{"emptyLinePlaceholder":56},[129,154504,154505,154508,154510],{"class":131,"line":1626},[129,154506,154507],{"class":139},"map_chart ",[129,154509,185],{"class":135},[129,154511,154512],{"class":139}," Map()\n",[129,154514,154515,154518,154520,154523,154526],{"class":131,"line":1631},[129,154516,154517],{"class":139},"map_chart.add(",[129,154519,147296],{"class":244},[129,154521,154522],{"class":139},", data, ",[129,154524,154525],{"class":244},"\"china\"",[129,154527,146],{"class":139},[129,154529,154530],{"class":131,"line":1637},[129,154531,154532],{"class":139},"map_chart.set_global_opts(\n",[129,154534,154535,154537,154539,154541,154543,154545,154548],{"class":131,"line":1642},[129,154536,147474],{"class":5231},[129,154538,185],{"class":135},[129,154540,147479],{"class":139},[129,154542,51408],{"class":5231},[129,154544,185],{"class":135},[129,154546,154547],{"class":244},"\"地区销售额\"",[129,154549,38048],{"class":139},[129,154551,154552,154555,154557,154560,154563,154565,154567],{"class":131,"line":1656},[129,154553,154554],{"class":5231},"    visualmap_opts",[129,154556,185],{"class":135},[129,154558,154559],{"class":139},"opts.VisualMapOpts(",[129,154561,154562],{"class":5231},"max_",[129,154564,185],{"class":135},[129,154566,1736],{"class":188},[129,154568,38048],{"class":139},[129,154570,154571],{"class":131,"line":1661},[129,154572,146],{"class":139},[129,154574,154575,154578,154581],{"class":131,"line":1667},[129,154576,154577],{"class":139},"map_chart.render(",[129,154579,154580],{"class":244},"\"map_sales.html\"",[129,154582,146],{"class":139},[14,154584,154585],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[71,154587,154589],{"id":154588},"_129-项目拆分建议","12.9 项目拆分建议",[14,154591,154592],{},"当代码超过一个文件时，可以这样组织：",[120,154594,154597],{"className":154595,"code":154596,"language":5202,"meta":42},[5200],"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",[126,154598,154596],{"__ignoreMap":42},[14,154600,154601],{},"职责：",[83,154603,154604,154610,154616,154622],{},[86,154605,154606,154609],{},[126,154607,154608],{},"main.py","：程序入口。",[86,154611,154612,154615],{},[126,154613,154614],{},"file_utils.py","：读写 JSON。",[86,154617,154618,154621],{},[126,154619,154620],{},"sales_service.py","：统计销售数据。",[86,154623,154624,154627],{},[126,154625,154626],{},"chart_builder.py","：生成图表。",[71,154629,154631],{"id":154630},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154633,154634],{},"语法基础：",[83,154636,154637,154640,154643,154646],{},[86,154638,154639],{},"会写变量、注释、输入输出。",[86,154641,154642],{},"会使用 int、float、str、bool。",[86,154644,154645],{},"会做类型转换。",[86,154647,154648],{},"会使用 f-string 格式化输出。",[14,154650,154651],{},"流程控制：",[83,154653,154654,154660,154666,154674],{},[86,154655,154656,154657,28386],{},"会写 ",[126,154658,154659],{},"if elif else",[86,154661,154656,154662,101019,154664,28386],{},[126,154663,108664],{},[126,154665,3039],{},[86,154667,154668,154669,101019,154671,28386],{},"理解 ",[126,154670,2067],{},[126,154672,154673],{},"continue",[86,154675,154676],{},"能写嵌套循环。",[14,154678,154679],{},"函数：",[83,154681,154682,154685,154688,154691],{},[86,154683,154684],{},"会定义和调用函数。",[86,154686,154687],{},"理解参数和返回值。",[86,154689,154690],{},"知道局部变量和全局变量。",[86,154692,154693],{},"会使用默认参数、关键字参数、不定长参数。",[14,154695,154696],{},"容器：",[83,154698,154699,154702,154705,154708,154711],{},[86,154700,154701],{},"会使用列表增删改查。",[86,154703,154704],{},"会遍历列表、字典。",[86,154706,154707],{},"会使用切片。",[86,154709,154710],{},"会用集合去重。",[86,154712,154713],{},"会处理列表嵌套字典。",[14,154715,154716],{},"文件和模块：",[83,154718,154719,154722,154725,154728,154731],{},[86,154720,154721],{},"会读写文本文件。",[86,154723,154724],{},"会读写 JSON。",[86,154726,154727],{},"会捕获常见异常。",[86,154729,154730],{},"会导入模块和第三方包。",[86,154732,154733],{},"会创建简单包结构。",[14,154735,154736],{},"项目能力：",[83,154738,154739,154742,154745,154748,154751],{},[86,154740,154741],{},"能把代码拆成函数。",[86,154743,154744],{},"能把数据保存到文件。",[86,154746,154747],{},"能处理用户输入错误。",[86,154749,154750],{},"能写一个完整菜单程序。",[86,154752,154753],{},"能用 pyecharts 生成图表。",[71,154755,154757],{"id":154756},"_1211-推荐练习顺序","12.11 推荐练习顺序",[83,154759,154760,154763,154766,154769,154772,154775,154778,154781],{},[86,154761,154762],{},"猜数字游戏。",[86,154764,154765],{},"ATM 菜单程序。",[86,154767,154768],{},"学生成绩统计。",[86,154770,154771],{},"学生管理系统函数版。",[86,154773,154774],{},"学生管理系统文件持久化版。",[86,154776,154777],{},"学生管理系统面向对象版。",[86,154779,154780],{},"销售数据统计。",[86,154782,154783],{},"销售数据可视化。",[71,154785,154787],{"id":154786},"_1212-常见学习误区","12.12 常见学习误区",[83,154789,154790,154793,154796,154799,154802,154805,154808],{},[86,154791,154792],{},"只看视频不敲代码。",[86,154794,154795],{},"一报错就复制错误去搜，不先读报错位置。",[86,154797,154798],{},"变量名随便写，后续自己看不懂。",[86,154800,154801],{},"所有代码都写在一个文件一个函数里。",[86,154803,154804],{},"不保存练习代码，复习时没有材料。",[86,154806,154807],{},"还没掌握列表字典就急着学框架。",[86,154809,154810],{},"不会读官方文档，只依赖教程。",[71,154812,154814],{"id":154813},"_1213-如何读报错","12.13 如何读报错",[14,154816,154817],{},"报错通常从下往上看最后几行。",[14,154819,15150],{},[120,154821,154824],{"className":154822,"code":154823,"language":5202,"meta":42},[5200],"ValueError: invalid literal for int() with base 10: 'abc'\n",[126,154825,154823],{"__ignoreMap":42},[14,154827,24600],{},[83,154829,154830,154836,154846],{},[86,154831,154832,154833,28386],{},"异常类型是 ",[126,154834,154835],{},"ValueError",[86,154837,107346,154838,154841,154842,154845],{},[126,154839,154840],{},"int()"," 无法把 ",[126,154843,154844],{},"'abc'"," 转成整数。",[86,154847,154848],{},"应该检查输入内容或增加异常处理。",[14,154850,154851],{},"再看文件名和行号：",[120,154853,154856],{"className":154854,"code":154855,"language":5202,"meta":42},[5200],"File \"main.py\", line 10, in \u003Cmodule>\n",[126,154857,154855],{"__ignoreMap":42},[14,154859,154860,154861,154863],{},"表示错误发生在 ",[126,154862,154608],{}," 第 10 行。",[71,154865,154867],{"id":154866},"_1214-后续学习方向","12.14 后续学习方向",[14,154869,154870],{},"Python 基础完成后，可以按兴趣选择方向：",[83,154872,154873,154885,154894,154906,154917,154926,154936],{},[86,154874,154875,154876,352,154879,352,154882,28386],{},"自动化办公：",[126,154877,154878],{},"openpyxl",[126,154880,154881],{},"python-docx",[126,154883,154884],{},"pdfplumber",[86,154886,154887,154888,352,154890,352,154892,28386],{},"数据分析：",[126,154889,100627],{},[126,154891,146186],{},[126,154893,146194],{},[86,154895,154896,154897,352,154900,352,154903,28386],{},"Web 后端：",[126,154898,154899],{},"Flask",[126,154901,154902],{},"FastAPI",[126,154904,154905],{},"Django",[86,154907,154908,154909,352,154911,352,154914,28386],{},"爬虫：",[126,154910,146171],{},[126,154912,154913],{},"BeautifulSoup",[126,154915,154916],{},"Scrapy",[86,154918,154919,154920,352,154922,154925],{},"测试开发：",[126,154921,146218],{},[126,154923,154924],{},"selenium","、接口测试。",[86,154927,154928,154929,352,154931,352,154933,28386],{},"人工智能：",[126,154930,100627],{},[126,154932,146186],{},[126,154934,154935],{},"pytorch",[86,154937,154938,154939,352,154941,352,154944,28386],{},"运维脚本：",[126,154940,145787],{},[126,154942,154943],{},"subprocess",[126,154945,154946],{},"paramiko",[14,154948,154949],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[71,154951,154953],{"id":154952},"_1215-结课练习","12.15 结课练习",[83,154955,154956,154959,154962,154965,154968,154971,154974,154977],{},[86,154957,154958],{},"完成函数版学生管理系统。",[86,154960,154961],{},"给学生管理系统增加 JSON 持久化。",[86,154963,154964],{},"给学生管理系统增加异常处理。",[86,154966,154967],{},"把学生管理系统改成面向对象版。",[86,154969,154970],{},"使用 pyecharts 绘制学生成绩柱状图。",[86,154972,154973],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[86,154975,154976],{},"按品类统计销售额并绘制柱状图。",[86,154978,154979],{},"写一份自己的 Python 学习路线图。",[5141,154981,154982],{},"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":42,"searchDepth":51,"depth":51,"links":154984},[154985,154986,154989,154990,154991,154997,154998,154999,155000,155001,155002,155003,155004,155005,155006],{"id":151701,"depth":51,"text":151702},{"id":151751,"depth":51,"text":151752,"children":154987},[154988],{"id":151755,"depth":1194,"text":151756},{"id":151794,"depth":51,"text":151795},{"id":153268,"depth":51,"text":153269},{"id":153606,"depth":51,"text":153607,"children":154992},[154993,154994,154995,154996],{"id":153610,"depth":1194,"text":153611},{"id":153750,"depth":1194,"text":153751},{"id":153840,"depth":1194,"text":153841},{"id":153926,"depth":1194,"text":153927},{"id":153967,"depth":51,"text":153968},{"id":154160,"depth":51,"text":154161},{"id":154397,"depth":51,"text":154398},{"id":154588,"depth":51,"text":154589},{"id":154630,"depth":51,"text":154631},{"id":154756,"depth":51,"text":154757},{"id":154786,"depth":51,"text":154787},{"id":154813,"depth":51,"text":154814},{"id":154866,"depth":51,"text":154867},{"id":154952,"depth":51,"text":154953},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151693,"description":53},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155013,"title":155014,"body":155015,"description":53,"extension":54,"meta":157484,"navigation":56,"path":157485,"seo":157486,"stem":157487,"__hash__":157488},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155016,"toc":157459},[155017,155020,155024,155027,155030,155050,155053,155076,155079,155082,155104,155107,155129,155133,155136,155176,155179,155300,155304,155307,155347,155350,155374,155377,155381,155384,155398,155431,155434,155469,155472,155495,155498,155531,155534,155536,155542,155617,155620,155626,155643,155683,155687,155690,155736,155738,155776,155779,155814,155817,155852,155855,155887,155890,155909,155913,155917,156030,156032,156107,156111,156157,156160,156186,156195,156199,156202,156265,156273,156301,156305,156345,156410,156414,156417,156456,156459,156504,156507,156568,156572,156599,156602,156630,156633,156637,156641,156706,156709,156747,156750,156782,156786,156885,156889,156892,156965,156968,157016,157020,157026,157066,157069,157116,157119,157168,157172,157174,157188,157190,157371,157375,157402,157422,157429,157433,157450,157456],[10,155018,155014],{"id":155019},"_2-基础语法变量与字符串",[71,155021,155023],{"id":155022},"_21-注释","2.1 注释",[14,155025,155026],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155028,155029],{},"单行注释：",[120,155031,155033],{"className":30379,"code":155032,"language":30381,"meta":42,"style":42},"# 这是单行注释\nprint(\"hello\")\n",[126,155034,155035,155040],{"__ignoreMap":42},[129,155036,155037],{"class":131,"line":132},[129,155038,155039],{"class":198},"# 这是单行注释\n",[129,155041,155042,155044,155046,155048],{"class":131,"line":51},[129,155043,30416],{"class":188},[129,155045,140],{"class":139},[129,155047,5859],{"class":244},[129,155049,146],{"class":139},[14,155051,155052],{},"多行说明常用三引号：",[120,155054,155056],{"className":30379,"code":155055,"language":30381,"meta":42,"style":42},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[126,155057,155058,155062,155067,155072],{"__ignoreMap":42},[129,155059,155060],{"class":131,"line":132},[129,155061,95699],{"class":244},[129,155063,155064],{"class":131,"line":51},[129,155065,155066],{"class":244},"这是多行说明。\n",[129,155068,155069],{"class":131,"line":1194},[129,155070,155071],{"class":244},"常用于文件顶部说明、函数说明等。\n",[129,155073,155074],{"class":131,"line":1209},[129,155075,95699],{"class":244},[14,155077,155078],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155080,155081],{},"不好：",[120,155083,155085],{"className":30379,"code":155084,"language":30381,"meta":42,"style":42},"# age 加 1\nage = age + 1\n",[126,155086,155087,155092],{"__ignoreMap":42},[129,155088,155089],{"class":131,"line":132},[129,155090,155091],{"class":198},"# age 加 1\n",[129,155093,155094,155096,155098,155100,155102],{"class":131,"line":51},[129,155095,146547],{"class":139},[129,155097,185],{"class":135},[129,155099,15722],{"class":139},[129,155101,620],{"class":135},[129,155103,55700],{"class":188},[14,155105,155106],{},"较好：",[120,155108,155110],{"className":30379,"code":155109,"language":30381,"meta":42,"style":42},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[126,155111,155112,155117],{"__ignoreMap":42},[129,155113,155114],{"class":131,"line":132},[129,155115,155116],{"class":198},"# 用户过完生日后，年龄增加一岁\n",[129,155118,155119,155121,155123,155125,155127],{"class":131,"line":51},[129,155120,146547],{"class":139},[129,155122,185],{"class":135},[129,155124,15722],{"class":139},[129,155126,620],{"class":135},[129,155128,55700],{"class":188},[71,155130,155132],{"id":155131},"_22-字面量","2.2 字面量",[14,155134,155135],{},"字面量就是代码中直接写出来的数据。",[120,155137,155139],{"className":30379,"code":155138,"language":30381,"meta":42,"style":42},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[126,155140,155141,155148,155155,155162,155169],{"__ignoreMap":42},[129,155142,155143,155145],{"class":131,"line":132},[129,155144,450],{"class":188},[129,155146,155147],{"class":198},"          # 整数\n",[129,155149,155150,155152],{"class":131,"line":51},[129,155151,189],{"class":188},[129,155153,155154],{"class":198},"         # 小数\n",[129,155156,155157,155159],{"class":131,"line":1194},[129,155158,5859],{"class":244},[129,155160,155161],{"class":198},"      # 字符串\n",[129,155163,155164,155166],{"class":131,"line":1209},[129,155165,31477],{"class":188},[129,155167,155168],{"class":198},"         # 布尔值\n",[129,155170,155171,155173],{"class":131,"line":1215},[129,155172,95687],{"class":188},[129,155174,155175],{"class":198},"         # 空值\n",[14,155177,155178],{},"常见字面量类型：",[277,155180,155181,155191],{},[280,155182,155183],{},[283,155184,155185,155187,155189],{},[286,155186,23752],{},[286,155188,27493],{},[286,155190,25870],{},[324,155192,155193,155204,155215,155226,155238,155250,155262,155275,155287],{},[283,155194,155195,155197,155201],{},[329,155196,143],{},[329,155198,155199],{},[126,155200,450],{},[329,155202,155203],{},"整数",[283,155205,155206,155208,155212],{},[329,155207,179],{},[329,155209,155210],{},[126,155211,189],{},[329,155213,155214],{},"浮点数",[283,155216,155217,155219,155223],{},[329,155218,1314],{},[329,155220,155221],{},[126,155222,5859],{},[329,155224,155225],{},"字符串",[283,155227,155228,155230,155236],{},[329,155229,1369],{},[329,155231,155232,352,155234],{},[126,155233,31477],{},[126,155235,33988],{},[329,155237,66016],{},[283,155239,155240,155243,155247],{},[329,155241,155242],{},"NoneType",[329,155244,155245],{},[126,155246,95687],{},[329,155248,155249],{},"空值",[283,155251,155252,155254,155259],{},[329,155253,154071],{},[329,155255,155256],{},[126,155257,155258],{},"[1, 2, 3]",[329,155260,155261],{},"列表",[283,155263,155264,155267,155272],{},[329,155265,155266],{},"tuple",[329,155268,155269],{},[126,155270,155271],{},"(1, 2, 3)",[329,155273,155274],{},"元组",[283,155276,155277,155279,155284],{},[329,155278,114547],{},[329,155280,155281],{},[126,155282,155283],{},"{\"name\": \"张三\"}",[329,155285,155286],{},"字典",[283,155288,155289,155292,155297],{},[329,155290,155291],{},"set",[329,155293,155294],{},[126,155295,155296],{},"{1, 2, 3}",[329,155298,155299],{},"集合",[71,155301,155303],{"id":155302},"_23-变量","2.3 变量",[14,155305,155306],{},"变量是保存数据的名字。",[120,155308,155310],{"className":30379,"code":155309,"language":30381,"meta":42,"style":42},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[126,155311,155312,155320,155328,155338],{"__ignoreMap":42},[129,155313,155314,155316,155318],{"class":131,"line":132},[129,155315,146537],{"class":139},[129,155317,185],{"class":135},[129,155319,149354],{"class":244},[129,155321,155322,155324,155326],{"class":131,"line":51},[129,155323,146547],{"class":139},[129,155325,185],{"class":135},[129,155327,146552],{"class":188},[129,155329,155330,155333,155335],{"class":131,"line":1194},[129,155331,155332],{"class":139},"height ",[129,155334,185],{"class":135},[129,155336,155337],{"class":188}," 1.75\n",[129,155339,155340,155343,155345],{"class":131,"line":1209},[129,155341,155342],{"class":139},"is_student ",[129,155344,185],{"class":135},[129,155346,153600],{"class":188},[14,155348,155349],{},"Python 的变量不需要提前声明类型：",[120,155351,155353],{"className":30379,"code":155352,"language":30381,"meta":42,"style":42},"score = 100\nscore = \"满分\"\n",[126,155354,155355,155365],{"__ignoreMap":42},[129,155356,155357,155360,155362],{"class":131,"line":132},[129,155358,155359],{"class":139},"score ",[129,155361,185],{"class":135},[129,155363,155364],{"class":188}," 100\n",[129,155366,155367,155369,155371],{"class":131,"line":51},[129,155368,155359],{"class":139},[129,155370,185],{"class":135},[129,155372,155373],{"class":244}," \"满分\"\n",[14,155375,155376],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[71,155378,155380],{"id":155379},"_24-变量命名规则","2.4 变量命名规则",[14,155382,155383],{},"硬性规则：",[83,155385,155386,155389,155392,155395],{},[86,155387,155388],{},"只能由字母、数字、下划线组成。",[86,155390,155391],{},"不能以数字开头。",[86,155393,155394],{},"不能使用 Python 关键字。",[86,155396,155397],{},"区分大小写。",[120,155399,155401],{"className":30379,"code":155400,"language":30381,"meta":42,"style":42},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[126,155402,155403,155412,155421],{"__ignoreMap":42},[129,155404,155405,155408,155410],{"class":131,"line":132},[129,155406,155407],{"class":139},"user_name ",[129,155409,185],{"class":135},[129,155411,146542],{"class":244},[129,155413,155414,155417,155419],{"class":131,"line":51},[129,155415,155416],{"class":139},"age2 ",[129,155418,185],{"class":135},[129,155420,146552],{"class":188},[129,155422,155423,155426,155428],{"class":131,"line":1194},[129,155424,155425],{"class":139},"_token ",[129,155427,185],{"class":135},[129,155429,155430],{"class":244}," \"abc\"\n",[14,155432,155433],{},"错误写法：",[120,155435,155437],{"className":30379,"code":155436,"language":30381,"meta":42,"style":42},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[126,155438,155439,155448,155460],{"__ignoreMap":42},[129,155440,155441,155444,155446],{"class":131,"line":132},[129,155442,155443],{"class":77404},"2age",[129,155445,13579],{"class":135},[129,155447,146552],{"class":188},[129,155449,155450,155452,155454,155456,155458],{"class":131,"line":51},[129,155451,131585],{"class":139},[129,155453,671],{"class":135},[129,155455,146537],{"class":139},[129,155457,185],{"class":135},[129,155459,146542],{"class":244},[129,155461,155462,155464,155466],{"class":131,"line":1194},[129,155463,14709],{"class":135},[129,155465,13579],{"class":135},[129,155467,155468],{"class":244}," \"一班\"\n",[14,155470,155471],{},"查看关键字：",[120,155473,155475],{"className":30379,"code":155474,"language":30381,"meta":42,"style":42},"import keyword\n\nprint(keyword.kwlist)\n",[126,155476,155477,155484,155488],{"__ignoreMap":42},[129,155478,155479,155481],{"class":131,"line":132},[129,155480,30393],{"class":135},[129,155482,155483],{"class":139}," keyword\n",[129,155485,155486],{"class":131,"line":51},[129,155487,2414],{"emptyLinePlaceholder":56},[129,155489,155490,155492],{"class":131,"line":1194},[129,155491,30416],{"class":188},[129,155493,155494],{"class":139},"(keyword.kwlist)\n",[14,155496,155497],{},"推荐命名风格：",[120,155499,155501],{"className":30379,"code":155500,"language":30381,"meta":42,"style":42},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[126,155502,155503,155512,155522],{"__ignoreMap":42},[129,155504,155505,155508,155510],{"class":131,"line":132},[129,155506,155507],{"class":139},"student_name ",[129,155509,185],{"class":135},[129,155511,149354],{"class":244},[129,155513,155514,155517,155519],{"class":131,"line":51},[129,155515,155516],{"class":139},"total_price ",[129,155518,185],{"class":135},[129,155520,155521],{"class":188}," 99.8\n",[129,155523,155524,155527,155529],{"class":131,"line":1194},[129,155525,155526],{"class":139},"is_finished ",[129,155528,185],{"class":135},[129,155530,125808],{"class":188},[14,155532,155533],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[71,155535,50733],{"id":50732},[14,155537,104367,155538,155541],{},[126,155539,155540],{},"type()"," 查看数据类型：",[120,155543,155545],{"className":30379,"code":155544,"language":30381,"meta":42,"style":42},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[126,155546,155547,155561,155575,155589,155603],{"__ignoreMap":42},[129,155548,155549,155551,155553,155555,155557,155559],{"class":131,"line":132},[129,155550,30416],{"class":188},[129,155552,140],{"class":139},[129,155554,103108],{"class":188},[129,155556,140],{"class":139},[129,155558,450],{"class":188},[129,155560,30498],{"class":139},[129,155562,155563,155565,155567,155569,155571,155573],{"class":131,"line":51},[129,155564,30416],{"class":188},[129,155566,140],{"class":139},[129,155568,103108],{"class":188},[129,155570,140],{"class":139},[129,155572,189],{"class":188},[129,155574,30498],{"class":139},[129,155576,155577,155579,155581,155583,155585,155587],{"class":131,"line":1194},[129,155578,30416],{"class":188},[129,155580,140],{"class":139},[129,155582,103108],{"class":188},[129,155584,140],{"class":139},[129,155586,5859],{"class":244},[129,155588,30498],{"class":139},[129,155590,155591,155593,155595,155597,155599,155601],{"class":131,"line":1209},[129,155592,30416],{"class":188},[129,155594,140],{"class":139},[129,155596,103108],{"class":188},[129,155598,140],{"class":139},[129,155600,31477],{"class":188},[129,155602,30498],{"class":139},[129,155604,155605,155607,155609,155611,155613,155615],{"class":131,"line":1215},[129,155606,30416],{"class":188},[129,155608,140],{"class":139},[129,155610,103108],{"class":188},[129,155612,140],{"class":139},[129,155614,95687],{"class":188},[129,155616,30498],{"class":139},[14,155618,155619],{},"输出类似：",[120,155621,155624],{"className":155622,"code":155623,"language":5202,"meta":42},[5200],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[126,155625,155623],{"__ignoreMap":42},[14,155627,9040,155628,107284,155630,155632,155633,155635,155636,21515,155638,155635,155640,155642],{},[126,155629,1369],{},[126,155631,143],{}," 的子类，",[126,155634,31477],{}," 可以当作 ",[126,155637,357],{},[126,155639,33988],{},[126,155641,331],{},"，但业务代码中不要滥用。",[120,155644,155646],{"className":30379,"code":155645,"language":30381,"meta":42,"style":42},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[126,155647,155648,155666],{"__ignoreMap":42},[129,155649,155650,155652,155654,155656,155658,155660,155663],{"class":131,"line":132},[129,155651,30416],{"class":188},[129,155653,140],{"class":139},[129,155655,31477],{"class":188},[129,155657,45567],{"class":135},[129,155659,25119],{"class":188},[129,155661,155662],{"class":139},")   ",[129,155664,155665],{"class":198},"# 2\n",[129,155667,155668,155670,155672,155674,155676,155678,155680],{"class":131,"line":51},[129,155669,30416],{"class":188},[129,155671,140],{"class":139},[129,155673,33988],{"class":188},[129,155675,45567],{"class":135},[129,155677,25119],{"class":188},[129,155679,45809],{"class":139},[129,155681,155682],{"class":198},"# 1\n",[71,155684,155686],{"id":155685},"_26-类型转换","2.6 类型转换",[14,155688,155689],{},"常用转换函数：",[120,155691,155693],{"className":30379,"code":155692,"language":30381,"meta":42,"style":42},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[126,155694,155695,155705,155716,155726],{"__ignoreMap":42},[129,155696,155697,155699,155701,155703],{"class":131,"line":132},[129,155698,143],{"class":188},[129,155700,140],{"class":139},[129,155702,54317],{"class":244},[129,155704,146],{"class":139},[129,155706,155707,155709,155711,155714],{"class":131,"line":51},[129,155708,179],{"class":188},[129,155710,140],{"class":139},[129,155712,155713],{"class":244},"\"3.14\"",[129,155715,146],{"class":139},[129,155717,155718,155720,155722,155724],{"class":131,"line":1194},[129,155719,1314],{"class":188},[129,155721,140],{"class":139},[129,155723,450],{"class":188},[129,155725,146],{"class":139},[129,155727,155728,155730,155732,155734],{"class":131,"line":1209},[129,155729,1369],{"class":188},[129,155731,140],{"class":139},[129,155733,357],{"class":188},[129,155735,146],{"class":139},[14,155737,15150],{},[120,155739,155741],{"className":30379,"code":155740,"language":30381,"meta":42,"style":42},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[126,155742,155743,155752,155763],{"__ignoreMap":42},[129,155744,155745,155747,155749],{"class":131,"line":132},[129,155746,146547],{"class":139},[129,155748,185],{"class":135},[129,155750,155751],{"class":244}," \"18\"\n",[129,155753,155754,155756,155758,155760],{"class":131,"line":51},[129,155755,146547],{"class":139},[129,155757,185],{"class":135},[129,155759,2396],{"class":188},[129,155761,155762],{"class":139},"(age)\n",[129,155764,155765,155767,155770,155772,155774],{"class":131,"line":1194},[129,155766,30416],{"class":188},[129,155768,155769],{"class":139},"(age ",[129,155771,620],{"class":135},[129,155773,25119],{"class":188},[129,155775,146],{"class":139},[14,155777,155778],{},"输入得到的内容永远是字符串：",[120,155780,155782],{"className":30379,"code":155781,"language":30381,"meta":42,"style":42},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[126,155783,155784,155800],{"__ignoreMap":42},[129,155785,155786,155789,155791,155793,155795,155798],{"class":131,"line":132},[129,155787,155788],{"class":139},"num ",[129,155790,185],{"class":135},[129,155792,60606],{"class":188},[129,155794,140],{"class":139},[129,155796,155797],{"class":244},"\"请输入数字:\"",[129,155799,146],{"class":139},[129,155801,155802,155804,155806,155808,155811],{"class":131,"line":51},[129,155803,30416],{"class":188},[129,155805,140],{"class":139},[129,155807,103108],{"class":188},[129,155809,155810],{"class":139},"(num))  ",[129,155812,155813],{"class":198},"# str\n",[14,155815,155816],{},"如果要做数学运算，必须转换：",[120,155818,155820],{"className":30379,"code":155819,"language":30381,"meta":42,"style":42},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[126,155821,155822,155840],{"__ignoreMap":42},[129,155823,155824,155826,155828,155830,155832,155834,155836,155838],{"class":131,"line":132},[129,155825,155788],{"class":139},[129,155827,185],{"class":135},[129,155829,2396],{"class":188},[129,155831,140],{"class":139},[129,155833,53822],{"class":188},[129,155835,140],{"class":139},[129,155837,155797],{"class":244},[129,155839,30498],{"class":139},[129,155841,155842,155844,155846,155848,155850],{"class":131,"line":51},[129,155843,30416],{"class":188},[129,155845,45620],{"class":139},[129,155847,620],{"class":135},[129,155849,2052],{"class":188},[129,155851,146],{"class":139},[14,155853,155854],{},"常见错误：",[120,155856,155858],{"className":30379,"code":155857,"language":30381,"meta":42,"style":42},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[126,155859,155860,155873],{"__ignoreMap":42},[129,155861,155862,155864,155866,155868,155870],{"class":131,"line":132},[129,155863,143],{"class":188},[129,155865,140],{"class":139},[129,155867,155713],{"class":244},[129,155869,155662],{"class":139},[129,155871,155872],{"class":198},"# 错误\n",[129,155874,155875,155877,155879,155882,155885],{"class":131,"line":51},[129,155876,143],{"class":188},[129,155878,140],{"class":139},[129,155880,155881],{"class":244},"\"abc\"",[129,155883,155884],{"class":139},")    ",[129,155886,155872],{"class":198},[14,155888,155889],{},"正确写法：",[120,155891,155893],{"className":30379,"code":155892,"language":30381,"meta":42,"style":42},"num = float(\"3.14\")\n",[126,155894,155895],{"__ignoreMap":42},[129,155896,155897,155899,155901,155903,155905,155907],{"class":131,"line":132},[129,155898,155788],{"class":139},[129,155900,185],{"class":135},[129,155902,109798],{"class":188},[129,155904,140],{"class":139},[129,155906,155713],{"class":244},[129,155908,146],{"class":139},[71,155910,155912],{"id":155911},"_27-运算符","2.7 运算符",[100,155914,155916],{"id":155915},"_271-算术运算符","2.7.1 算术运算符",[277,155918,155919,155930],{},[280,155920,155921],{},[283,155922,155923,155926,155928],{},[286,155924,155925],{},"运算符",[286,155927,25870],{},[286,155929,27493],{},[324,155931,155932,155946,155960,155974,155988,156002,156016],{},[283,155933,155934,155938,155941],{},[329,155935,155936],{},[126,155937,620],{},[329,155939,155940],{},"加法",[329,155942,155943],{},[126,155944,155945],{},"1 + 2",[283,155947,155948,155952,155955],{},[329,155949,155950],{},[126,155951,671],{},[329,155953,155954],{},"减法",[329,155956,155957],{},[126,155958,155959],{},"5 - 3",[283,155961,155962,155966,155969],{},[329,155963,155964],{},[126,155965,594],{},[329,155967,155968],{},"乘法",[329,155970,155971],{},[126,155972,155973],{},"2 * 3",[283,155975,155976,155980,155983],{},[329,155977,155978],{},[126,155979,723],{},[329,155981,155982],{},"除法，结果是浮点数",[329,155984,155985],{},[126,155986,155987],{},"5 \u002F 2",[283,155989,155990,155994,155997],{},[329,155991,155992],{},[126,155993,33330],{},[329,155995,155996],{},"整除",[329,155998,155999],{},[126,156000,156001],{},"5 \u002F\u002F 2",[283,156003,156004,156008,156011],{},[329,156005,156006],{},[126,156007,467],{},[329,156009,156010],{},"取余",[329,156012,156013],{},[126,156014,156015],{},"5 % 2",[283,156017,156018,156022,156025],{},[329,156019,156020],{},[126,156021,10676],{},[329,156023,156024],{},"幂运算",[329,156026,156027],{},[126,156028,156029],{},"2 ** 3",[14,156031,15150],{},[120,156033,156035],{"className":30379,"code":156034,"language":30381,"meta":42,"style":42},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[126,156036,156037,156055,156072,156089],{"__ignoreMap":42},[129,156038,156039,156041,156043,156045,156048,156050,156052],{"class":131,"line":132},[129,156040,30416],{"class":188},[129,156042,140],{"class":139},[129,156044,458],{"class":188},[129,156046,156047],{"class":135}," \u002F",[129,156049,14770],{"class":188},[129,156051,155662],{"class":139},[129,156053,156054],{"class":198},"# 2.5\n",[129,156056,156057,156059,156061,156063,156066,156068,156070],{"class":131,"line":51},[129,156058,30416],{"class":188},[129,156060,140],{"class":139},[129,156062,458],{"class":188},[129,156064,156065],{"class":135}," \u002F\u002F",[129,156067,14770],{"class":188},[129,156069,45809],{"class":139},[129,156071,155665],{"class":198},[129,156073,156074,156076,156078,156080,156083,156085,156087],{"class":131,"line":1194},[129,156075,30416],{"class":188},[129,156077,140],{"class":139},[129,156079,458],{"class":188},[129,156081,156082],{"class":135}," %",[129,156084,14770],{"class":188},[129,156086,155662],{"class":139},[129,156088,155682],{"class":198},[129,156090,156091,156093,156095,156097,156100,156102,156104],{"class":131,"line":1209},[129,156092,30416],{"class":188},[129,156094,140],{"class":139},[129,156096,217],{"class":188},[129,156098,156099],{"class":135}," **",[129,156101,78071],{"class":188},[129,156103,45809],{"class":139},[129,156105,156106],{"class":198},"# 8\n",[100,156108,156110],{"id":156109},"_272-赋值运算符","2.7.2 赋值运算符",[120,156112,156114],{"className":30379,"code":156113,"language":30381,"meta":42,"style":42},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[126,156115,156116,156124,156132,156140,156148],{"__ignoreMap":42},[129,156117,156118,156120,156122],{"class":131,"line":132},[129,156119,155788],{"class":139},[129,156121,185],{"class":135},[129,156123,58429],{"class":188},[129,156125,156126,156128,156130],{"class":131,"line":51},[129,156127,155788],{"class":139},[129,156129,9492],{"class":135},[129,156131,54428],{"class":188},[129,156133,156134,156136,156138],{"class":131,"line":1194},[129,156135,155788],{"class":139},[129,156137,150253],{"class":135},[129,156139,47724],{"class":188},[129,156141,156142,156144,156146],{"class":131,"line":1209},[129,156143,155788],{"class":139},[129,156145,137149],{"class":135},[129,156147,120037],{"class":188},[129,156149,156150,156152,156155],{"class":131,"line":1215},[129,156151,155788],{"class":139},[129,156153,156154],{"class":135},"\u002F=",[129,156156,47724],{"class":188},[14,156158,156159],{},"等价关系：",[120,156161,156163],{"className":30379,"code":156162,"language":30381,"meta":42,"style":42},"num += 1\nnum = num + 1\n",[126,156164,156165,156173],{"__ignoreMap":42},[129,156166,156167,156169,156171],{"class":131,"line":132},[129,156168,155788],{"class":139},[129,156170,9492],{"class":135},[129,156172,55700],{"class":188},[129,156174,156175,156177,156179,156182,156184],{"class":131,"line":51},[129,156176,155788],{"class":139},[129,156178,185],{"class":135},[129,156180,156181],{"class":139}," num ",[129,156183,620],{"class":135},[129,156185,55700],{"class":188},[14,156187,156188,156189,101019,156192,28386],{},"Python 没有 ",[126,156190,156191],{},"num++",[126,156193,156194],{},"num--",[100,156196,156198],{"id":156197},"_273-比较运算符","2.7.3 比较运算符",[14,156200,156201],{},"比较运算结果是布尔值。",[120,156203,156205],{"className":30379,"code":156204,"language":30381,"meta":42,"style":42},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[126,156206,156207,156221,156236,156250],{"__ignoreMap":42},[129,156208,156209,156211,156213,156215,156217,156219],{"class":131,"line":132},[129,156210,30416],{"class":188},[129,156212,140],{"class":139},[129,156214,585],{"class":188},[129,156216,26223],{"class":135},[129,156218,2162],{"class":188},[129,156220,146],{"class":139},[129,156222,156223,156225,156227,156229,156232,156234],{"class":131,"line":51},[129,156224,30416],{"class":188},[129,156226,140],{"class":139},[129,156228,585],{"class":188},[129,156230,156231],{"class":135}," >=",[129,156233,2052],{"class":188},[129,156235,146],{"class":139},[129,156237,156238,156240,156242,156244,156246,156248],{"class":131,"line":1194},[129,156239,30416],{"class":188},[129,156241,140],{"class":139},[129,156243,585],{"class":188},[129,156245,101560],{"class":135},[129,156247,2097],{"class":188},[129,156249,146],{"class":139},[129,156251,156252,156254,156256,156258,156261,156263],{"class":131,"line":1209},[129,156253,30416],{"class":188},[129,156255,140],{"class":139},[129,156257,585],{"class":188},[129,156259,156260],{"class":135}," !=",[129,156262,2097],{"class":188},[129,156264,146],{"class":139},[14,156266,156267,156268,156270,156271,28386],{},"注意：判断相等用 ",[126,156269,2963],{},"，赋值用 ",[126,156272,185],{},[120,156274,156276],{"className":30379,"code":156275,"language":30381,"meta":42,"style":42},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[126,156277,156278,156290],{"__ignoreMap":42},[129,156279,156280,156282,156284,156287],{"class":131,"line":132},[129,156281,146547],{"class":139},[129,156283,185],{"class":135},[129,156285,156286],{"class":188}," 18",[129,156288,156289],{"class":198},"       # 赋值\n",[129,156291,156292,156294,156296,156298],{"class":131,"line":51},[129,156293,146547],{"class":139},[129,156295,2963],{"class":135},[129,156297,156286],{"class":188},[129,156299,156300],{"class":198},"      # 判断是否相等\n",[100,156302,156304],{"id":156303},"_274-逻辑运算符","2.7.4 逻辑运算符",[277,156306,156307,156315],{},[280,156308,156309],{},[283,156310,156311,156313],{},[286,156312,155925],{},[286,156314,25870],{},[324,156316,156317,156326,156335],{},[283,156318,156319,156323],{},[329,156320,156321],{},[126,156322,30463],{},[329,156324,156325],{},"并且",[283,156327,156328,156332],{},[329,156329,156330],{},[126,156331,115091],{},[329,156333,156334],{},"或者",[283,156336,156337,156342],{},[329,156338,156339],{},[126,156340,156341],{},"not",[329,156343,156344],{},"取反",[120,156346,156348],{"className":30379,"code":156347,"language":30381,"meta":42,"style":42},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[126,156349,156350,156358,156367,156371,156386,156400],{"__ignoreMap":42},[129,156351,156352,156354,156356],{"class":131,"line":132},[129,156353,146547],{"class":139},[129,156355,185],{"class":135},[129,156357,88066],{"class":188},[129,156359,156360,156363,156365],{"class":131,"line":51},[129,156361,156362],{"class":139},"has_ticket ",[129,156364,185],{"class":135},[129,156366,153600],{"class":188},[129,156368,156369],{"class":131,"line":1194},[129,156370,2414],{"emptyLinePlaceholder":56},[129,156372,156373,156375,156377,156379,156381,156383],{"class":131,"line":1209},[129,156374,30416],{"class":188},[129,156376,155769],{"class":139},[129,156378,1724],{"class":135},[129,156380,156286],{"class":188},[129,156382,120430],{"class":135},[129,156384,156385],{"class":139}," has_ticket)\n",[129,156387,156388,156390,156392,156394,156396,156398],{"class":131,"line":1215},[129,156389,30416],{"class":188},[129,156391,155769],{"class":139},[129,156393,1049],{"class":135},[129,156395,156286],{"class":188},[129,156397,114202],{"class":135},[129,156399,156385],{"class":139},[129,156401,156402,156404,156406,156408],{"class":131,"line":1229},[129,156403,30416],{"class":188},[129,156405,140],{"class":139},[129,156407,156341],{"class":135},[129,156409,156385],{"class":139},[71,156411,156413],{"id":156412},"_28-字符串定义","2.8 字符串定义",[14,156415,156416],{},"三种常见写法：",[120,156418,156420],{"className":30379,"code":156419,"language":30381,"meta":42,"style":42},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[126,156421,156422,156432,156441,156451],{"__ignoreMap":42},[129,156423,156424,156427,156429],{"class":131,"line":132},[129,156425,156426],{"class":139},"name1 ",[129,156428,185],{"class":135},[129,156430,156431],{"class":244}," '小明'\n",[129,156433,156434,156437,156439],{"class":131,"line":51},[129,156435,156436],{"class":139},"name2 ",[129,156438,185],{"class":135},[129,156440,149354],{"class":244},[129,156442,156443,156446,156448],{"class":131,"line":1194},[129,156444,156445],{"class":139},"text ",[129,156447,185],{"class":135},[129,156449,156450],{"class":244}," \"\"\"这是多行字符串\n",[129,156452,156453],{"class":131,"line":1209},[129,156454,156455],{"class":244},"可以换行\"\"\"\n",[14,156457,156458],{},"字符串中包含引号：",[120,156460,156462],{"className":30379,"code":156461,"language":30381,"meta":42,"style":42},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[126,156463,156464,156474,156484],{"__ignoreMap":42},[129,156465,156466,156469,156471],{"class":131,"line":132},[129,156467,156468],{"class":139},"msg ",[129,156470,185],{"class":135},[129,156472,156473],{"class":244}," \"他说:'你好'\"\n",[129,156475,156476,156479,156481],{"class":131,"line":51},[129,156477,156478],{"class":139},"msg2 ",[129,156480,185],{"class":135},[129,156482,156483],{"class":244}," '他说:\"你好\"'\n",[129,156485,156486,156489,156491,156494,156497,156500,156502],{"class":131,"line":1194},[129,156487,156488],{"class":139},"msg3 ",[129,156490,185],{"class":135},[129,156492,156493],{"class":244}," \"他说:",[129,156495,156496],{"class":188},"\\\"",[129,156498,156499],{"class":244},"你好",[129,156501,156496],{"class":188},[129,156503,25134],{"class":244},[14,156505,156506],{},"常见转义字符：",[277,156508,156509,156518],{},[280,156510,156511],{},[283,156512,156513,156516],{},[286,156514,156515],{},"写法",[286,156517,100701],{},[324,156519,156520,156530,156539,156549,156558],{},[283,156521,156522,156527],{},[329,156523,156524],{},[126,156525,156526],{},"\\n",[329,156528,156529],{},"换行",[283,156531,156532,156536],{},[329,156533,156534],{},[126,156535,1245],{},[329,156537,156538],{},"制表符",[283,156540,156541,156546],{},[329,156542,156543],{},[126,156544,156545],{},"\\\\",[329,156547,156548],{},"反斜杠",[283,156550,156551,156555],{},[329,156552,156553],{},[126,156554,156496],{},[329,156556,156557],{},"双引号",[283,156559,156560,156565],{},[329,156561,156562],{},[126,156563,156564],{},"\\'",[329,156566,156567],{},"单引号",[71,156569,156571],{"id":156570},"_29-字符串拼接","2.9 字符串拼接",[120,156573,156575],{"className":30379,"code":156574,"language":30381,"meta":42,"style":42},"name = \"小明\"\nprint(\"你好，\" + name)\n",[126,156576,156577,156585],{"__ignoreMap":42},[129,156578,156579,156581,156583],{"class":131,"line":132},[129,156580,146537],{"class":139},[129,156582,185],{"class":135},[129,156584,149354],{"class":244},[129,156586,156587,156589,156591,156594,156596],{"class":131,"line":51},[129,156588,30416],{"class":188},[129,156590,140],{"class":139},[129,156592,156593],{"class":244},"\"你好，\"",[129,156595,45567],{"class":135},[129,156597,156598],{"class":139}," name)\n",[14,156600,156601],{},"字符串只能和字符串拼接：",[120,156603,156605],{"className":30379,"code":156604,"language":30381,"meta":42,"style":42},"age = 18\nprint(\"年龄:\" + str(age))\n",[126,156606,156607,156615],{"__ignoreMap":42},[129,156608,156609,156611,156613],{"class":131,"line":132},[129,156610,146547],{"class":139},[129,156612,185],{"class":135},[129,156614,146552],{"class":188},[129,156616,156617,156619,156621,156623,156625,156627],{"class":131,"line":51},[129,156618,30416],{"class":188},[129,156620,140],{"class":139},[129,156622,146518],{"class":244},[129,156624,45567],{"class":135},[129,156626,73920],{"class":188},[129,156628,156629],{"class":139},"(age))\n",[14,156631,156632],{},"更推荐使用格式化字符串。",[71,156634,156636],{"id":156635},"_210-字符串格式化","2.10 字符串格式化",[100,156638,156640],{"id":156639},"_2101-百分号格式化","2.10.1 百分号格式化",[120,156642,156644],{"className":30379,"code":156643,"language":30381,"meta":42,"style":42},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[126,156645,156646,156654,156662,156671,156675],{"__ignoreMap":42},[129,156647,156648,156650,156652],{"class":131,"line":132},[129,156649,146537],{"class":139},[129,156651,185],{"class":135},[129,156653,149354],{"class":244},[129,156655,156656,156658,156660],{"class":131,"line":51},[129,156657,146547],{"class":139},[129,156659,185],{"class":135},[129,156661,146552],{"class":188},[129,156663,156664,156666,156668],{"class":131,"line":1194},[129,156665,155359],{"class":139},[129,156667,185],{"class":135},[129,156669,156670],{"class":188}," 95.5\n",[129,156672,156673],{"class":131,"line":1209},[129,156674,2414],{"emptyLinePlaceholder":56},[129,156676,156677,156679,156681,156684,156687,156690,156693,156696,156699,156701,156703],{"class":131,"line":1215},[129,156678,30416],{"class":188},[129,156680,140],{"class":139},[129,156682,156683],{"class":244},"\"姓名:",[129,156685,156686],{"class":188},"%s",[129,156688,156689],{"class":244}," 年龄:",[129,156691,156692],{"class":188},"%d",[129,156694,156695],{"class":244}," 分数:",[129,156697,156698],{"class":188},"%.1f",[129,156700,390],{"class":244},[129,156702,156082],{"class":135},[129,156704,156705],{"class":139}," (name, age, score))\n",[14,156707,156708],{},"常用占位符：",[277,156710,156711,156720],{},[280,156712,156713],{},[283,156714,156715,156718],{},[286,156716,156717],{},"占位符",[286,156719,25870],{},[324,156721,156722,156730,156738],{},[283,156723,156724,156728],{},[329,156725,156726],{},[126,156727,156686],{},[329,156729,155225],{},[283,156731,156732,156736],{},[329,156733,156734],{},[126,156735,156692],{},[329,156737,155203],{},[283,156739,156740,156745],{},[329,156741,156742],{},[126,156743,156744],{},"%f",[329,156746,155214],{},[14,156748,156749],{},"精度控制：",[120,156751,156753],{"className":30379,"code":156752,"language":30381,"meta":42,"style":42},"price = 12.3456\nprint(\"%.2f\" % price)\n",[126,156754,156755,156764],{"__ignoreMap":42},[129,156756,156757,156759,156761],{"class":131,"line":132},[129,156758,146682],{"class":139},[129,156760,185],{"class":135},[129,156762,156763],{"class":188}," 12.3456\n",[129,156765,156766,156768,156770,156772,156775,156777,156779],{"class":131,"line":51},[129,156767,30416],{"class":188},[129,156769,140],{"class":139},[129,156771,390],{"class":244},[129,156773,156774],{"class":188},"%.2f",[129,156776,390],{"class":244},[129,156778,156082],{"class":135},[129,156780,156781],{"class":139}," price)\n",[100,156783,156785],{"id":156784},"_2102-format方法","2.10.2 format方法",[120,156787,156789],{"className":30379,"code":156788,"language":30381,"meta":42,"style":42},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[126,156790,156791,156799,156807,156811,156830,156850],{"__ignoreMap":42},[129,156792,156793,156795,156797],{"class":131,"line":132},[129,156794,146537],{"class":139},[129,156796,185],{"class":135},[129,156798,149354],{"class":244},[129,156800,156801,156803,156805],{"class":131,"line":51},[129,156802,146547],{"class":139},[129,156804,185],{"class":135},[129,156806,146552],{"class":188},[129,156808,156809],{"class":131,"line":1194},[129,156810,2414],{"emptyLinePlaceholder":56},[129,156812,156813,156815,156817,156819,156821,156823,156825,156827],{"class":131,"line":1209},[129,156814,30416],{"class":188},[129,156816,140],{"class":139},[129,156818,156683],{"class":244},[129,156820,32460],{"class":188},[129,156822,156689],{"class":244},[129,156824,32460],{"class":188},[129,156826,390],{"class":244},[129,156828,156829],{"class":139},".format(name, age))\n",[129,156831,156832,156834,156836,156838,156841,156843,156846,156848],{"class":131,"line":1215},[129,156833,30416],{"class":188},[129,156835,140],{"class":139},[129,156837,156683],{"class":244},[129,156839,156840],{"class":188},"{0}",[129,156842,156689],{"class":244},[129,156844,156845],{"class":188},"{1}",[129,156847,390],{"class":244},[129,156849,156829],{"class":139},[129,156851,156852,156854,156856,156858,156861,156863,156866,156868,156871,156873,156875,156878,156880,156882],{"class":131,"line":1229},[129,156853,30416],{"class":188},[129,156855,140],{"class":139},[129,156857,156683],{"class":244},[129,156859,156860],{"class":188},"{name}",[129,156862,156689],{"class":244},[129,156864,156865],{"class":188},"{age}",[129,156867,390],{"class":244},[129,156869,156870],{"class":139},".format(",[129,156872,79811],{"class":5231},[129,156874,185],{"class":135},[129,156876,156877],{"class":139},"name, ",[129,156879,70222],{"class":5231},[129,156881,185],{"class":135},[129,156883,156884],{"class":139},"age))\n",[100,156886,156888],{"id":156887},"_2103-f-string","2.10.3 f-string",[14,156890,156891],{},"推荐写法：",[120,156893,156895],{"className":30379,"code":156894,"language":30381,"meta":42,"style":42},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[126,156896,156897,156905,156913,156921,156925],{"__ignoreMap":42},[129,156898,156899,156901,156903],{"class":131,"line":132},[129,156900,146537],{"class":139},[129,156902,185],{"class":135},[129,156904,149354],{"class":244},[129,156906,156907,156909,156911],{"class":131,"line":51},[129,156908,146547],{"class":139},[129,156910,185],{"class":135},[129,156912,146552],{"class":188},[129,156914,156915,156917,156919],{"class":131,"line":1194},[129,156916,155359],{"class":139},[129,156918,185],{"class":135},[129,156920,156670],{"class":188},[129,156922,156923],{"class":131,"line":1209},[129,156924,2414],{"emptyLinePlaceholder":56},[129,156926,156927,156929,156931,156933,156935,156937,156939,156941,156943,156945,156947,156949,156951,156953,156956,156959,156961,156963],{"class":131,"line":1215},[129,156928,30416],{"class":188},[129,156930,140],{"class":139},[129,156932,192],{"class":135},[129,156934,156683],{"class":244},[129,156936,1035],{"class":188},[129,156938,79811],{"class":139},[129,156940,1085],{"class":188},[129,156942,156689],{"class":244},[129,156944,1035],{"class":188},[129,156946,70222],{"class":139},[129,156948,1085],{"class":188},[129,156950,156695],{"class":244},[129,156952,1035],{"class":188},[129,156954,156955],{"class":139},"score",[129,156957,156958],{"class":135},":.1f",[129,156960,1085],{"class":188},[129,156962,390],{"class":244},[129,156964,146],{"class":139},[14,156966,156967],{},"表达式也可以放进去：",[120,156969,156971],{"className":30379,"code":156970,"language":30381,"meta":42,"style":42},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[126,156972,156973,156981,156989],{"__ignoreMap":42},[129,156974,156975,156977,156979],{"class":131,"line":132},[129,156976,146682],{"class":139},[129,156978,185],{"class":135},[129,156980,146687],{"class":188},[129,156982,156983,156985,156987],{"class":131,"line":51},[129,156984,146692],{"class":139},[129,156986,185],{"class":135},[129,156988,54428],{"class":188},[129,156990,156991,156993,156995,156997,157000,157002,157004,157006,157009,157011,157014],{"class":131,"line":1194},[129,156992,30416],{"class":188},[129,156994,140],{"class":139},[129,156996,192],{"class":135},[129,156998,156999],{"class":244},"\"总价:",[129,157001,1035],{"class":188},[129,157003,146682],{"class":139},[129,157005,594],{"class":135},[129,157007,157008],{"class":139}," count",[129,157010,1085],{"class":188},[129,157012,157013],{"class":244},"元\"",[129,157015,146],{"class":139},[71,157017,157019],{"id":157018},"_211-input输入","2.11 input输入",[14,157021,157022,157025],{},[126,157023,157024],{},"input()"," 会暂停程序，等待用户输入。",[120,157027,157029],{"className":30379,"code":157028,"language":30381,"meta":42,"style":42},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[126,157030,157031,157045],{"__ignoreMap":42},[129,157032,157033,157035,157037,157039,157041,157043],{"class":131,"line":132},[129,157034,146537],{"class":139},[129,157036,185],{"class":135},[129,157038,60606],{"class":188},[129,157040,140],{"class":139},[129,157042,152380],{"class":244},[129,157044,146],{"class":139},[129,157046,157047,157049,157051,157053,157056,157058,157060,157062,157064],{"class":131,"line":51},[129,157048,30416],{"class":188},[129,157050,140],{"class":139},[129,157052,192],{"class":135},[129,157054,157055],{"class":244},"\"你好，",[129,157057,1035],{"class":188},[129,157059,79811],{"class":139},[129,157061,1085],{"class":188},[129,157063,390],{"class":244},[129,157065,146],{"class":139},[14,157067,157068],{},"输入整数：",[120,157070,157072],{"className":30379,"code":157071,"language":30381,"meta":42,"style":42},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[126,157073,157074,157092],{"__ignoreMap":42},[129,157075,157076,157078,157080,157082,157084,157086,157088,157090],{"class":131,"line":132},[129,157077,146547],{"class":139},[129,157079,185],{"class":135},[129,157081,2396],{"class":188},[129,157083,140],{"class":139},[129,157085,53822],{"class":188},[129,157087,140],{"class":139},[129,157089,152395],{"class":244},[129,157091,30498],{"class":139},[129,157093,157094,157096,157098,157100,157103,157105,157107,157109,157112,157114],{"class":131,"line":51},[129,157095,30416],{"class":188},[129,157097,140],{"class":139},[129,157099,192],{"class":135},[129,157101,157102],{"class":244},"\"明年你",[129,157104,1035],{"class":188},[129,157106,146547],{"class":139},[129,157108,620],{"class":135},[129,157110,157111],{"class":188}," 1}",[129,157113,149405],{"class":244},[129,157115,146],{"class":139},[14,157117,157118],{},"输入小数：",[120,157120,157122],{"className":30379,"code":157121,"language":30381,"meta":42,"style":42},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[126,157123,157124,157143],{"__ignoreMap":42},[129,157125,157126,157128,157130,157132,157134,157136,157138,157141],{"class":131,"line":132},[129,157127,155332],{"class":139},[129,157129,185],{"class":135},[129,157131,109798],{"class":188},[129,157133,140],{"class":139},[129,157135,53822],{"class":188},[129,157137,140],{"class":139},[129,157139,157140],{"class":244},"\"请输入身高:\"",[129,157142,30498],{"class":139},[129,157144,157145,157147,157149,157151,157154,157156,157158,157161,157163,157166],{"class":131,"line":51},[129,157146,30416],{"class":188},[129,157148,140],{"class":139},[129,157150,192],{"class":135},[129,157152,157153],{"class":244},"\"身高:",[129,157155,1035],{"class":188},[129,157157,24982],{"class":139},[129,157159,157160],{"class":135},":.2f",[129,157162,1085],{"class":188},[129,157164,157165],{"class":244},"米\"",[129,157167,146],{"class":139},[71,157169,157171],{"id":157170},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157173,123293],{},[83,157175,157176,157179,157182,157185],{},[86,157177,157178],{},"输入商品单价。",[86,157180,157181],{},"输入购买数量。",[86,157183,157184],{},"输入折扣，例如 0.8 表示八折。",[86,157186,157187],{},"输出最终金额，保留两位小数。",[14,157189,10050],{},[120,157191,157193],{"className":30379,"code":157192,"language":30381,"meta":42,"style":42},"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",[126,157194,157195,157214,157233,157253,157257,157277,157281,157304,157325,157347],{"__ignoreMap":42},[129,157196,157197,157199,157201,157203,157205,157207,157209,157212],{"class":131,"line":132},[129,157198,146682],{"class":139},[129,157200,185],{"class":135},[129,157202,109798],{"class":188},[129,157204,140],{"class":139},[129,157206,53822],{"class":188},[129,157208,140],{"class":139},[129,157210,157211],{"class":244},"\"请输入商品单价:\"",[129,157213,30498],{"class":139},[129,157215,157216,157218,157220,157222,157224,157226,157228,157231],{"class":131,"line":51},[129,157217,146692],{"class":139},[129,157219,185],{"class":135},[129,157221,2396],{"class":188},[129,157223,140],{"class":139},[129,157225,53822],{"class":188},[129,157227,140],{"class":139},[129,157229,157230],{"class":244},"\"请输入购买数量:\"",[129,157232,30498],{"class":139},[129,157234,157235,157238,157240,157242,157244,157246,157248,157251],{"class":131,"line":1194},[129,157236,157237],{"class":139},"discount ",[129,157239,185],{"class":135},[129,157241,109798],{"class":188},[129,157243,140],{"class":139},[129,157245,53822],{"class":188},[129,157247,140],{"class":139},[129,157249,157250],{"class":244},"\"请输入折扣:\"",[129,157252,30498],{"class":139},[129,157254,157255],{"class":131,"line":1209},[129,157256,2414],{"emptyLinePlaceholder":56},[129,157258,157259,157262,157264,157267,157269,157272,157274],{"class":131,"line":1215},[129,157260,157261],{"class":139},"total ",[129,157263,185],{"class":135},[129,157265,157266],{"class":139}," price ",[129,157268,594],{"class":135},[129,157270,157271],{"class":139}," count ",[129,157273,594],{"class":135},[129,157275,157276],{"class":139}," discount\n",[129,157278,157279],{"class":131,"line":1229},[129,157280,2414],{"emptyLinePlaceholder":56},[129,157282,157283,157285,157287,157289,157292,157294,157296,157298,157300,157302],{"class":131,"line":1235},[129,157284,30416],{"class":188},[129,157286,140],{"class":139},[129,157288,192],{"class":135},[129,157290,157291],{"class":244},"\"商品单价:",[129,157293,1035],{"class":188},[129,157295,79816],{"class":139},[129,157297,157160],{"class":135},[129,157299,1085],{"class":188},[129,157301,390],{"class":244},[129,157303,146],{"class":139},[129,157305,157306,157308,157310,157312,157315,157317,157319,157321,157323],{"class":131,"line":1326},[129,157307,30416],{"class":188},[129,157309,140],{"class":139},[129,157311,192],{"class":135},[129,157313,157314],{"class":244},"\"购买数量:",[129,157316,1035],{"class":188},[129,157318,84435],{"class":139},[129,157320,1085],{"class":188},[129,157322,390],{"class":244},[129,157324,146],{"class":139},[129,157326,157327,157329,157331,157333,157336,157338,157341,157343,157345],{"class":131,"line":1332},[129,157328,30416],{"class":188},[129,157330,140],{"class":139},[129,157332,192],{"class":135},[129,157334,157335],{"class":244},"\"折扣:",[129,157337,1035],{"class":188},[129,157339,157340],{"class":139},"discount",[129,157342,1085],{"class":188},[129,157344,390],{"class":244},[129,157346,146],{"class":139},[129,157348,157349,157351,157353,157355,157358,157360,157363,157365,157367,157369],{"class":131,"line":1344},[129,157350,30416],{"class":188},[129,157352,140],{"class":139},[129,157354,192],{"class":135},[129,157356,157357],{"class":244},"\"应付金额:",[129,157359,1035],{"class":188},[129,157361,157362],{"class":139},"total",[129,157364,157160],{"class":135},[129,157366,1085],{"class":188},[129,157368,157013],{"class":244},[129,157370,146],{"class":139},[71,157372,157374],{"id":157373},"_213-易错点","2.13 易错点",[83,157376,157377,157382,157388,157396,157399],{},[86,157378,157379,157381],{},[126,157380,157024],{}," 的结果是字符串，做运算前要转换。",[86,157383,157384,157385,28386],{},"字符串拼接时，数字要先 ",[126,157386,157387],{},"str()",[86,157389,157390,157392,157393,157395],{},[126,157391,185],{}," 是赋值，",[126,157394,2963],{}," 是比较。",[86,157397,157398],{},"Python 没有自增自减运算符。",[86,157400,157401],{},"浮点数计算可能有精度误差：",[120,157403,157405],{"className":30379,"code":157404,"language":30381,"meta":42,"style":42},"print(0.1 + 0.2)\n",[126,157406,157407],{"__ignoreMap":42},[129,157408,157409,157411,157413,157415,157417,157420],{"class":131,"line":132},[129,157410,30416],{"class":188},[129,157412,140],{"class":139},[129,157414,86211],{"class":188},[129,157416,45567],{"class":135},[129,157418,157419],{"class":188}," 0.2",[129,157421,146],{"class":139},[14,157423,157424,157425,157428],{},"金额计算如果要求严格，可以后续学习 ",[126,157426,157427],{},"decimal"," 模块。",[71,157430,157432],{"id":157431},"_214-本章练习","2.14 本章练习",[83,157434,157435,157438,157441,157444,157447],{},[86,157436,157437],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[86,157439,157440],{},"输入圆的半径，计算面积，保留两位小数。",[86,157442,157443],{},"输入工资和奖金，计算总收入。",[86,157445,157446],{},"输入摄氏温度，转换为华氏温度。",[86,157448,157449],{},"写一个 BMI 计算程序：",[120,157451,157454],{"className":157452,"code":157453,"language":5202,"meta":42},[5200],"BMI = 体重kg \u002F 身高m ** 2\n",[126,157455,157453],{"__ignoreMap":42},[5141,157457,157458],{},"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":42,"searchDepth":51,"depth":51,"links":157460},[157461,157462,157463,157464,157465,157466,157467,157473,157474,157475,157480,157481,157482,157483],{"id":155022,"depth":51,"text":155023},{"id":155131,"depth":51,"text":155132},{"id":155302,"depth":51,"text":155303},{"id":155379,"depth":51,"text":155380},{"id":50732,"depth":51,"text":50733},{"id":155685,"depth":51,"text":155686},{"id":155911,"depth":51,"text":155912,"children":157468},[157469,157470,157471,157472],{"id":155915,"depth":1194,"text":155916},{"id":156109,"depth":1194,"text":156110},{"id":156197,"depth":1194,"text":156198},{"id":156303,"depth":1194,"text":156304},{"id":156412,"depth":51,"text":156413},{"id":156570,"depth":51,"text":156571},{"id":156635,"depth":51,"text":156636,"children":157476},[157477,157478,157479],{"id":156639,"depth":1194,"text":156640},{"id":156784,"depth":1194,"text":156785},{"id":156887,"depth":1194,"text":156888},{"id":157018,"depth":51,"text":157019},{"id":157170,"depth":51,"text":157171},{"id":157373,"depth":51,"text":157374},{"id":157431,"depth":51,"text":157432},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155014,"description":53},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157490,"title":157491,"body":157492,"description":53,"extension":54,"meta":159128,"navigation":56,"path":159129,"seo":159130,"stem":159131,"__hash__":159132},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157493,"toc":159109},[157494,157497,157501,157504,157519,157522,157550,157554,157604,157606,157622,157625,157651,157654,157658,157725,157728,157744,157748,157751,157869,157872,157879,157928,157934,157938,157941,158054,158057,158061,158065,158068,158118,158122,158125,158175,158179,158182,158220,158224,158227,158273,158276,158311,158315,158320,158323,158369,158371,158438,158442,158448,158559,158568,158572,158574,158585,158587,158753,158757,158759,158773,158775,158989,158993,159012,159029,159032,159078,159082,159106],[10,157495,157491],{"id":157496},"_3-判断语句",[71,157498,157500],{"id":157499},"_31-布尔值","3.1 布尔值",[14,157502,157503],{},"判断语句依赖布尔值：",[120,157505,157507],{"className":30379,"code":157506,"language":30381,"meta":42,"style":42},"True\nFalse\n",[126,157508,157509,157514],{"__ignoreMap":42},[129,157510,157511],{"class":131,"line":132},[129,157512,157513],{"class":188},"True\n",[129,157515,157516],{"class":131,"line":51},[129,157517,157518],{"class":188},"False\n",[14,157520,157521],{},"比较表达式会产生布尔值：",[120,157523,157525],{"className":30379,"code":157524,"language":30381,"meta":42,"style":42},"age = 18\nprint(age >= 18)  # True\n",[126,157526,157527,157535],{"__ignoreMap":42},[129,157528,157529,157531,157533],{"class":131,"line":132},[129,157530,146547],{"class":139},[129,157532,185],{"class":135},[129,157534,146552],{"class":188},[129,157536,157537,157539,157541,157543,157545,157547],{"class":131,"line":51},[129,157538,30416],{"class":188},[129,157540,155769],{"class":139},[129,157542,1724],{"class":135},[129,157544,156286],{"class":188},[129,157546,45809],{"class":139},[129,157548,157549],{"class":198},"# True\n",[71,157551,157553],{"id":157552},"_32-if基础语法","3.2 if基础语法",[120,157555,157557],{"className":30379,"code":157556,"language":30381,"meta":42,"style":42},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[126,157558,157559,157577,157581,157593],{"__ignoreMap":42},[129,157560,157561,157563,157565,157567,157569,157571,157573,157575],{"class":131,"line":132},[129,157562,146547],{"class":139},[129,157564,185],{"class":135},[129,157566,2396],{"class":188},[129,157568,140],{"class":139},[129,157570,53822],{"class":188},[129,157572,140],{"class":139},[129,157574,152395],{"class":244},[129,157576,30498],{"class":139},[129,157578,157579],{"class":131,"line":51},[129,157580,2414],{"emptyLinePlaceholder":56},[129,157582,157583,157585,157587,157589,157591],{"class":131,"line":1194},[129,157584,1545],{"class":135},[129,157586,15722],{"class":139},[129,157588,1724],{"class":135},[129,157590,156286],{"class":188},[129,157592,3753],{"class":139},[129,157594,157595,157597,157599,157602],{"class":131,"line":1209},[129,157596,31300],{"class":188},[129,157598,140],{"class":139},[129,157600,157601],{"class":244},"\"可以进入网吧\"",[129,157603,146],{"class":139},[14,157605,9040],{},[83,157607,157608,157613,157616,157619],{},[86,157609,157610,157612],{},[126,157611,1545],{}," 后面是条件表达式。",[86,157614,157615],{},"条件后面必须写冒号。",[86,157617,157618],{},"条件成立时执行缩进代码块。",[86,157620,157621],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157623,157624],{},"错误示例：",[120,157626,157628],{"className":30379,"code":157627,"language":30381,"meta":42,"style":42},"if age >= 18\n    print(\"可以进入\")\n",[126,157629,157630,157640],{"__ignoreMap":42},[129,157631,157632,157634,157636,157638],{"class":131,"line":132},[129,157633,1545],{"class":135},[129,157635,15722],{"class":139},[129,157637,1724],{"class":135},[129,157639,146552],{"class":188},[129,157641,157642,157644,157646,157649],{"class":131,"line":51},[129,157643,31300],{"class":188},[129,157645,140],{"class":139},[129,157647,157648],{"class":244},"\"可以进入\"",[129,157650,146],{"class":139},[14,157652,157653],{},"缺少冒号。",[71,157655,157657],{"id":157656},"_33-if-else","3.3 if else",[120,157659,157661],{"className":30379,"code":157660,"language":30381,"meta":42,"style":42},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[126,157662,157663,157681,157685,157697,157708,157714],{"__ignoreMap":42},[129,157664,157665,157667,157669,157671,157673,157675,157677,157679],{"class":131,"line":132},[129,157666,146547],{"class":139},[129,157668,185],{"class":135},[129,157670,2396],{"class":188},[129,157672,140],{"class":139},[129,157674,53822],{"class":188},[129,157676,140],{"class":139},[129,157678,152395],{"class":244},[129,157680,30498],{"class":139},[129,157682,157683],{"class":131,"line":51},[129,157684,2414],{"emptyLinePlaceholder":56},[129,157686,157687,157689,157691,157693,157695],{"class":131,"line":1194},[129,157688,1545],{"class":135},[129,157690,15722],{"class":139},[129,157692,1724],{"class":135},[129,157694,156286],{"class":188},[129,157696,3753],{"class":139},[129,157698,157699,157701,157703,157706],{"class":131,"line":1209},[129,157700,31300],{"class":188},[129,157702,140],{"class":139},[129,157704,157705],{"class":244},"\"成年人\"",[129,157707,146],{"class":139},[129,157709,157710,157712],{"class":131,"line":1215},[129,157711,1715],{"class":135},[129,157713,3753],{"class":139},[129,157715,157716,157718,157720,157723],{"class":131,"line":1229},[129,157717,31300],{"class":188},[129,157719,140],{"class":139},[129,157721,157722],{"class":244},"\"未成年人\"",[129,157724,146],{"class":139},[14,157726,157727],{},"执行逻辑：",[83,157729,157730,157736,157741],{},[86,157731,157732,157733,157735],{},"条件成立，执行 ",[126,157734,1545],{}," 代码块。",[86,157737,157738,157739,157735],{},"条件不成立，执行 ",[126,157740,1715],{},[86,157742,157743],{},"两个代码块只会执行其中一个。",[71,157745,157747],{"id":157746},"_34-if-elif-else","3.4 if elif else",[14,157749,157750],{},"多条件判断：",[120,157752,157754],{"className":30379,"code":157753,"language":30381,"meta":42,"style":42},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[126,157755,157756,157774,157778,157792,157803,157817,157828,157841,157852,157858],{"__ignoreMap":42},[129,157757,157758,157760,157762,157764,157766,157768,157770,157772],{"class":131,"line":132},[129,157759,155359],{"class":139},[129,157761,185],{"class":135},[129,157763,2396],{"class":188},[129,157765,140],{"class":139},[129,157767,53822],{"class":188},[129,157769,140],{"class":139},[129,157771,152410],{"class":244},[129,157773,30498],{"class":139},[129,157775,157776],{"class":131,"line":51},[129,157777,2414],{"emptyLinePlaceholder":56},[129,157779,157780,157782,157785,157787,157790],{"class":131,"line":1194},[129,157781,1545],{"class":135},[129,157783,157784],{"class":139}," score ",[129,157786,1724],{"class":135},[129,157788,157789],{"class":188}," 90",[129,157791,3753],{"class":139},[129,157793,157794,157796,157798,157801],{"class":131,"line":1209},[129,157795,31300],{"class":188},[129,157797,140],{"class":139},[129,157799,157800],{"class":244},"\"优秀\"",[129,157802,146],{"class":139},[129,157804,157805,157808,157810,157812,157815],{"class":131,"line":1215},[129,157806,157807],{"class":135},"elif",[129,157809,157784],{"class":139},[129,157811,1724],{"class":135},[129,157813,157814],{"class":188}," 80",[129,157816,3753],{"class":139},[129,157818,157819,157821,157823,157826],{"class":131,"line":1229},[129,157820,31300],{"class":188},[129,157822,140],{"class":139},[129,157824,157825],{"class":244},"\"良好\"",[129,157827,146],{"class":139},[129,157829,157830,157832,157834,157836,157839],{"class":131,"line":1235},[129,157831,157807],{"class":135},[129,157833,157784],{"class":139},[129,157835,1724],{"class":135},[129,157837,157838],{"class":188}," 60",[129,157840,3753],{"class":139},[129,157842,157843,157845,157847,157850],{"class":131,"line":1326},[129,157844,31300],{"class":188},[129,157846,140],{"class":139},[129,157848,157849],{"class":244},"\"及格\"",[129,157851,146],{"class":139},[129,157853,157854,157856],{"class":131,"line":1332},[129,157855,1715],{"class":135},[129,157857,3753],{"class":139},[129,157859,157860,157862,157864,157867],{"class":131,"line":1344},[129,157861,31300],{"class":188},[129,157863,140],{"class":139},[129,157865,157866],{"class":244},"\"不及格\"",[129,157868,146],{"class":139},[14,157870,157871],{},"注意判断顺序很重要。",[14,157873,157874,157875,157878],{},"如果把 ",[126,157876,157877],{},"score >= 60"," 放在最前面：",[120,157880,157882],{"className":30379,"code":157881,"language":30381,"meta":42,"style":42},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[126,157883,157884,157896,157906,157918],{"__ignoreMap":42},[129,157885,157886,157888,157890,157892,157894],{"class":131,"line":132},[129,157887,1545],{"class":135},[129,157889,157784],{"class":139},[129,157891,1724],{"class":135},[129,157893,157838],{"class":188},[129,157895,3753],{"class":139},[129,157897,157898,157900,157902,157904],{"class":131,"line":51},[129,157899,31300],{"class":188},[129,157901,140],{"class":139},[129,157903,157849],{"class":244},[129,157905,146],{"class":139},[129,157907,157908,157910,157912,157914,157916],{"class":131,"line":1194},[129,157909,157807],{"class":135},[129,157911,157784],{"class":139},[129,157913,1724],{"class":135},[129,157915,157789],{"class":188},[129,157917,3753],{"class":139},[129,157919,157920,157922,157924,157926],{"class":131,"line":1209},[129,157921,31300],{"class":188},[129,157923,140],{"class":139},[129,157925,157800],{"class":244},[129,157927,146],{"class":139},[14,157929,157930,157931,157933],{},"成绩 95 会先满足 ",[126,157932,157877],{},"，后面的优秀分支就不会执行。",[71,157935,157937],{"id":157936},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157939,157940],{},"嵌套判断就是在一个判断内部再写判断。",[120,157942,157944],{"className":30379,"code":157943,"language":30381,"meta":42,"style":42},"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",[126,157945,157946,157964,157979,157983,157995,158009,158019,158026,158037,158043],{"__ignoreMap":42},[129,157947,157948,157950,157952,157954,157956,157958,157960,157962],{"class":131,"line":132},[129,157949,146547],{"class":139},[129,157951,185],{"class":135},[129,157953,2396],{"class":188},[129,157955,140],{"class":139},[129,157957,53822],{"class":188},[129,157959,140],{"class":139},[129,157961,152395],{"class":244},[129,157963,30498],{"class":139},[129,157965,157966,157968,157970,157972,157974,157977],{"class":131,"line":51},[129,157967,156362],{"class":139},[129,157969,185],{"class":135},[129,157971,60606],{"class":188},[129,157973,140],{"class":139},[129,157975,157976],{"class":244},"\"是否有票(y\u002Fn):\"",[129,157978,146],{"class":139},[129,157980,157981],{"class":131,"line":1194},[129,157982,2414],{"emptyLinePlaceholder":56},[129,157984,157985,157987,157989,157991,157993],{"class":131,"line":1209},[129,157986,1545],{"class":135},[129,157988,15722],{"class":139},[129,157990,1724],{"class":135},[129,157992,156286],{"class":188},[129,157994,3753],{"class":139},[129,157996,157997,157999,158002,158004,158007],{"class":131,"line":1215},[129,157998,3115],{"class":135},[129,158000,158001],{"class":139}," has_ticket ",[129,158003,2963],{"class":135},[129,158005,158006],{"class":244}," \"y\"",[129,158008,3753],{"class":139},[129,158010,158011,158013,158015,158017],{"class":131,"line":1229},[129,158012,32452],{"class":188},[129,158014,140],{"class":139},[129,158016,157648],{"class":244},[129,158018,146],{"class":139},[129,158020,158021,158024],{"class":131,"line":1235},[129,158022,158023],{"class":135},"    else",[129,158025,3753],{"class":139},[129,158027,158028,158030,158032,158035],{"class":131,"line":1326},[129,158029,32452],{"class":188},[129,158031,140],{"class":139},[129,158033,158034],{"class":244},"\"请先买票\"",[129,158036,146],{"class":139},[129,158038,158039,158041],{"class":131,"line":1332},[129,158040,1715],{"class":135},[129,158042,3753],{"class":139},[129,158044,158045,158047,158049,158052],{"class":131,"line":1344},[129,158046,31300],{"class":188},[129,158048,140],{"class":139},[129,158050,158051],{"class":244},"\"未成年人禁止进入\"",[129,158053,146],{"class":139},[14,158055,158056],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[71,158058,158060],{"id":158059},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[100,158062,158064],{"id":158063},"_361-and","3.6.1 and",[14,158066,158067],{},"两个条件都成立才成立。",[120,158069,158071],{"className":30379,"code":158070,"language":30381,"meta":42,"style":42},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[126,158072,158073,158081,158089,158093,158108],{"__ignoreMap":42},[129,158074,158075,158077,158079],{"class":131,"line":132},[129,158076,146547],{"class":139},[129,158078,185],{"class":135},[129,158080,88066],{"class":188},[129,158082,158083,158085,158087],{"class":131,"line":51},[129,158084,156362],{"class":139},[129,158086,185],{"class":135},[129,158088,153600],{"class":188},[129,158090,158091],{"class":131,"line":1194},[129,158092,2414],{"emptyLinePlaceholder":56},[129,158094,158095,158097,158099,158101,158103,158105],{"class":131,"line":1209},[129,158096,1545],{"class":135},[129,158098,15722],{"class":139},[129,158100,1724],{"class":135},[129,158102,156286],{"class":188},[129,158104,120430],{"class":135},[129,158106,158107],{"class":139}," has_ticket:\n",[129,158109,158110,158112,158114,158116],{"class":131,"line":1215},[129,158111,31300],{"class":188},[129,158113,140],{"class":139},[129,158115,157648],{"class":244},[129,158117,146],{"class":139},[100,158119,158121],{"id":158120},"_362-or","3.6.2 or",[14,158123,158124],{},"只要一个条件成立就成立。",[120,158126,158128],{"className":30379,"code":158127,"language":30381,"meta":42,"style":42},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[126,158129,158130,158139,158148,158152,158164],{"__ignoreMap":42},[129,158131,158132,158135,158137],{"class":131,"line":132},[129,158133,158134],{"class":139},"is_vip ",[129,158136,185],{"class":135},[129,158138,125808],{"class":188},[129,158140,158141,158144,158146],{"class":131,"line":51},[129,158142,158143],{"class":139},"coupon ",[129,158145,185],{"class":135},[129,158147,153600],{"class":188},[129,158149,158150],{"class":131,"line":1194},[129,158151,2414],{"emptyLinePlaceholder":56},[129,158153,158154,158156,158159,158161],{"class":131,"line":1209},[129,158155,1545],{"class":135},[129,158157,158158],{"class":139}," is_vip ",[129,158160,115091],{"class":135},[129,158162,158163],{"class":139}," coupon:\n",[129,158165,158166,158168,158170,158173],{"class":131,"line":1215},[129,158167,31300],{"class":188},[129,158169,140],{"class":139},[129,158171,158172],{"class":244},"\"可以享受优惠\"",[129,158174,146],{"class":139},[100,158176,158178],{"id":158177},"_363-not","3.6.3 not",[14,158180,158181],{},"取反。",[120,158183,158185],{"className":30379,"code":158184,"language":30381,"meta":42,"style":42},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[126,158186,158187,158196,158200,158209],{"__ignoreMap":42},[129,158188,158189,158192,158194],{"class":131,"line":132},[129,158190,158191],{"class":139},"is_closed ",[129,158193,185],{"class":135},[129,158195,125808],{"class":188},[129,158197,158198],{"class":131,"line":51},[129,158199,2414],{"emptyLinePlaceholder":56},[129,158201,158202,158204,158206],{"class":131,"line":1194},[129,158203,1545],{"class":135},[129,158205,38931],{"class":135},[129,158207,158208],{"class":139}," is_closed:\n",[129,158210,158211,158213,158215,158218],{"class":131,"line":1209},[129,158212,31300],{"class":188},[129,158214,140],{"class":139},[129,158216,158217],{"class":244},"\"店铺营业中\"",[129,158219,146],{"class":139},[71,158221,158223],{"id":158222},"_37-链式比较","3.7 链式比较",[14,158225,158226],{},"Python 支持链式比较：",[120,158228,158230],{"className":30379,"code":158229,"language":30381,"meta":42,"style":42},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[126,158231,158232,158241,158245,158262],{"__ignoreMap":42},[129,158233,158234,158236,158238],{"class":131,"line":132},[129,158235,155359],{"class":139},[129,158237,185],{"class":135},[129,158239,158240],{"class":188}," 85\n",[129,158242,158243],{"class":131,"line":51},[129,158244,2414],{"emptyLinePlaceholder":56},[129,158246,158247,158249,158251,158254,158256,158258,158260],{"class":131,"line":1194},[129,158248,1545],{"class":135},[129,158250,4107],{"class":188},[129,158252,158253],{"class":135}," \u003C=",[129,158255,157784],{"class":139},[129,158257,1602],{"class":135},[129,158259,5769],{"class":188},[129,158261,3753],{"class":139},[129,158263,158264,158266,158268,158271],{"class":131,"line":1209},[129,158265,31300],{"class":188},[129,158267,140],{"class":139},[129,158269,158270],{"class":244},"\"成绩合法\"",[129,158272,146],{"class":139},[14,158274,158275],{},"等价于：",[120,158277,158279],{"className":30379,"code":158278,"language":30381,"meta":42,"style":42},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[126,158280,158281,158301],{"__ignoreMap":42},[129,158282,158283,158285,158287,158289,158291,158293,158295,158297,158299],{"class":131,"line":132},[129,158284,1545],{"class":135},[129,158286,157784],{"class":139},[129,158288,1724],{"class":135},[129,158290,4107],{"class":188},[129,158292,120430],{"class":135},[129,158294,157784],{"class":139},[129,158296,1602],{"class":135},[129,158298,5769],{"class":188},[129,158300,3753],{"class":139},[129,158302,158303,158305,158307,158309],{"class":131,"line":51},[129,158304,31300],{"class":188},[129,158306,140],{"class":139},[129,158308,158270],{"class":244},[129,158310,146],{"class":139},[71,158312,158314],{"id":158313},"_38-真值和假值","3.8 真值和假值",[14,158316,116468,158317,158319],{},[126,158318,1545],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158321,158322],{},"假值：",[120,158324,158326],{"className":30379,"code":158325,"language":30381,"meta":42,"style":42},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[126,158327,158328,158332,158337,158341,158345,158350,158354,158358,158363],{"__ignoreMap":42},[129,158329,158330],{"class":131,"line":132},[129,158331,157518],{"class":188},[129,158333,158334],{"class":131,"line":51},[129,158335,158336],{"class":188},"None\n",[129,158338,158339],{"class":131,"line":1194},[129,158340,3099],{"class":188},[129,158342,158343],{"class":131,"line":1209},[129,158344,32343],{"class":188},[129,158346,158347],{"class":131,"line":1215},[129,158348,158349],{"class":244},"\"\"\n",[129,158351,158352],{"class":131,"line":1229},[129,158353,32358],{"class":139},[129,158355,158356],{"class":131,"line":1235},[129,158357,1990],{"class":139},[129,158359,158360],{"class":131,"line":1326},[129,158361,158362],{"class":139},"{}\n",[129,158364,158365,158367],{"class":131,"line":1332},[129,158366,155291],{"class":188},[129,158368,1990],{"class":139},[14,158370,15150],{},[120,158372,158374],{"className":30379,"code":158373,"language":30381,"meta":42,"style":42},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[126,158375,158376,158390,158394,158401,158421,158427],{"__ignoreMap":42},[129,158377,158378,158380,158382,158384,158386,158388],{"class":131,"line":132},[129,158379,146537],{"class":139},[129,158381,185],{"class":135},[129,158383,60606],{"class":188},[129,158385,140],{"class":139},[129,158387,152380],{"class":244},[129,158389,146],{"class":139},[129,158391,158392],{"class":131,"line":51},[129,158393,2414],{"emptyLinePlaceholder":56},[129,158395,158396,158398],{"class":131,"line":1194},[129,158397,1545],{"class":135},[129,158399,158400],{"class":139}," name:\n",[129,158402,158403,158405,158407,158409,158411,158413,158415,158417,158419],{"class":131,"line":1209},[129,158404,31300],{"class":188},[129,158406,140],{"class":139},[129,158408,192],{"class":135},[129,158410,157055],{"class":244},[129,158412,1035],{"class":188},[129,158414,79811],{"class":139},[129,158416,1085],{"class":188},[129,158418,390],{"class":244},[129,158420,146],{"class":139},[129,158422,158423,158425],{"class":131,"line":1215},[129,158424,1715],{"class":135},[129,158426,3753],{"class":139},[129,158428,158429,158431,158433,158436],{"class":131,"line":1229},[129,158430,31300],{"class":188},[129,158432,140],{"class":139},[129,158434,158435],{"class":244},"\"姓名不能为空\"",[129,158437,146],{"class":139},[71,158439,158441],{"id":158440},"_39-match语句","3.9 match语句",[14,158443,158444,158445,158447],{},"Python 3.10 开始支持 ",[126,158446,71266],{},"。它适合处理固定选项。",[120,158449,158451],{"className":30379,"code":158450,"language":30381,"meta":42,"style":42},"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",[126,158452,158453,158469,158473,158480,158490,158501,158510,158521,158530,158541,158548],{"__ignoreMap":42},[129,158454,158455,158458,158460,158462,158464,158467],{"class":131,"line":132},[129,158456,158457],{"class":139},"command ",[129,158459,185],{"class":135},[129,158461,60606],{"class":188},[129,158463,140],{"class":139},[129,158465,158466],{"class":244},"\"请输入命令:\"",[129,158468,146],{"class":139},[129,158470,158471],{"class":131,"line":51},[129,158472,2414],{"emptyLinePlaceholder":56},[129,158474,158475,158477],{"class":131,"line":1194},[129,158476,71266],{"class":135},[129,158478,158479],{"class":139}," command:\n",[129,158481,158482,158485,158488],{"class":131,"line":1209},[129,158483,158484],{"class":135},"    case",[129,158486,158487],{"class":244}," \"start\"",[129,158489,3753],{"class":139},[129,158491,158492,158494,158496,158499],{"class":131,"line":1215},[129,158493,32452],{"class":188},[129,158495,140],{"class":139},[129,158497,158498],{"class":244},"\"启动\"",[129,158500,146],{"class":139},[129,158502,158503,158505,158508],{"class":131,"line":1229},[129,158504,158484],{"class":135},[129,158506,158507],{"class":244}," \"stop\"",[129,158509,3753],{"class":139},[129,158511,158512,158514,158516,158519],{"class":131,"line":1235},[129,158513,32452],{"class":188},[129,158515,140],{"class":139},[129,158517,158518],{"class":244},"\"停止\"",[129,158520,146],{"class":139},[129,158522,158523,158525,158528],{"class":131,"line":1326},[129,158524,158484],{"class":135},[129,158526,158527],{"class":244}," \"restart\"",[129,158529,3753],{"class":139},[129,158531,158532,158534,158536,158539],{"class":131,"line":1332},[129,158533,32452],{"class":188},[129,158535,140],{"class":139},[129,158537,158538],{"class":244},"\"重启\"",[129,158540,146],{"class":139},[129,158542,158543,158545],{"class":131,"line":1344},[129,158544,158484],{"class":135},[129,158546,158547],{"class":139}," _:\n",[129,158549,158550,158552,158554,158557],{"class":131,"line":1626},[129,158551,32452],{"class":188},[129,158553,140],{"class":139},[129,158555,158556],{"class":244},"\"未知命令\"",[129,158558,146],{"class":139},[14,158560,158561,158562,158564,158565,158567],{},"入门阶段掌握 ",[126,158563,154659],{}," 更重要，",[126,158566,71266],{}," 可以作为补充。",[71,158569,158571],{"id":158570},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158573,123293],{},[83,158575,158576,158579,158582],{},[86,158577,158578],{},"输入成绩。",[86,158580,158581],{},"判断成绩是否合法。",[86,158583,158584],{},"输出等级。",[14,158586,10050],{},[120,158588,158590],{"className":30379,"code":158589,"language":30381,"meta":42,"style":42},"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",[126,158591,158592,158610,158614,158632,158643,158655,158666,158678,158689,158702,158713,158725,158736,158742],{"__ignoreMap":42},[129,158593,158594,158596,158598,158600,158602,158604,158606,158608],{"class":131,"line":132},[129,158595,155359],{"class":139},[129,158597,185],{"class":135},[129,158599,109798],{"class":188},[129,158601,140],{"class":139},[129,158603,53822],{"class":188},[129,158605,140],{"class":139},[129,158607,152410],{"class":244},[129,158609,30498],{"class":139},[129,158611,158612],{"class":131,"line":51},[129,158613,2414],{"emptyLinePlaceholder":56},[129,158615,158616,158618,158620,158622,158624,158626,158628,158630],{"class":131,"line":1194},[129,158617,1545],{"class":135},[129,158619,38931],{"class":135},[129,158621,4107],{"class":188},[129,158623,158253],{"class":135},[129,158625,157784],{"class":139},[129,158627,1602],{"class":135},[129,158629,5769],{"class":188},[129,158631,3753],{"class":139},[129,158633,158634,158636,158638,158641],{"class":131,"line":1209},[129,158635,31300],{"class":188},[129,158637,140],{"class":139},[129,158639,158640],{"class":244},"\"成绩不合法\"",[129,158642,146],{"class":139},[129,158644,158645,158647,158649,158651,158653],{"class":131,"line":1215},[129,158646,157807],{"class":135},[129,158648,157784],{"class":139},[129,158650,1724],{"class":135},[129,158652,157789],{"class":188},[129,158654,3753],{"class":139},[129,158656,158657,158659,158661,158664],{"class":131,"line":1229},[129,158658,31300],{"class":188},[129,158660,140],{"class":139},[129,158662,158663],{"class":244},"\"等级:A\"",[129,158665,146],{"class":139},[129,158667,158668,158670,158672,158674,158676],{"class":131,"line":1235},[129,158669,157807],{"class":135},[129,158671,157784],{"class":139},[129,158673,1724],{"class":135},[129,158675,157814],{"class":188},[129,158677,3753],{"class":139},[129,158679,158680,158682,158684,158687],{"class":131,"line":1326},[129,158681,31300],{"class":188},[129,158683,140],{"class":139},[129,158685,158686],{"class":244},"\"等级:B\"",[129,158688,146],{"class":139},[129,158690,158691,158693,158695,158697,158700],{"class":131,"line":1332},[129,158692,157807],{"class":135},[129,158694,157784],{"class":139},[129,158696,1724],{"class":135},[129,158698,158699],{"class":188}," 70",[129,158701,3753],{"class":139},[129,158703,158704,158706,158708,158711],{"class":131,"line":1344},[129,158705,31300],{"class":188},[129,158707,140],{"class":139},[129,158709,158710],{"class":244},"\"等级:C\"",[129,158712,146],{"class":139},[129,158714,158715,158717,158719,158721,158723],{"class":131,"line":1626},[129,158716,157807],{"class":135},[129,158718,157784],{"class":139},[129,158720,1724],{"class":135},[129,158722,157838],{"class":188},[129,158724,3753],{"class":139},[129,158726,158727,158729,158731,158734],{"class":131,"line":1631},[129,158728,31300],{"class":188},[129,158730,140],{"class":139},[129,158732,158733],{"class":244},"\"等级:D\"",[129,158735,146],{"class":139},[129,158737,158738,158740],{"class":131,"line":1637},[129,158739,1715],{"class":135},[129,158741,3753],{"class":139},[129,158743,158744,158746,158748,158751],{"class":131,"line":1642},[129,158745,31300],{"class":188},[129,158747,140],{"class":139},[129,158749,158750],{"class":244},"\"等级:E\"",[129,158752,146],{"class":139},[71,158754,158756],{"id":158755},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158758,123293],{},[83,158760,158761,158764,158767,158770],{},[86,158762,158763],{},"输入消费金额。",[86,158765,158766],{},"输入会员等级，普通、银卡、金卡。",[86,158768,158769],{},"普通不打折，银卡 9 折，金卡 8 折。",[86,158771,158772],{},"满 500 再减 50。",[14,158774,10050],{},[120,158776,158778],{"className":30379,"code":158777,"language":30381,"meta":42,"style":42},"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",[126,158779,158780,158800,158816,158820,158828,158832,158846,158856,158869,158878,158891,158899,158905,158916,158920,158934,158938,158952,158962,158966],{"__ignoreMap":42},[129,158781,158782,158785,158787,158789,158791,158793,158795,158798],{"class":131,"line":132},[129,158783,158784],{"class":139},"amount ",[129,158786,185],{"class":135},[129,158788,109798],{"class":188},[129,158790,140],{"class":139},[129,158792,53822],{"class":188},[129,158794,140],{"class":139},[129,158796,158797],{"class":244},"\"请输入消费金额:\"",[129,158799,30498],{"class":139},[129,158801,158802,158805,158807,158809,158811,158814],{"class":131,"line":51},[129,158803,158804],{"class":139},"level ",[129,158806,185],{"class":135},[129,158808,60606],{"class":188},[129,158810,140],{"class":139},[129,158812,158813],{"class":244},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[129,158815,146],{"class":139},[129,158817,158818],{"class":131,"line":1194},[129,158819,2414],{"emptyLinePlaceholder":56},[129,158821,158822,158824,158826],{"class":131,"line":1209},[129,158823,157237],{"class":139},[129,158825,185],{"class":135},[129,158827,55700],{"class":188},[129,158829,158830],{"class":131,"line":1215},[129,158831,2414],{"emptyLinePlaceholder":56},[129,158833,158834,158836,158839,158841,158844],{"class":131,"line":1229},[129,158835,1545],{"class":135},[129,158837,158838],{"class":139}," level ",[129,158840,2963],{"class":135},[129,158842,158843],{"class":244}," \"银卡\"",[129,158845,3753],{"class":139},[129,158847,158848,158851,158853],{"class":131,"line":1235},[129,158849,158850],{"class":139},"    discount ",[129,158852,185],{"class":135},[129,158854,158855],{"class":188}," 0.9\n",[129,158857,158858,158860,158862,158864,158867],{"class":131,"line":1326},[129,158859,157807],{"class":135},[129,158861,158838],{"class":139},[129,158863,2963],{"class":135},[129,158865,158866],{"class":244}," \"金卡\"",[129,158868,3753],{"class":139},[129,158870,158871,158873,158875],{"class":131,"line":1332},[129,158872,158850],{"class":139},[129,158874,185],{"class":135},[129,158876,158877],{"class":188}," 0.8\n",[129,158879,158880,158882,158884,158886,158889],{"class":131,"line":1344},[129,158881,157807],{"class":135},[129,158883,158838],{"class":139},[129,158885,2963],{"class":135},[129,158887,158888],{"class":244}," \"普通\"",[129,158890,3753],{"class":139},[129,158892,158893,158895,158897],{"class":131,"line":1626},[129,158894,158850],{"class":139},[129,158896,185],{"class":135},[129,158898,55700],{"class":188},[129,158900,158901,158903],{"class":131,"line":1631},[129,158902,1715],{"class":135},[129,158904,3753],{"class":139},[129,158906,158907,158909,158911,158914],{"class":131,"line":1637},[129,158908,31300],{"class":188},[129,158910,140],{"class":139},[129,158912,158913],{"class":244},"\"会员等级输入错误，按普通会员计算\"",[129,158915,146],{"class":139},[129,158917,158918],{"class":131,"line":1642},[129,158919,2414],{"emptyLinePlaceholder":56},[129,158921,158922,158925,158927,158930,158932],{"class":131,"line":1656},[129,158923,158924],{"class":139},"pay ",[129,158926,185],{"class":135},[129,158928,158929],{"class":139}," amount ",[129,158931,594],{"class":135},[129,158933,157276],{"class":139},[129,158935,158936],{"class":131,"line":1661},[129,158937,2414],{"emptyLinePlaceholder":56},[129,158939,158940,158942,158945,158947,158950],{"class":131,"line":1667},[129,158941,1545],{"class":135},[129,158943,158944],{"class":139}," pay ",[129,158946,1724],{"class":135},[129,158948,158949],{"class":188}," 500",[129,158951,3753],{"class":139},[129,158953,158954,158957,158959],{"class":131,"line":1688},[129,158955,158956],{"class":139},"    pay ",[129,158958,150253],{"class":135},[129,158960,158961],{"class":188}," 50\n",[129,158963,158964],{"class":131,"line":1693},[129,158965,2414],{"emptyLinePlaceholder":56},[129,158967,158968,158970,158972,158974,158976,158978,158981,158983,158985,158987],{"class":131,"line":1707},[129,158969,30416],{"class":188},[129,158971,140],{"class":139},[129,158973,192],{"class":135},[129,158975,157357],{"class":244},[129,158977,1035],{"class":188},[129,158979,158980],{"class":139},"pay",[129,158982,157160],{"class":135},[129,158984,1085],{"class":188},[129,158986,157013],{"class":244},[129,158988,146],{"class":139},[71,158990,158992],{"id":158991},"_312-易错点","3.12 易错点",[83,158994,158995,158998,159001,159004,159009],{},[86,158996,158997],{},"冒号不能漏。",[86,158999,159000],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[86,159002,159003],{},"多分支判断要注意顺序。",[86,159005,159006,159007,28386],{},"判断相等用 ",[126,159008,2963],{},[86,159010,159011],{},"字符串比较区分大小写：",[120,159013,159015],{"className":30379,"code":159014,"language":30381,"meta":42,"style":42},"\"Y\" == \"y\"  # False\n",[126,159016,159017],{"__ignoreMap":42},[129,159018,159019,159022,159024,159026],{"class":131,"line":132},[129,159020,159021],{"class":244},"\"Y\"",[129,159023,101560],{"class":135},[129,159025,158006],{"class":244},[129,159027,159028],{"class":198},"  # False\n",[14,159030,159031],{},"可转换后再判断：",[120,159033,159035],{"className":30379,"code":159034,"language":30381,"meta":42,"style":42},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[126,159036,159037,159054,159067],{"__ignoreMap":42},[129,159038,159039,159042,159044,159046,159048,159051],{"class":131,"line":132},[129,159040,159041],{"class":139},"answer ",[129,159043,185],{"class":135},[129,159045,60606],{"class":188},[129,159047,140],{"class":139},[129,159049,159050],{"class":244},"\"是否继续(y\u002Fn):\"",[129,159052,159053],{"class":139},").lower()\n",[129,159055,159056,159058,159061,159063,159065],{"class":131,"line":51},[129,159057,1545],{"class":135},[129,159059,159060],{"class":139}," answer ",[129,159062,2963],{"class":135},[129,159064,158006],{"class":244},[129,159066,3753],{"class":139},[129,159068,159069,159071,159073,159076],{"class":131,"line":1194},[129,159070,31300],{"class":188},[129,159072,140],{"class":139},[129,159074,159075],{"class":244},"\"继续\"",[129,159077,146],{"class":139},[71,159079,159081],{"id":159080},"_313-本章练习","3.13 本章练习",[83,159083,159084,159087,159090,159093,159103],{},[86,159085,159086],{},"输入年龄，判断是否成年。",[86,159088,159089],{},"输入年份，判断是否为闰年。",[86,159091,159092],{},"输入三个数字，输出最大值。",[86,159094,159095,159096,159099,159100,159102],{},"写登录判断：用户名是 ",[126,159097,159098],{},"admin"," 且密码是 ",[126,159101,15099],{}," 才登录成功。",[86,159104,159105],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5141,159107,159108],{},"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":42,"searchDepth":51,"depth":51,"links":159110},[159111,159112,159113,159114,159115,159116,159121,159122,159123,159124,159125,159126,159127],{"id":157499,"depth":51,"text":157500},{"id":157552,"depth":51,"text":157553},{"id":157656,"depth":51,"text":157657},{"id":157746,"depth":51,"text":157747},{"id":157936,"depth":51,"text":157937},{"id":158059,"depth":51,"text":158060,"children":159117},[159118,159119,159120],{"id":158063,"depth":1194,"text":158064},{"id":158120,"depth":1194,"text":158121},{"id":158177,"depth":1194,"text":158178},{"id":158222,"depth":51,"text":158223},{"id":158313,"depth":51,"text":158314},{"id":158440,"depth":51,"text":158441},{"id":158570,"depth":51,"text":158571},{"id":158755,"depth":51,"text":158756},{"id":158991,"depth":51,"text":158992},{"id":159080,"depth":51,"text":159081},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157491,"description":53},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159134,"title":159135,"body":159136,"description":53,"extension":54,"meta":160905,"navigation":56,"path":160906,"seo":160907,"stem":160908,"__hash__":160909},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159137,"toc":160885},[159138,159141,159145,159151,159154,159171,159175,159177,159194,159196,159241,159243,159260,159264,159267,159333,159336,159354,159358,159519,159528,159532,159536,159541,159588,159590,159596,159600,159605,159652,159654,159660,159664,159669,159705,159708,159755,159759,159765,159823,159828,159859,159864,159868,159923,159926,159998,160001,160060,160064,160067,160142,160145,160149,160255,160258,160284,160288,160300,160369,160372,160464,160468,160470,160481,160483,160613,160617,160819,160827,160831,160861,160865,160882],[10,159139,159135],{"id":159140},"_4-循环语句",[71,159142,159144],{"id":159143},"_41-为什么需要循环","4.1 为什么需要循环",[14,159146,159147,159148,159150],{},"如果要输出 1 到 100，不应该写 100 行 ",[126,159149,146473],{},"，而应该用循环。",[14,159152,159153],{},"循环适合处理重复任务：",[83,159155,159156,159159,159162,159165,159168],{},[86,159157,159158],{},"重复输出。",[86,159160,159161],{},"重复输入。",[86,159163,159164],{},"遍历数据。",[86,159166,159167],{},"持续执行菜单。",[86,159169,159170],{},"批量处理文件或数据。",[71,159172,159174],{"id":159173},"_42-while循环","4.2 while循环",[14,159176,5196],{},[120,159178,159180],{"className":30379,"code":159179,"language":30381,"meta":42,"style":42},"while 条件:\n    循环体\n",[126,159181,159182,159189],{"__ignoreMap":42},[129,159183,159184,159186],{"class":131,"line":132},[129,159185,108664],{"class":135},[129,159187,159188],{"class":139}," 条件:\n",[129,159190,159191],{"class":131,"line":51},[129,159192,159193],{"class":139},"    循环体\n",[14,159195,15150],{},[120,159197,159199],{"className":30379,"code":159198,"language":30381,"meta":42,"style":42},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[126,159200,159201,159209,159213,159225,159232],{"__ignoreMap":42},[129,159202,159203,159205,159207],{"class":131,"line":132},[129,159204,100149],{"class":139},[129,159206,185],{"class":135},[129,159208,55700],{"class":188},[129,159210,159211],{"class":131,"line":51},[129,159212,2414],{"emptyLinePlaceholder":56},[129,159214,159215,159217,159219,159221,159223],{"class":131,"line":1194},[129,159216,108664],{"class":135},[129,159218,9453],{"class":139},[129,159220,1602],{"class":135},[129,159222,2162],{"class":188},[129,159224,3753],{"class":139},[129,159226,159227,159229],{"class":131,"line":1209},[129,159228,31300],{"class":188},[129,159230,159231],{"class":139},"(i)\n",[129,159233,159234,159237,159239],{"class":131,"line":1215},[129,159235,159236],{"class":139},"    i ",[129,159238,9492],{"class":135},[129,159240,55700],{"class":188},[14,159242,80930],{},[83,159244,159245,159251,159254,159257],{},[86,159246,159247,159248,28386],{},"判断条件 ",[126,159249,159250],{},"i \u003C= 5",[86,159252,159253],{},"条件成立，执行循环体。",[86,159255,159256],{},"执行完后回到条件判断。",[86,159258,159259],{},"条件不成立，退出循环。",[71,159261,159263],{"id":159262},"_43-while累加","4.3 while累加",[14,159265,159266],{},"计算 1 到 100 的和：",[120,159268,159270],{"className":30379,"code":159269,"language":30381,"meta":42,"style":42},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[126,159271,159272,159280,159288,159292,159304,159314,159322,159326],{"__ignoreMap":42},[129,159273,159274,159276,159278],{"class":131,"line":132},[129,159275,100149],{"class":139},[129,159277,185],{"class":135},[129,159279,55700],{"class":188},[129,159281,159282,159284,159286],{"class":131,"line":51},[129,159283,157261],{"class":139},[129,159285,185],{"class":135},[129,159287,47334],{"class":188},[129,159289,159290],{"class":131,"line":1194},[129,159291,2414],{"emptyLinePlaceholder":56},[129,159293,159294,159296,159298,159300,159302],{"class":131,"line":1209},[129,159295,108664],{"class":135},[129,159297,9453],{"class":139},[129,159299,1602],{"class":135},[129,159301,5769],{"class":188},[129,159303,3753],{"class":139},[129,159305,159306,159309,159311],{"class":131,"line":1215},[129,159307,159308],{"class":139},"    total ",[129,159310,9492],{"class":135},[129,159312,159313],{"class":139}," i\n",[129,159315,159316,159318,159320],{"class":131,"line":1229},[129,159317,159236],{"class":139},[129,159319,9492],{"class":135},[129,159321,55700],{"class":188},[129,159323,159324],{"class":131,"line":1235},[129,159325,2414],{"emptyLinePlaceholder":56},[129,159327,159328,159330],{"class":131,"line":1326},[129,159329,30416],{"class":188},[129,159331,159332],{"class":139},"(total)\n",[14,159334,159335],{},"核心思想：",[83,159337,159338,159343,159348],{},[86,159339,159340,159342],{},[126,159341,580],{}," 控制循环次数。",[86,159344,159345,159347],{},[126,159346,157362],{}," 保存累加结果。",[86,159349,159350,159351,159353],{},"每轮循环都要更新 ",[126,159352,580],{},"，否则可能死循环。",[71,159355,159357],{"id":159356},"_44-while猜数字","4.4 while猜数字",[120,159359,159361],{"className":30379,"code":159360,"language":30381,"meta":42,"style":42},"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",[126,159362,159363,159369,159373,159390,159398,159402,159410,159430,159439,159443,159455,159466,159476,159487,159493,159515],{"__ignoreMap":42},[129,159364,159365,159367],{"class":131,"line":132},[129,159366,30393],{"class":135},[129,159368,45329],{"class":139},[129,159370,159371],{"class":131,"line":51},[129,159372,2414],{"emptyLinePlaceholder":56},[129,159374,159375,159377,159379,159382,159384,159386,159388],{"class":131,"line":1194},[129,159376,159041],{"class":139},[129,159378,185],{"class":135},[129,159380,159381],{"class":139}," random.randint(",[129,159383,357],{"class":188},[129,159385,12450],{"class":139},[129,159387,450],{"class":188},[129,159389,146],{"class":139},[129,159391,159392,159394,159396],{"class":131,"line":1209},[129,159393,146692],{"class":139},[129,159395,185],{"class":135},[129,159397,47334],{"class":188},[129,159399,159400],{"class":131,"line":1215},[129,159401,2414],{"emptyLinePlaceholder":56},[129,159403,159404,159406,159408],{"class":131,"line":1229},[129,159405,108664],{"class":135},[129,159407,95293],{"class":188},[129,159409,3753],{"class":139},[129,159411,159412,159415,159417,159419,159421,159423,159425,159428],{"class":131,"line":1235},[129,159413,159414],{"class":139},"    guess ",[129,159416,185],{"class":135},[129,159418,2396],{"class":188},[129,159420,140],{"class":139},[129,159422,53822],{"class":188},[129,159424,140],{"class":139},[129,159426,159427],{"class":244},"\"请输入1到100之间的数字:\"",[129,159429,30498],{"class":139},[129,159431,159432,159435,159437],{"class":131,"line":1326},[129,159433,159434],{"class":139},"    count ",[129,159436,9492],{"class":135},[129,159438,55700],{"class":188},[129,159440,159441],{"class":131,"line":1332},[129,159442,2414],{"emptyLinePlaceholder":56},[129,159444,159445,159447,159450,159452],{"class":131,"line":1344},[129,159446,3115],{"class":135},[129,159448,159449],{"class":139}," guess ",[129,159451,1099],{"class":135},[129,159453,159454],{"class":139}," answer:\n",[129,159456,159457,159459,159461,159464],{"class":131,"line":1626},[129,159458,32452],{"class":188},[129,159460,140],{"class":139},[129,159462,159463],{"class":244},"\"猜大了\"",[129,159465,146],{"class":139},[129,159467,159468,159470,159472,159474],{"class":131,"line":1631},[129,159469,39294],{"class":135},[129,159471,159449],{"class":139},[129,159473,1049],{"class":135},[129,159475,159454],{"class":139},[129,159477,159478,159480,159482,159485],{"class":131,"line":1637},[129,159479,32452],{"class":188},[129,159481,140],{"class":139},[129,159483,159484],{"class":244},"\"猜小了\"",[129,159486,146],{"class":139},[129,159488,159489,159491],{"class":131,"line":1642},[129,159490,158023],{"class":135},[129,159492,3753],{"class":139},[129,159494,159495,159497,159499,159501,159504,159506,159508,159510,159513],{"class":131,"line":1656},[129,159496,32452],{"class":188},[129,159498,140],{"class":139},[129,159500,192],{"class":135},[129,159502,159503],{"class":244},"\"猜对了，一共猜了",[129,159505,1035],{"class":188},[129,159507,84435],{"class":139},[129,159509,1085],{"class":188},[129,159511,159512],{"class":244},"次\"",[129,159514,146],{"class":139},[129,159516,159517],{"class":131,"line":1661},[129,159518,31628],{"class":135},[14,159520,159521,159524,159525,159527],{},[126,159522,159523],{},"while True"," 表示无限循环，通常配合 ",[126,159526,2067],{}," 使用。",[71,159529,159531],{"id":159530},"_45-break和continue","4.5 break和continue",[100,159533,159535],{"id":159534},"_451-break","4.5.1 break",[14,159537,159538,159540],{},[126,159539,2067],{}," 直接结束整个循环。",[120,159542,159544],{"className":30379,"code":159543,"language":30381,"meta":42,"style":42},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[126,159545,159546,159566,159578,159582],{"__ignoreMap":42},[129,159547,159548,159550,159552,159554,159556,159558,159560,159562,159564],{"class":131,"line":132},[129,159549,3039],{"class":135},[129,159551,9453],{"class":139},[129,159553,26044],{"class":135},[129,159555,32444],{"class":188},[129,159557,140],{"class":139},[129,159559,357],{"class":188},[129,159561,12450],{"class":139},[129,159563,483],{"class":188},[129,159565,30787],{"class":139},[129,159567,159568,159570,159572,159574,159576],{"class":131,"line":51},[129,159569,3115],{"class":135},[129,159571,9453],{"class":139},[129,159573,2963],{"class":135},[129,159575,78071],{"class":188},[129,159577,3753],{"class":139},[129,159579,159580],{"class":131,"line":1194},[129,159581,31628],{"class":135},[129,159583,159584,159586],{"class":131,"line":1209},[129,159585,31300],{"class":188},[129,159587,159231],{"class":139},[14,159589,146458],{},[120,159591,159594],{"className":159592,"code":159593,"language":5202,"meta":42},[5200],"1\n2\n",[126,159595,159593],{"__ignoreMap":42},[100,159597,159599],{"id":159598},"_452-continue","4.5.2 continue",[14,159601,159602,159604],{},[126,159603,154673],{}," 跳过本轮剩余代码，进入下一轮循环。",[120,159606,159608],{"className":30379,"code":159607,"language":30381,"meta":42,"style":42},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[126,159609,159610,159630,159642,159646],{"__ignoreMap":42},[129,159611,159612,159614,159616,159618,159620,159622,159624,159626,159628],{"class":131,"line":132},[129,159613,3039],{"class":135},[129,159615,9453],{"class":139},[129,159617,26044],{"class":135},[129,159619,32444],{"class":188},[129,159621,140],{"class":139},[129,159623,357],{"class":188},[129,159625,12450],{"class":139},[129,159627,483],{"class":188},[129,159629,30787],{"class":139},[129,159631,159632,159634,159636,159638,159640],{"class":131,"line":51},[129,159633,3115],{"class":135},[129,159635,9453],{"class":139},[129,159637,2963],{"class":135},[129,159639,78071],{"class":188},[129,159641,3753],{"class":139},[129,159643,159644],{"class":131,"line":1194},[129,159645,148513],{"class":135},[129,159647,159648,159650],{"class":131,"line":1209},[129,159649,31300],{"class":188},[129,159651,159231],{"class":139},[14,159653,146458],{},[120,159655,159658],{"className":159656,"code":159657,"language":5202,"meta":42},[5200],"1\n2\n4\n5\n",[126,159659,159657],{"__ignoreMap":42},[71,159661,159663],{"id":159662},"_46-for循环","4.6 for循环",[14,159665,159666,159668],{},[126,159667,3039],{}," 常用于遍历序列。",[120,159670,159672],{"className":30379,"code":159671,"language":30381,"meta":42,"style":42},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[126,159673,159674,159683,159687,159698],{"__ignoreMap":42},[129,159675,159676,159678,159680],{"class":131,"line":132},[129,159677,146537],{"class":139},[129,159679,185],{"class":135},[129,159681,159682],{"class":244}," \"python\"\n",[129,159684,159685],{"class":131,"line":51},[129,159686,2414],{"emptyLinePlaceholder":56},[129,159688,159689,159691,159694,159696],{"class":131,"line":1194},[129,159690,3039],{"class":135},[129,159692,159693],{"class":139}," ch ",[129,159695,26044],{"class":135},[129,159697,158400],{"class":139},[129,159699,159700,159702],{"class":131,"line":1209},[129,159701,31300],{"class":188},[129,159703,159704],{"class":139},"(ch)\n",[14,159706,159707],{},"遍历列表：",[120,159709,159711],{"className":30379,"code":159710,"language":30381,"meta":42,"style":42},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[126,159712,159713,159735,159739,159749],{"__ignoreMap":42},[129,159714,159715,159718,159720,159722,159724,159726,159728,159730,159733],{"class":131,"line":132},[129,159716,159717],{"class":139},"students ",[129,159719,185],{"class":135},[129,159721,52227],{"class":139},[129,159723,149889],{"class":244},[129,159725,12450],{"class":139},[129,159727,150937],{"class":244},[129,159729,12450],{"class":139},[129,159731,159732],{"class":244},"\"小刚\"",[129,159734,33247],{"class":139},[129,159736,159737],{"class":131,"line":51},[129,159738,2414],{"emptyLinePlaceholder":56},[129,159740,159741,159743,159745,159747],{"class":131,"line":1194},[129,159742,3039],{"class":135},[129,159744,152138],{"class":139},[129,159746,26044],{"class":135},[129,159748,152143],{"class":139},[129,159750,159751,159753],{"class":131,"line":1209},[129,159752,31300],{"class":188},[129,159754,150043],{"class":139},[71,159756,159758],{"id":159757},"_47-range函数","4.7 range函数",[14,159760,159761,159764],{},[126,159762,159763],{},"range()"," 用于生成整数序列。",[120,159766,159768],{"className":30379,"code":159767,"language":30381,"meta":42,"style":42},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[126,159769,159770,159784,159802],{"__ignoreMap":42},[129,159771,159772,159774,159776,159778,159781],{"class":131,"line":132},[129,159773,33417],{"class":188},[129,159775,140],{"class":139},[129,159777,458],{"class":188},[129,159779,159780],{"class":139},")          ",[129,159782,159783],{"class":198},"# 0,1,2,3,4\n",[129,159785,159786,159788,159790,159792,159794,159796,159799],{"class":131,"line":51},[129,159787,33417],{"class":188},[129,159789,140],{"class":139},[129,159791,357],{"class":188},[129,159793,12450],{"class":139},[129,159795,458],{"class":188},[129,159797,159798],{"class":139},")       ",[129,159800,159801],{"class":198},"# 1,2,3,4\n",[129,159803,159804,159806,159808,159810,159812,159814,159816,159818,159820],{"class":131,"line":1194},[129,159805,33417],{"class":188},[129,159807,140],{"class":139},[129,159809,357],{"class":188},[129,159811,12450],{"class":139},[129,159813,585],{"class":188},[129,159815,12450],{"class":139},[129,159817,217],{"class":188},[129,159819,155662],{"class":139},[129,159821,159822],{"class":198},"# 1,3,5,7,9\n",[14,159824,159825,159826,24619],{},"配合 ",[126,159827,3039],{},[120,159829,159831],{"className":30379,"code":159830,"language":30381,"meta":42,"style":42},"for i in range(1, 6):\n    print(i)\n",[126,159832,159833,159853],{"__ignoreMap":42},[129,159834,159835,159837,159839,159841,159843,159845,159847,159849,159851],{"class":131,"line":132},[129,159836,3039],{"class":135},[129,159838,9453],{"class":139},[129,159840,26044],{"class":135},[129,159842,32444],{"class":188},[129,159844,140],{"class":139},[129,159846,357],{"class":188},[129,159848,12450],{"class":139},[129,159850,483],{"class":188},[129,159852,30787],{"class":139},[129,159854,159855,159857],{"class":131,"line":51},[129,159856,31300],{"class":188},[129,159858,159231],{"class":139},[14,159860,9040,159861,159863],{},[126,159862,33417],{}," 的结束值不包含在内。",[71,159865,159867],{"id":159866},"_48-for循环求和","4.8 for循环求和",[120,159869,159871],{"className":30379,"code":159870,"language":30381,"meta":42,"style":42},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[126,159872,159873,159881,159885,159905,159913,159917],{"__ignoreMap":42},[129,159874,159875,159877,159879],{"class":131,"line":132},[129,159876,157261],{"class":139},[129,159878,185],{"class":135},[129,159880,47334],{"class":188},[129,159882,159883],{"class":131,"line":51},[129,159884,2414],{"emptyLinePlaceholder":56},[129,159886,159887,159889,159891,159893,159895,159897,159899,159901,159903],{"class":131,"line":1194},[129,159888,3039],{"class":135},[129,159890,9453],{"class":139},[129,159892,26044],{"class":135},[129,159894,32444],{"class":188},[129,159896,140],{"class":139},[129,159898,357],{"class":188},[129,159900,12450],{"class":139},[129,159902,476],{"class":188},[129,159904,30787],{"class":139},[129,159906,159907,159909,159911],{"class":131,"line":1209},[129,159908,159308],{"class":139},[129,159910,9492],{"class":135},[129,159912,159313],{"class":139},[129,159914,159915],{"class":131,"line":1215},[129,159916,2414],{"emptyLinePlaceholder":56},[129,159918,159919,159921],{"class":131,"line":1229},[129,159920,30416],{"class":188},[129,159922,159332],{"class":139},[14,159924,159925],{},"求偶数和：",[120,159927,159929],{"className":30379,"code":159928,"language":30381,"meta":42,"style":42},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[126,159930,159931,159939,159943,159963,159979,159988,159992],{"__ignoreMap":42},[129,159932,159933,159935,159937],{"class":131,"line":132},[129,159934,157261],{"class":139},[129,159936,185],{"class":135},[129,159938,47334],{"class":188},[129,159940,159941],{"class":131,"line":51},[129,159942,2414],{"emptyLinePlaceholder":56},[129,159944,159945,159947,159949,159951,159953,159955,159957,159959,159961],{"class":131,"line":1194},[129,159946,3039],{"class":135},[129,159948,9453],{"class":139},[129,159950,26044],{"class":135},[129,159952,32444],{"class":188},[129,159954,140],{"class":139},[129,159956,357],{"class":188},[129,159958,12450],{"class":139},[129,159960,476],{"class":188},[129,159962,30787],{"class":139},[129,159964,159965,159967,159969,159971,159973,159975,159977],{"class":131,"line":1209},[129,159966,3115],{"class":135},[129,159968,9453],{"class":139},[129,159970,467],{"class":135},[129,159972,14770],{"class":188},[129,159974,101560],{"class":135},[129,159976,4107],{"class":188},[129,159978,3753],{"class":139},[129,159980,159981,159984,159986],{"class":131,"line":1215},[129,159982,159983],{"class":139},"        total ",[129,159985,9492],{"class":135},[129,159987,159313],{"class":139},[129,159989,159990],{"class":131,"line":1229},[129,159991,2414],{"emptyLinePlaceholder":56},[129,159993,159994,159996],{"class":131,"line":1235},[129,159995,30416],{"class":188},[129,159997,159332],{"class":139},[14,159999,160000],{},"也可以：",[120,160002,160004],{"className":30379,"code":160003,"language":30381,"meta":42,"style":42},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[126,160005,160006,160014,160018,160042,160050,160054],{"__ignoreMap":42},[129,160007,160008,160010,160012],{"class":131,"line":132},[129,160009,157261],{"class":139},[129,160011,185],{"class":135},[129,160013,47334],{"class":188},[129,160015,160016],{"class":131,"line":51},[129,160017,2414],{"emptyLinePlaceholder":56},[129,160019,160020,160022,160024,160026,160028,160030,160032,160034,160036,160038,160040],{"class":131,"line":1194},[129,160021,3039],{"class":135},[129,160023,9453],{"class":139},[129,160025,26044],{"class":135},[129,160027,32444],{"class":188},[129,160029,140],{"class":139},[129,160031,217],{"class":188},[129,160033,12450],{"class":139},[129,160035,476],{"class":188},[129,160037,12450],{"class":139},[129,160039,217],{"class":188},[129,160041,30787],{"class":139},[129,160043,160044,160046,160048],{"class":131,"line":1209},[129,160045,159308],{"class":139},[129,160047,9492],{"class":135},[129,160049,159313],{"class":139},[129,160051,160052],{"class":131,"line":1215},[129,160053,2414],{"emptyLinePlaceholder":56},[129,160055,160056,160058],{"class":131,"line":1229},[129,160057,30416],{"class":188},[129,160059,159332],{"class":139},[71,160061,160063],{"id":160062},"_49-循环嵌套","4.9 循环嵌套",[14,160065,160066],{},"嵌套循环就是循环里面再写循环。",[120,160068,160070],{"className":30379,"code":160069,"language":30381,"meta":42,"style":42},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[126,160071,160072,160092,160112],{"__ignoreMap":42},[129,160073,160074,160076,160078,160080,160082,160084,160086,160088,160090],{"class":131,"line":132},[129,160075,3039],{"class":135},[129,160077,9453],{"class":139},[129,160079,26044],{"class":135},[129,160081,32444],{"class":188},[129,160083,140],{"class":139},[129,160085,357],{"class":188},[129,160087,12450],{"class":139},[129,160089,432],{"class":188},[129,160091,30787],{"class":139},[129,160093,160094,160096,160098,160100,160102,160104,160106,160108,160110],{"class":131,"line":51},[129,160095,3215],{"class":135},[129,160097,9515],{"class":139},[129,160099,26044],{"class":135},[129,160101,32444],{"class":188},[129,160103,140],{"class":139},[129,160105,357],{"class":188},[129,160107,12450],{"class":139},[129,160109,432],{"class":188},[129,160111,30787],{"class":139},[129,160113,160114,160116,160118,160120,160123,160125,160127,160129,160132,160134,160136,160138,160140],{"class":131,"line":1194},[129,160115,32452],{"class":188},[129,160117,140],{"class":139},[129,160119,192],{"class":135},[129,160121,160122],{"class":244},"\"i=",[129,160124,1035],{"class":188},[129,160126,580],{"class":139},[129,160128,1085],{"class":188},[129,160130,160131],{"class":244},", j=",[129,160133,1035],{"class":188},[129,160135,606],{"class":139},[129,160137,1085],{"class":188},[129,160139,390],{"class":244},[129,160141,146],{"class":139},[14,160143,160144],{},"外层循环执行一次，内层循环执行完整一轮。",[71,160146,160148],{"id":160147},"_410-九九乘法表","4.10 九九乘法表",[120,160150,160152],{"className":30379,"code":160151,"language":30381,"meta":42,"style":42},"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",[126,160153,160154,160174,160197,160249],{"__ignoreMap":42},[129,160155,160156,160158,160160,160162,160164,160166,160168,160170,160172],{"class":131,"line":132},[129,160157,3039],{"class":135},[129,160159,9453],{"class":139},[129,160161,26044],{"class":135},[129,160163,32444],{"class":188},[129,160165,140],{"class":139},[129,160167,357],{"class":188},[129,160169,12450],{"class":139},[129,160171,585],{"class":188},[129,160173,30787],{"class":139},[129,160175,160176,160178,160180,160182,160184,160186,160188,160191,160193,160195],{"class":131,"line":51},[129,160177,3215],{"class":135},[129,160179,9515],{"class":139},[129,160181,26044],{"class":135},[129,160183,32444],{"class":188},[129,160185,140],{"class":139},[129,160187,357],{"class":188},[129,160189,160190],{"class":139},", i ",[129,160192,620],{"class":135},[129,160194,25119],{"class":188},[129,160196,30787],{"class":139},[129,160198,160199,160201,160203,160205,160207,160209,160211,160213,160215,160217,160219,160221,160223,160225,160227,160229,160231,160233,160235,160237,160239,160241,160243,160245,160247],{"class":131,"line":1194},[129,160200,32452],{"class":188},[129,160202,140],{"class":139},[129,160204,192],{"class":135},[129,160206,390],{"class":244},[129,160208,1035],{"class":188},[129,160210,606],{"class":139},[129,160212,1085],{"class":188},[129,160214,594],{"class":244},[129,160216,1035],{"class":188},[129,160218,580],{"class":139},[129,160220,1085],{"class":188},[129,160222,185],{"class":244},[129,160224,1035],{"class":188},[129,160226,100149],{"class":139},[129,160228,594],{"class":135},[129,160230,3424],{"class":139},[129,160232,1085],{"class":188},[129,160234,390],{"class":244},[129,160236,12450],{"class":139},[129,160238,45802],{"class":5231},[129,160240,185],{"class":135},[129,160242,390],{"class":244},[129,160244,1245],{"class":188},[129,160246,390],{"class":244},[129,160248,146],{"class":139},[129,160250,160251,160253],{"class":131,"line":1209},[129,160252,31300],{"class":188},[129,160254,1990],{"class":139},[14,160256,160257],{},"关键点：",[83,160259,160260,160266,160272,160278],{},[86,160261,160262,160263,160265],{},"外层 ",[126,160264,580],{}," 控制行。",[86,160267,160268,160269,160271],{},"内层 ",[126,160270,606],{}," 控制列。",[86,160273,160274,160275,160277],{},"每行结束后用 ",[126,160276,146473],{}," 换行。",[86,160279,160280,160283],{},[126,160281,160282],{},"end=\"\\t\""," 让同一行的内容横向排列。",[71,160285,160287],{"id":160286},"_411-循环else","4.11 循环else",[14,160289,160290,160291,160293,160294,160296,160297,160299],{},"Python 的循环可以带 ",[126,160292,1715],{},"。当循环正常结束时执行 ",[126,160295,1715],{},"，如果被 ",[126,160298,2067],{}," 打断，则不执行。",[120,160301,160303],{"className":30379,"code":160302,"language":30381,"meta":42,"style":42},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[126,160304,160305,160325,160337,160348,160352,160358],{"__ignoreMap":42},[129,160306,160307,160309,160311,160313,160315,160317,160319,160321,160323],{"class":131,"line":132},[129,160308,3039],{"class":135},[129,160310,9453],{"class":139},[129,160312,26044],{"class":135},[129,160314,32444],{"class":188},[129,160316,140],{"class":139},[129,160318,357],{"class":188},[129,160320,12450],{"class":139},[129,160322,483],{"class":188},[129,160324,30787],{"class":139},[129,160326,160327,160329,160331,160333,160335],{"class":131,"line":51},[129,160328,3115],{"class":135},[129,160330,9453],{"class":139},[129,160332,2963],{"class":135},[129,160334,2052],{"class":188},[129,160336,3753],{"class":139},[129,160338,160339,160341,160343,160346],{"class":131,"line":1194},[129,160340,32452],{"class":188},[129,160342,140],{"class":139},[129,160344,160345],{"class":244},"\"找到了\"",[129,160347,146],{"class":139},[129,160349,160350],{"class":131,"line":1209},[129,160351,31628],{"class":135},[129,160353,160354,160356],{"class":131,"line":1215},[129,160355,1715],{"class":135},[129,160357,3753],{"class":139},[129,160359,160360,160362,160364,160367],{"class":131,"line":1229},[129,160361,31300],{"class":188},[129,160363,140],{"class":139},[129,160365,160366],{"class":244},"\"没找到\"",[129,160368,146],{"class":139},[14,160370,160371],{},"常用于搜索。",[120,160373,160375],{"className":30379,"code":160374,"language":30381,"meta":42,"style":42},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[126,160376,160377,160398,160407,160411,160423,160434,160444,160448,160454],{"__ignoreMap":42},[129,160378,160379,160382,160384,160386,160388,160390,160392,160394,160396],{"class":131,"line":132},[129,160380,160381],{"class":139},"names ",[129,160383,185],{"class":135},[129,160385,52227],{"class":139},[129,160387,149889],{"class":244},[129,160389,12450],{"class":139},[129,160391,150937],{"class":244},[129,160393,12450],{"class":139},[129,160395,159732],{"class":244},[129,160397,33247],{"class":139},[129,160399,160400,160402,160404],{"class":131,"line":51},[129,160401,111579],{"class":139},[129,160403,185],{"class":135},[129,160405,160406],{"class":244}," \"小李\"\n",[129,160408,160409],{"class":131,"line":1194},[129,160410,2414],{"emptyLinePlaceholder":56},[129,160412,160413,160415,160418,160420],{"class":131,"line":1209},[129,160414,3039],{"class":135},[129,160416,160417],{"class":139}," name ",[129,160419,26044],{"class":135},[129,160421,160422],{"class":139}," names:\n",[129,160424,160425,160427,160429,160431],{"class":131,"line":1215},[129,160426,3115],{"class":135},[129,160428,160417],{"class":139},[129,160430,2963],{"class":135},[129,160432,160433],{"class":139}," target:\n",[129,160435,160436,160438,160440,160442],{"class":131,"line":1229},[129,160437,32452],{"class":188},[129,160439,140],{"class":139},[129,160441,160345],{"class":244},[129,160443,146],{"class":139},[129,160445,160446],{"class":131,"line":1235},[129,160447,31628],{"class":135},[129,160449,160450,160452],{"class":131,"line":1326},[129,160451,1715],{"class":135},[129,160453,3753],{"class":139},[129,160455,160456,160458,160460,160462],{"class":131,"line":1332},[129,160457,31300],{"class":188},[129,160459,140],{"class":139},[129,160461,160366],{"class":244},[129,160463,146],{"class":139},[71,160465,160467],{"id":160466},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160469,123293],{},[83,160471,160472,160475,160478],{},[86,160473,160474],{},"用户最多输入 3 次密码。",[86,160476,160477],{},"密码正确则登录成功。",[86,160479,160480],{},"3 次都错误则锁定账号。",[14,160482,10050],{},[120,160484,160486],{"className":30379,"code":160485,"language":30381,"meta":42,"style":42},"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",[126,160487,160488,160498,160502,160518,160534,160538,160550,160561,160565,160571,160596,160602],{"__ignoreMap":42},[129,160489,160490,160493,160495],{"class":131,"line":132},[129,160491,160492],{"class":139},"password ",[129,160494,185],{"class":135},[129,160496,160497],{"class":244}," \"123456\"\n",[129,160499,160500],{"class":131,"line":51},[129,160501,2414],{"emptyLinePlaceholder":56},[129,160503,160504,160506,160508,160510,160512,160514,160516],{"class":131,"line":1194},[129,160505,3039],{"class":135},[129,160507,9453],{"class":139},[129,160509,26044],{"class":135},[129,160511,32444],{"class":188},[129,160513,140],{"class":139},[129,160515,211],{"class":188},[129,160517,30787],{"class":139},[129,160519,160520,160523,160525,160527,160529,160532],{"class":131,"line":1209},[129,160521,160522],{"class":139},"    user_password ",[129,160524,185],{"class":135},[129,160526,60606],{"class":188},[129,160528,140],{"class":139},[129,160530,160531],{"class":244},"\"请输入密码:\"",[129,160533,146],{"class":139},[129,160535,160536],{"class":131,"line":1215},[129,160537,2414],{"emptyLinePlaceholder":56},[129,160539,160540,160542,160545,160547],{"class":131,"line":1229},[129,160541,3115],{"class":135},[129,160543,160544],{"class":139}," user_password ",[129,160546,2963],{"class":135},[129,160548,160549],{"class":139}," password:\n",[129,160551,160552,160554,160556,160559],{"class":131,"line":1235},[129,160553,32452],{"class":188},[129,160555,140],{"class":139},[129,160557,160558],{"class":244},"\"登录成功\"",[129,160560,146],{"class":139},[129,160562,160563],{"class":131,"line":1326},[129,160564,31628],{"class":135},[129,160566,160567,160569],{"class":131,"line":1332},[129,160568,158023],{"class":135},[129,160570,3753],{"class":139},[129,160572,160573,160575,160577,160579,160582,160585,160587,160589,160591,160594],{"class":131,"line":1344},[129,160574,32452],{"class":188},[129,160576,140],{"class":139},[129,160578,192],{"class":135},[129,160580,160581],{"class":244},"\"密码错误，还剩",[129,160583,160584],{"class":188},"{2",[129,160586,52272],{"class":135},[129,160588,3046],{"class":139},[129,160590,1085],{"class":188},[129,160592,160593],{"class":244},"次机会\"",[129,160595,146],{"class":139},[129,160597,160598,160600],{"class":131,"line":1626},[129,160599,1715],{"class":135},[129,160601,3753],{"class":139},[129,160603,160604,160606,160608,160611],{"class":131,"line":1631},[129,160605,31300],{"class":188},[129,160607,140],{"class":139},[129,160609,160610],{"class":244},"\"账号已锁定\"",[129,160612,146],{"class":139},[71,160614,160616],{"id":160615},"_413-小案例菜单程序","4.13 小案例：菜单程序",[120,160618,160620],{"className":30379,"code":160619,"language":30381,"meta":42,"style":42},"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",[126,160621,160622,160630,160641,160652,160663,160674,160685,160689,160704,160708,160720,160731,160743,160754,160766,160777,160789,160799,160803,160809],{"__ignoreMap":42},[129,160623,160624,160626,160628],{"class":131,"line":132},[129,160625,108664],{"class":135},[129,160627,95293],{"class":188},[129,160629,3753],{"class":139},[129,160631,160632,160634,160636,160639],{"class":131,"line":51},[129,160633,31300],{"class":188},[129,160635,140],{"class":139},[129,160637,160638],{"class":244},"\"====== 菜单 ======\"",[129,160640,146],{"class":139},[129,160642,160643,160645,160647,160650],{"class":131,"line":1194},[129,160644,31300],{"class":188},[129,160646,140],{"class":139},[129,160648,160649],{"class":244},"\"1. 查询余额\"",[129,160651,146],{"class":139},[129,160653,160654,160656,160658,160661],{"class":131,"line":1209},[129,160655,31300],{"class":188},[129,160657,140],{"class":139},[129,160659,160660],{"class":244},"\"2. 存款\"",[129,160662,146],{"class":139},[129,160664,160665,160667,160669,160672],{"class":131,"line":1215},[129,160666,31300],{"class":188},[129,160668,140],{"class":139},[129,160670,160671],{"class":244},"\"3. 取款\"",[129,160673,146],{"class":139},[129,160675,160676,160678,160680,160683],{"class":131,"line":1229},[129,160677,31300],{"class":188},[129,160679,140],{"class":139},[129,160681,160682],{"class":244},"\"0. 退出\"",[129,160684,146],{"class":139},[129,160686,160687],{"class":131,"line":1235},[129,160688,2414],{"emptyLinePlaceholder":56},[129,160690,160691,160694,160696,160698,160700,160702],{"class":131,"line":1326},[129,160692,160693],{"class":139},"    choice ",[129,160695,185],{"class":135},[129,160697,60606],{"class":188},[129,160699,140],{"class":139},[129,160701,153074],{"class":244},[129,160703,146],{"class":139},[129,160705,160706],{"class":131,"line":1332},[129,160707,2414],{"emptyLinePlaceholder":56},[129,160709,160710,160712,160714,160716,160718],{"class":131,"line":1344},[129,160711,3115],{"class":135},[129,160713,153087],{"class":139},[129,160715,2963],{"class":135},[129,160717,153092],{"class":244},[129,160719,3753],{"class":139},[129,160721,160722,160724,160726,160729],{"class":131,"line":1626},[129,160723,32452],{"class":188},[129,160725,140],{"class":139},[129,160727,160728],{"class":244},"\"余额为1000元\"",[129,160730,146],{"class":139},[129,160732,160733,160735,160737,160739,160741],{"class":131,"line":1631},[129,160734,39294],{"class":135},[129,160736,153087],{"class":139},[129,160738,2963],{"class":135},[129,160740,153111],{"class":244},[129,160742,3753],{"class":139},[129,160744,160745,160747,160749,160752],{"class":131,"line":1637},[129,160746,32452],{"class":188},[129,160748,140],{"class":139},[129,160750,160751],{"class":244},"\"存款功能\"",[129,160753,146],{"class":139},[129,160755,160756,160758,160760,160762,160764],{"class":131,"line":1642},[129,160757,39294],{"class":135},[129,160759,153087],{"class":139},[129,160761,2963],{"class":135},[129,160763,153129],{"class":244},[129,160765,3753],{"class":139},[129,160767,160768,160770,160772,160775],{"class":131,"line":1656},[129,160769,32452],{"class":188},[129,160771,140],{"class":139},[129,160773,160774],{"class":244},"\"取款功能\"",[129,160776,146],{"class":139},[129,160778,160779,160781,160783,160785,160787],{"class":131,"line":1661},[129,160780,39294],{"class":135},[129,160782,153087],{"class":139},[129,160784,2963],{"class":135},[129,160786,153183],{"class":244},[129,160788,3753],{"class":139},[129,160790,160791,160793,160795,160797],{"class":131,"line":1667},[129,160792,32452],{"class":188},[129,160794,140],{"class":139},[129,160796,153194],{"class":244},[129,160798,146],{"class":139},[129,160800,160801],{"class":131,"line":1688},[129,160802,31628],{"class":135},[129,160804,160805,160807],{"class":131,"line":1693},[129,160806,158023],{"class":135},[129,160808,3753],{"class":139},[129,160810,160811,160813,160815,160817],{"class":131,"line":1707},[129,160812,32452],{"class":188},[129,160814,140],{"class":139},[129,160816,153215],{"class":244},[129,160818,146],{"class":139},[14,160820,160821,160822,160824,160825,28386],{},"菜单类程序通常使用 ",[126,160823,159523],{},"，用户选择退出时 ",[126,160826,2067],{},[71,160828,160830],{"id":160829},"_414-易错点","4.14 易错点",[83,160832,160833,160838,160844,160852,160858],{},[86,160834,160835,160837],{},[126,160836,108664],{}," 循环必须更新控制变量。",[86,160839,160840,160843],{},[126,160841,160842],{},"range(1, 10)"," 不包含 10。",[86,160845,160846,160848,160849,160851],{},[126,160847,2067],{}," 结束整个循环，",[126,160850,154673],{}," 只跳过本轮。",[86,160853,160854,160855,160857],{},"嵌套循环中，",[126,160856,2067],{}," 只跳出当前所在的一层循环。",[86,160859,160860],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[71,160862,160864],{"id":160863},"_415-本章练习","4.15 本章练习",[83,160866,160867,160870,160873,160876,160879],{},[86,160868,160869],{},"输出 1 到 100。",[86,160871,160872],{},"计算 1 到 100 的偶数和。",[86,160874,160875],{},"输出 100 以内能被 3 和 5 同时整除的数。",[86,160877,160878],{},"编写猜数字游戏，限制最多猜 7 次。",[86,160880,160881],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5141,160883,160884],{},"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":42,"searchDepth":51,"depth":51,"links":160886},[160887,160888,160889,160890,160891,160895,160896,160897,160898,160899,160900,160901,160902,160903,160904],{"id":159143,"depth":51,"text":159144},{"id":159173,"depth":51,"text":159174},{"id":159262,"depth":51,"text":159263},{"id":159356,"depth":51,"text":159357},{"id":159530,"depth":51,"text":159531,"children":160892},[160893,160894],{"id":159534,"depth":1194,"text":159535},{"id":159598,"depth":1194,"text":159599},{"id":159662,"depth":51,"text":159663},{"id":159757,"depth":51,"text":159758},{"id":159866,"depth":51,"text":159867},{"id":160062,"depth":51,"text":160063},{"id":160147,"depth":51,"text":160148},{"id":160286,"depth":51,"text":160287},{"id":160466,"depth":51,"text":160467},{"id":160615,"depth":51,"text":160616},{"id":160829,"depth":51,"text":160830},{"id":160863,"depth":51,"text":160864},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159135,"description":53},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160911,"title":160912,"body":160913,"description":53,"extension":54,"meta":162918,"navigation":56,"path":162919,"seo":162920,"stem":162921,"__hash__":162922},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160914,"toc":162898},[160915,160918,160922,160925,160928,160942,160945,160959,160963,160965,160984,160986,161033,161035,161049,161053,161127,161130,161134,161137,161196,161204,161207,161260,161263,161267,161272,161327,161335,161385,161389,161394,161402,161501,161507,161511,161516,161519,161530,161571,161584,161588,161591,161627,161630,161643,161646,161706,161710,161714,161717,161768,161772,161775,161822,161828,161894,161897,161901,161904,162020,162023,162027,162030,162136,162140,162143,162181,162184,162226,162229,162289,162292,162296,162760,162763,162767,162794,162800,162861,162865,162895],[10,160916,160912],{"id":160917},"_5-函数基础",[71,160919,160921],{"id":160920},"_51-为什么需要函数","5.1 为什么需要函数",[14,160923,160924],{},"函数用于封装一段可以重复使用的代码。",[14,160926,160927],{},"不使用函数的问题：",[83,160929,160930,160933,160936,160939],{},[86,160931,160932],{},"重复代码多。",[86,160934,160935],{},"修改逻辑时容易漏改。",[86,160937,160938],{},"主流程不清晰。",[86,160940,160941],{},"程序越写越长，难以维护。",[14,160943,160944],{},"使用函数后的好处：",[83,160946,160947,160950,160953,160956],{},[86,160948,160949],{},"提高复用性。",[86,160951,160952],{},"提高可读性。",[86,160954,160955],{},"便于调试。",[86,160957,160958],{},"便于分工。",[71,160960,160962],{"id":160961},"_52-函数定义","5.2 函数定义",[14,160964,5196],{},[120,160966,160968],{"className":30379,"code":160967,"language":30381,"meta":42,"style":42},"def 函数名():\n    函数体\n",[126,160969,160970,160979],{"__ignoreMap":42},[129,160971,160972,160974,160977],{"class":131,"line":132},[129,160973,31948],{"class":135},[129,160975,160976],{"class":1977}," 函数名",[129,160978,31954],{"class":139},[129,160980,160981],{"class":131,"line":51},[129,160982,160983],{"class":139},"    函数体\n",[14,160985,15150],{},[120,160987,160989],{"className":30379,"code":160988,"language":30381,"meta":42,"style":42},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[126,160990,160991,161000,161010,161020,161024,161028],{"__ignoreMap":42},[129,160992,160993,160995,160998],{"class":131,"line":132},[129,160994,31948],{"class":135},[129,160996,160997],{"class":1977}," say_hello",[129,160999,31954],{"class":139},[129,161001,161002,161004,161006,161008],{"class":131,"line":51},[129,161003,31300],{"class":188},[129,161005,140],{"class":139},[129,161007,5859],{"class":244},[129,161009,146],{"class":139},[129,161011,161012,161014,161016,161018],{"class":131,"line":1194},[129,161013,31300],{"class":188},[129,161015,140],{"class":139},[129,161017,146640],{"class":244},[129,161019,146],{"class":139},[129,161021,161022],{"class":131,"line":1209},[129,161023,2414],{"emptyLinePlaceholder":56},[129,161025,161026],{"class":131,"line":1215},[129,161027,2414],{"emptyLinePlaceholder":56},[129,161029,161030],{"class":131,"line":1229},[129,161031,161032],{"class":139},"say_hello()\n",[14,161034,9040],{},[83,161036,161037,161040,161043,161046],{},[86,161038,161039],{},"函数必须先定义，再调用。",[86,161041,161042],{},"函数名遵循变量命名规则。",[86,161044,161045],{},"函数体需要缩进。",[86,161047,161048],{},"函数不调用就不会执行。",[71,161050,161052],{"id":161051},"_53-函数调用","5.3 函数调用",[120,161054,161056],{"className":30379,"code":161055,"language":30381,"meta":42,"style":42},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[126,161057,161058,161067,161078,161089,161100,161110,161114,161118,161123],{"__ignoreMap":42},[129,161059,161060,161062,161065],{"class":131,"line":132},[129,161061,31948],{"class":135},[129,161063,161064],{"class":1977}," print_menu",[129,161066,31954],{"class":139},[129,161068,161069,161071,161073,161076],{"class":131,"line":51},[129,161070,31300],{"class":188},[129,161072,140],{"class":139},[129,161074,161075],{"class":244},"\"1. 查询\"",[129,161077,146],{"class":139},[129,161079,161080,161082,161084,161087],{"class":131,"line":1194},[129,161081,31300],{"class":188},[129,161083,140],{"class":139},[129,161085,161086],{"class":244},"\"2. 添加\"",[129,161088,146],{"class":139},[129,161090,161091,161093,161095,161098],{"class":131,"line":1209},[129,161092,31300],{"class":188},[129,161094,140],{"class":139},[129,161096,161097],{"class":244},"\"3. 删除\"",[129,161099,146],{"class":139},[129,161101,161102,161104,161106,161108],{"class":131,"line":1215},[129,161103,31300],{"class":188},[129,161105,140],{"class":139},[129,161107,160682],{"class":244},[129,161109,146],{"class":139},[129,161111,161112],{"class":131,"line":1229},[129,161113,2414],{"emptyLinePlaceholder":56},[129,161115,161116],{"class":131,"line":1235},[129,161117,2414],{"emptyLinePlaceholder":56},[129,161119,161120],{"class":131,"line":1326},[129,161121,161122],{"class":139},"print_menu()\n",[129,161124,161125],{"class":131,"line":1332},[129,161126,161122],{"class":139},[14,161128,161129],{},"函数可以多次调用，每次调用都会执行函数体。",[71,161131,161133],{"id":161132},"_54-参数","5.4 参数",[14,161135,161136],{},"参数用于向函数传递数据。",[120,161138,161140],{"className":30379,"code":161139,"language":30381,"meta":42,"style":42},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[126,161141,161142,161151,161171,161175,161179,161188],{"__ignoreMap":42},[129,161143,161144,161146,161148],{"class":131,"line":132},[129,161145,31948],{"class":135},[129,161147,160997],{"class":1977},[129,161149,161150],{"class":139},"(name):\n",[129,161152,161153,161155,161157,161159,161161,161163,161165,161167,161169],{"class":131,"line":51},[129,161154,31300],{"class":188},[129,161156,140],{"class":139},[129,161158,192],{"class":135},[129,161160,157055],{"class":244},[129,161162,1035],{"class":188},[129,161164,79811],{"class":139},[129,161166,1085],{"class":188},[129,161168,390],{"class":244},[129,161170,146],{"class":139},[129,161172,161173],{"class":131,"line":1194},[129,161174,2414],{"emptyLinePlaceholder":56},[129,161176,161177],{"class":131,"line":1209},[129,161178,2414],{"emptyLinePlaceholder":56},[129,161180,161181,161184,161186],{"class":131,"line":1215},[129,161182,161183],{"class":139},"say_hello(",[129,161185,149889],{"class":244},[129,161187,146],{"class":139},[129,161189,161190,161192,161194],{"class":131,"line":1229},[129,161191,161183],{"class":139},[129,161193,150937],{"class":244},[129,161195,146],{"class":139},[14,161197,161198,161200,161201,161203],{},[126,161199,79811],{}," 是形参，",[126,161202,149889],{}," 是实参。",[14,161205,161206],{},"多个参数：",[120,161208,161210],{"className":30379,"code":161209,"language":30381,"meta":42,"style":42},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[126,161211,161212,161220,161233,161239,161243,161247],{"__ignoreMap":42},[129,161213,161214,161216,161218],{"class":131,"line":132},[129,161215,31948],{"class":135},[129,161217,5224],{"class":1977},[129,161219,151094],{"class":139},[129,161221,161222,161225,161227,161229,161231],{"class":131,"line":51},[129,161223,161224],{"class":139},"    result ",[129,161226,185],{"class":135},[129,161228,10884],{"class":139},[129,161230,620],{"class":135},[129,161232,151105],{"class":139},[129,161234,161235,161237],{"class":131,"line":1194},[129,161236,31300],{"class":188},[129,161238,76586],{"class":139},[129,161240,161241],{"class":131,"line":1209},[129,161242,2414],{"emptyLinePlaceholder":56},[129,161244,161245],{"class":131,"line":1215},[129,161246,2414],{"emptyLinePlaceholder":56},[129,161248,161249,161252,161254,161256,161258],{"class":131,"line":1229},[129,161250,161251],{"class":139},"add(",[129,161253,585],{"class":188},[129,161255,12450],{"class":139},[129,161257,839],{"class":188},[129,161259,146],{"class":139},[14,161261,161262],{},"调用时参数数量必须匹配。",[71,161264,161266],{"id":161265},"_55-返回值","5.5 返回值",[14,161268,161269,161271],{},[126,161270,17061],{}," 用于把函数内部的结果返回给调用者。",[120,161273,161275],{"className":30379,"code":161274,"language":30381,"meta":42,"style":42},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[126,161276,161277,161285,161295,161299,161303,161321],{"__ignoreMap":42},[129,161278,161279,161281,161283],{"class":131,"line":132},[129,161280,31948],{"class":135},[129,161282,5224],{"class":1977},[129,161284,151094],{"class":139},[129,161286,161287,161289,161291,161293],{"class":131,"line":51},[129,161288,4104],{"class":135},[129,161290,10884],{"class":139},[129,161292,620],{"class":135},[129,161294,151105],{"class":139},[129,161296,161297],{"class":131,"line":1194},[129,161298,2414],{"emptyLinePlaceholder":56},[129,161300,161301],{"class":131,"line":1209},[129,161302,2414],{"emptyLinePlaceholder":56},[129,161304,161305,161308,161310,161313,161315,161317,161319],{"class":131,"line":1215},[129,161306,161307],{"class":139},"result ",[129,161309,185],{"class":135},[129,161311,161312],{"class":139}," add(",[129,161314,585],{"class":188},[129,161316,12450],{"class":139},[129,161318,839],{"class":188},[129,161320,146],{"class":139},[129,161322,161323,161325],{"class":131,"line":1229},[129,161324,30416],{"class":188},[129,161326,76586],{"class":139},[14,161328,161329,161330,161332,161333,28386],{},"如果函数没有写 ",[126,161331,17061],{},"，默认返回 ",[126,161334,95687],{},[120,161336,161338],{"className":30379,"code":161337,"language":30381,"meta":42,"style":42},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[126,161339,161340,161348,161358,161362,161366,161375],{"__ignoreMap":42},[129,161341,161342,161344,161346],{"class":131,"line":132},[129,161343,31948],{"class":135},[129,161345,160997],{"class":1977},[129,161347,31954],{"class":139},[129,161349,161350,161352,161354,161356],{"class":131,"line":51},[129,161351,31300],{"class":188},[129,161353,140],{"class":139},[129,161355,5859],{"class":244},[129,161357,146],{"class":139},[129,161359,161360],{"class":131,"line":1194},[129,161361,2414],{"emptyLinePlaceholder":56},[129,161363,161364],{"class":131,"line":1209},[129,161365,2414],{"emptyLinePlaceholder":56},[129,161367,161368,161370,161372],{"class":131,"line":1215},[129,161369,161307],{"class":139},[129,161371,185],{"class":135},[129,161373,161374],{"class":139}," say_hello()\n",[129,161376,161377,161379,161382],{"class":131,"line":1229},[129,161378,30416],{"class":188},[129,161380,161381],{"class":139},"(result)  ",[129,161383,161384],{"class":198},"# None\n",[71,161386,161388],{"id":161387},"_56-return的作用","5.6 return的作用",[14,161390,161391,161393],{},[126,161392,17061],{}," 有两个作用：",[83,161395,161396,161399],{},[86,161397,161398],{},"返回结果。",[86,161400,161401],{},"结束函数。",[120,161403,161405],{"className":30379,"code":161404,"language":30381,"meta":42,"style":42},"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",[126,161406,161407,161417,161429,161436,161440,161452,161459,161463,161470,161474,161478,161489],{"__ignoreMap":42},[129,161408,161409,161411,161414],{"class":131,"line":132},[129,161410,31948],{"class":135},[129,161412,161413],{"class":1977}," check_age",[129,161415,161416],{"class":139},"(age):\n",[129,161418,161419,161421,161423,161425,161427],{"class":131,"line":51},[129,161420,3115],{"class":135},[129,161422,15722],{"class":139},[129,161424,1049],{"class":135},[129,161426,4107],{"class":188},[129,161428,3753],{"class":139},[129,161430,161431,161433],{"class":131,"line":1194},[129,161432,14767],{"class":135},[129,161434,161435],{"class":244}," \"年龄不合法\"\n",[129,161437,161438],{"class":131,"line":1209},[129,161439,2414],{"emptyLinePlaceholder":56},[129,161441,161442,161444,161446,161448,161450],{"class":131,"line":1215},[129,161443,3115],{"class":135},[129,161445,15722],{"class":139},[129,161447,1724],{"class":135},[129,161449,156286],{"class":188},[129,161451,3753],{"class":139},[129,161453,161454,161456],{"class":131,"line":1229},[129,161455,14767],{"class":135},[129,161457,161458],{"class":244}," \"成年人\"\n",[129,161460,161461],{"class":131,"line":1235},[129,161462,2414],{"emptyLinePlaceholder":56},[129,161464,161465,161467],{"class":131,"line":1326},[129,161466,4104],{"class":135},[129,161468,161469],{"class":244}," \"未成年人\"\n",[129,161471,161472],{"class":131,"line":1332},[129,161473,2414],{"emptyLinePlaceholder":56},[129,161475,161476],{"class":131,"line":1344},[129,161477,2414],{"emptyLinePlaceholder":56},[129,161479,161480,161482,161485,161487],{"class":131,"line":1626},[129,161481,30416],{"class":188},[129,161483,161484],{"class":139},"(check_age(",[129,161486,839],{"class":188},[129,161488,30498],{"class":139},[129,161490,161491,161493,161495,161497,161499],{"class":131,"line":1631},[129,161492,30416],{"class":188},[129,161494,161484],{"class":139},[129,161496,671],{"class":135},[129,161498,357],{"class":188},[129,161500,30498],{"class":139},[14,161502,161503,161504,161506],{},"函数执行到 ",[126,161505,17061],{}," 后，后面的代码不会继续执行。",[71,161508,161510],{"id":161509},"_57-none","5.7 None",[14,161512,161513,161515],{},[126,161514,95687],{}," 表示空值或没有结果。",[14,161517,161518],{},"常见使用场景：",[83,161520,161521,161524,161527],{},[86,161522,161523],{},"函数没有返回值。",[86,161525,161526],{},"变量暂时没有具体值。",[86,161528,161529],{},"表示查询不到结果。",[120,161531,161533],{"className":30379,"code":161532,"language":30381,"meta":42,"style":42},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[126,161534,161535,161543,161547,161560],{"__ignoreMap":42},[129,161536,161537,161539,161541],{"class":131,"line":132},[129,161538,161307],{"class":139},[129,161540,185],{"class":135},[129,161542,152173],{"class":188},[129,161544,161545],{"class":131,"line":51},[129,161546,2414],{"emptyLinePlaceholder":56},[129,161548,161549,161551,161554,161556,161558],{"class":131,"line":1194},[129,161550,1545],{"class":135},[129,161552,161553],{"class":139}," result ",[129,161555,38928],{"class":135},[129,161557,38934],{"class":188},[129,161559,3753],{"class":139},[129,161561,161562,161564,161566,161569],{"class":131,"line":1209},[129,161563,31300],{"class":188},[129,161565,140],{"class":139},[129,161567,161568],{"class":244},"\"没有数据\"",[129,161570,146],{"class":139},[14,161572,161573,161574,161576,161577,161580,161581,28386],{},"判断 ",[126,161575,95687],{}," 推荐使用 ",[126,161578,161579],{},"is None","，不要写成 ",[126,161582,161583],{},"== None",[71,161585,161587],{"id":161586},"_58-函数文档字符串","5.8 函数文档字符串",[14,161589,161590],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[120,161592,161594],{"className":30379,"code":161593,"language":30381,"meta":42,"style":42},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[126,161595,161596,161606,161611],{"__ignoreMap":42},[129,161597,161598,161600,161603],{"class":131,"line":132},[129,161599,31948],{"class":135},[129,161601,161602],{"class":1977}," calculate_bmi",[129,161604,161605],{"class":139},"(weight, height):\n",[129,161607,161608],{"class":131,"line":51},[129,161609,161610],{"class":244},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[129,161612,161613,161615,161618,161620,161623,161625],{"class":131,"line":1194},[129,161614,4104],{"class":135},[129,161616,161617],{"class":139}," weight ",[129,161619,723],{"class":135},[129,161621,161622],{"class":139}," height ",[129,161624,10676],{"class":135},[129,161626,47724],{"class":188},[14,161628,161629],{},"查看说明：",[120,161631,161633],{"className":30379,"code":161632,"language":30381,"meta":42,"style":42},"help(calculate_bmi)\n",[126,161634,161635],{"__ignoreMap":42},[129,161636,161637,161640],{"class":131,"line":132},[129,161638,161639],{"class":188},"help",[129,161641,161642],{"class":139},"(calculate_bmi)\n",[14,161644,161645],{},"较完整的写法：",[120,161647,161649],{"className":30379,"code":161648,"language":30381,"meta":42,"style":42},"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",[126,161650,161651,161659,161664,161669,161673,161678,161683,161688,161692],{"__ignoreMap":42},[129,161652,161653,161655,161657],{"class":131,"line":132},[129,161654,31948],{"class":135},[129,161656,161602],{"class":1977},[129,161658,161605],{"class":139},[129,161660,161661],{"class":131,"line":51},[129,161662,161663],{"class":244},"    \"\"\"\n",[129,161665,161666],{"class":131,"line":1194},[129,161667,161668],{"class":244},"    计算BMI。\n",[129,161670,161671],{"class":131,"line":1209},[129,161672,2414],{"emptyLinePlaceholder":56},[129,161674,161675],{"class":131,"line":1215},[129,161676,161677],{"class":244},"    :param weight: 体重，单位kg\n",[129,161679,161680],{"class":131,"line":1229},[129,161681,161682],{"class":244},"    :param height: 身高，单位m\n",[129,161684,161685],{"class":131,"line":1235},[129,161686,161687],{"class":244},"    :return: BMI数值\n",[129,161689,161690],{"class":131,"line":1326},[129,161691,161663],{"class":244},[129,161693,161694,161696,161698,161700,161702,161704],{"class":131,"line":1332},[129,161695,4104],{"class":135},[129,161697,161617],{"class":139},[129,161699,723],{"class":135},[129,161701,161622],{"class":139},[129,161703,10676],{"class":135},[129,161705,47724],{"class":188},[71,161707,161709],{"id":161708},"_59-变量作用域","5.9 变量作用域",[100,161711,161713],{"id":161712},"_591-局部变量","5.9.1 局部变量",[14,161715,161716],{},"在函数内部定义的变量，只能在函数内部使用。",[120,161718,161720],{"className":30379,"code":161719,"language":30381,"meta":42,"style":42},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[126,161721,161722,161731,161739,161745,161749,161753,161758],{"__ignoreMap":42},[129,161723,161724,161726,161729],{"class":131,"line":132},[129,161725,31948],{"class":135},[129,161727,161728],{"class":1977}," test",[129,161730,31954],{"class":139},[129,161732,161733,161735,161737],{"class":131,"line":51},[129,161734,45594],{"class":139},[129,161736,185],{"class":135},[129,161738,58429],{"class":188},[129,161740,161741,161743],{"class":131,"line":1194},[129,161742,31300],{"class":188},[129,161744,153],{"class":139},[129,161746,161747],{"class":131,"line":1209},[129,161748,2414],{"emptyLinePlaceholder":56},[129,161750,161751],{"class":131,"line":1215},[129,161752,2414],{"emptyLinePlaceholder":56},[129,161754,161755],{"class":131,"line":1229},[129,161756,161757],{"class":139},"test()\n",[129,161759,161760,161762,161765],{"class":131,"line":1235},[129,161761,30416],{"class":188},[129,161763,161764],{"class":139},"(num)  ",[129,161766,161767],{"class":198},"# 报错\n",[100,161769,161771],{"id":161770},"_592-全局变量","5.9.2 全局变量",[14,161773,161774],{},"在函数外部定义的变量，可以在函数内部读取。",[120,161776,161778],{"className":30379,"code":161777,"language":30381,"meta":42,"style":42},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[126,161779,161780,161788,161792,161796,161804,161810,161814,161818],{"__ignoreMap":42},[129,161781,161782,161784,161786],{"class":131,"line":132},[129,161783,146537],{"class":139},[129,161785,185],{"class":135},[129,161787,149354],{"class":244},[129,161789,161790],{"class":131,"line":51},[129,161791,2414],{"emptyLinePlaceholder":56},[129,161793,161794],{"class":131,"line":1194},[129,161795,2414],{"emptyLinePlaceholder":56},[129,161797,161798,161800,161802],{"class":131,"line":1209},[129,161799,31948],{"class":135},[129,161801,160997],{"class":1977},[129,161803,31954],{"class":139},[129,161805,161806,161808],{"class":131,"line":1215},[129,161807,31300],{"class":188},[129,161809,150661],{"class":139},[129,161811,161812],{"class":131,"line":1229},[129,161813,2414],{"emptyLinePlaceholder":56},[129,161815,161816],{"class":131,"line":1235},[129,161817,2414],{"emptyLinePlaceholder":56},[129,161819,161820],{"class":131,"line":1326},[129,161821,161032],{"class":139},[14,161823,161824,161825,28386],{},"如果要在函数内部修改全局变量，需要 ",[126,161826,161827],{},"global",[120,161829,161831],{"className":30379,"code":161830,"language":30381,"meta":42,"style":42},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[126,161832,161833,161841,161845,161849,161858,161866,161874,161878,161882,161887],{"__ignoreMap":42},[129,161834,161835,161837,161839],{"class":131,"line":132},[129,161836,146692],{"class":139},[129,161838,185],{"class":135},[129,161840,47334],{"class":188},[129,161842,161843],{"class":131,"line":51},[129,161844,2414],{"emptyLinePlaceholder":56},[129,161846,161847],{"class":131,"line":1194},[129,161848,2414],{"emptyLinePlaceholder":56},[129,161850,161851,161853,161856],{"class":131,"line":1209},[129,161852,31948],{"class":135},[129,161854,161855],{"class":1977}," add_count",[129,161857,31954],{"class":139},[129,161859,161860,161863],{"class":131,"line":1215},[129,161861,161862],{"class":135},"    global",[129,161864,161865],{"class":139}," count\n",[129,161867,161868,161870,161872],{"class":131,"line":1229},[129,161869,159434],{"class":139},[129,161871,9492],{"class":135},[129,161873,55700],{"class":188},[129,161875,161876],{"class":131,"line":1235},[129,161877,2414],{"emptyLinePlaceholder":56},[129,161879,161880],{"class":131,"line":1326},[129,161881,2414],{"emptyLinePlaceholder":56},[129,161883,161884],{"class":131,"line":1332},[129,161885,161886],{"class":139},"add_count()\n",[129,161888,161889,161891],{"class":131,"line":1344},[129,161890,30416],{"class":188},[129,161892,161893],{"class":139},"(count)\n",[14,161895,161896],{},"不建议大量使用全局变量，项目变大后很难维护。",[71,161898,161900],{"id":161899},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161902,161903],{},"一个函数中可以调用另一个函数。",[120,161905,161907],{"className":30379,"code":161906,"language":30381,"meta":42,"style":42},"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",[126,161908,161909,161918,161932,161936,161940,161949,161954,161974,161995,161999,162003,162007],{"__ignoreMap":42},[129,161910,161911,161913,161916],{"class":131,"line":132},[129,161912,31948],{"class":135},[129,161914,161915],{"class":1977}," print_line",[129,161917,31954],{"class":139},[129,161919,161920,161922,161924,161926,161928,161930],{"class":131,"line":51},[129,161921,31300],{"class":188},[129,161923,140],{"class":139},[129,161925,32484],{"class":244},[129,161927,6533],{"class":135},[129,161929,78666],{"class":188},[129,161931,146],{"class":139},[129,161933,161934],{"class":131,"line":1194},[129,161935,2414],{"emptyLinePlaceholder":56},[129,161937,161938],{"class":131,"line":1209},[129,161939,2414],{"emptyLinePlaceholder":56},[129,161941,161942,161944,161947],{"class":131,"line":1215},[129,161943,31948],{"class":135},[129,161945,161946],{"class":1977}," print_info",[129,161948,149376],{"class":139},[129,161950,161951],{"class":131,"line":1229},[129,161952,161953],{"class":139},"    print_line()\n",[129,161955,161956,161958,161960,161962,161964,161966,161968,161970,161972],{"class":131,"line":1235},[129,161957,31300],{"class":188},[129,161959,140],{"class":139},[129,161961,192],{"class":135},[129,161963,156683],{"class":244},[129,161965,1035],{"class":188},[129,161967,79811],{"class":139},[129,161969,1085],{"class":188},[129,161971,390],{"class":244},[129,161973,146],{"class":139},[129,161975,161976,161978,161980,161982,161985,161987,161989,161991,161993],{"class":131,"line":1326},[129,161977,31300],{"class":188},[129,161979,140],{"class":139},[129,161981,192],{"class":135},[129,161983,161984],{"class":244},"\"年龄:",[129,161986,1035],{"class":188},[129,161988,70222],{"class":139},[129,161990,1085],{"class":188},[129,161992,390],{"class":244},[129,161994,146],{"class":139},[129,161996,161997],{"class":131,"line":1332},[129,161998,161953],{"class":139},[129,162000,162001],{"class":131,"line":1344},[129,162002,2414],{"emptyLinePlaceholder":56},[129,162004,162005],{"class":131,"line":1626},[129,162006,2414],{"emptyLinePlaceholder":56},[129,162008,162009,162012,162014,162016,162018],{"class":131,"line":1631},[129,162010,162011],{"class":139},"print_info(",[129,162013,149889],{"class":244},[129,162015,12450],{"class":139},[129,162017,789],{"class":188},[129,162019,146],{"class":139},[14,162021,162022],{},"这种方式可以把小功能组合成大功能。",[71,162024,162026],{"id":162025},"_511-参数检查","5.11 参数检查",[14,162028,162029],{},"函数内部可以检查参数是否合法。",[120,162031,162033],{"className":30379,"code":162032,"language":30381,"meta":42,"style":42},"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",[126,162034,162035,162044,162056,162062,162072,162076,162080,162097,162101,162113,162124,162130],{"__ignoreMap":42},[129,162036,162037,162039,162042],{"class":131,"line":132},[129,162038,31948],{"class":135},[129,162040,162041],{"class":1977}," divide",[129,162043,151094],{"class":139},[129,162045,162046,162048,162050,162052,162054],{"class":131,"line":51},[129,162047,3115],{"class":135},[129,162049,10897],{"class":139},[129,162051,2963],{"class":135},[129,162053,4107],{"class":188},[129,162055,3753],{"class":139},[129,162057,162058,162060],{"class":131,"line":1194},[129,162059,14767],{"class":135},[129,162061,152173],{"class":188},[129,162063,162064,162066,162068,162070],{"class":131,"line":1209},[129,162065,4104],{"class":135},[129,162067,10884],{"class":139},[129,162069,723],{"class":135},[129,162071,151105],{"class":139},[129,162073,162074],{"class":131,"line":1215},[129,162075,2414],{"emptyLinePlaceholder":56},[129,162077,162078],{"class":131,"line":1229},[129,162079,2414],{"emptyLinePlaceholder":56},[129,162081,162082,162084,162086,162089,162091,162093,162095],{"class":131,"line":1235},[129,162083,161307],{"class":139},[129,162085,185],{"class":135},[129,162087,162088],{"class":139}," divide(",[129,162090,585],{"class":188},[129,162092,12450],{"class":139},[129,162094,331],{"class":188},[129,162096,146],{"class":139},[129,162098,162099],{"class":131,"line":1326},[129,162100,2414],{"emptyLinePlaceholder":56},[129,162102,162103,162105,162107,162109,162111],{"class":131,"line":1332},[129,162104,1545],{"class":135},[129,162106,161553],{"class":139},[129,162108,38928],{"class":135},[129,162110,38934],{"class":188},[129,162112,3753],{"class":139},[129,162114,162115,162117,162119,162122],{"class":131,"line":1344},[129,162116,31300],{"class":188},[129,162118,140],{"class":139},[129,162120,162121],{"class":244},"\"除数不能为0\"",[129,162123,146],{"class":139},[129,162125,162126,162128],{"class":131,"line":1626},[129,162127,1715],{"class":135},[129,162129,3753],{"class":139},[129,162131,162132,162134],{"class":131,"line":1631},[129,162133,31300],{"class":188},[129,162135,76586],{"class":139},[71,162137,162139],{"id":162138},"_512-类型提示","5.12 类型提示",[14,162141,162142],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[120,162144,162146],{"className":30379,"code":162145,"language":30381,"meta":42,"style":42},"def add(a: int, b: int) -> int:\n    return a + b\n",[126,162147,162148,162171],{"__ignoreMap":42},[129,162149,162150,162152,162154,162157,162159,162162,162164,162167,162169],{"class":131,"line":132},[129,162151,31948],{"class":135},[129,162153,5224],{"class":1977},[129,162155,162156],{"class":139},"(a: ",[129,162158,143],{"class":188},[129,162160,162161],{"class":139},", b: ",[129,162163,143],{"class":188},[129,162165,162166],{"class":139},") -> ",[129,162168,143],{"class":188},[129,162170,3753],{"class":139},[129,162172,162173,162175,162177,162179],{"class":131,"line":51},[129,162174,4104],{"class":135},[129,162176,10884],{"class":139},[129,162178,620],{"class":135},[129,162180,151105],{"class":139},[14,162182,162183],{},"字符串参数：",[120,162185,162187],{"className":30379,"code":162186,"language":30381,"meta":42,"style":42},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[126,162188,162189,162206],{"__ignoreMap":42},[129,162190,162191,162193,162195,162198,162200,162202,162204],{"class":131,"line":132},[129,162192,31948],{"class":135},[129,162194,160997],{"class":1977},[129,162196,162197],{"class":139},"(name: ",[129,162199,1314],{"class":188},[129,162201,162166],{"class":139},[129,162203,95687],{"class":188},[129,162205,3753],{"class":139},[129,162207,162208,162210,162212,162214,162216,162218,162220,162222,162224],{"class":131,"line":51},[129,162209,31300],{"class":188},[129,162211,140],{"class":139},[129,162213,192],{"class":135},[129,162215,157055],{"class":244},[129,162217,1035],{"class":188},[129,162219,79811],{"class":139},[129,162221,1085],{"class":188},[129,162223,390],{"class":244},[129,162225,146],{"class":139},[14,162227,162228],{},"列表参数：",[120,162230,162232],{"className":30379,"code":162231,"language":30381,"meta":42,"style":42},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[126,162233,162234,162253,162261,162273,162282],{"__ignoreMap":42},[129,162235,162236,162238,162241,162244,162246,162249,162251],{"class":131,"line":132},[129,162237,31948],{"class":135},[129,162239,162240],{"class":1977}," get_total",[129,162242,162243],{"class":139},"(numbers: list[",[129,162245,143],{"class":188},[129,162247,162248],{"class":139},"]) -> ",[129,162250,143],{"class":188},[129,162252,3753],{"class":139},[129,162254,162255,162257,162259],{"class":131,"line":51},[129,162256,159308],{"class":139},[129,162258,185],{"class":135},[129,162260,47334],{"class":188},[129,162262,162263,162265,162268,162270],{"class":131,"line":1194},[129,162264,3215],{"class":135},[129,162266,162267],{"class":139}," number ",[129,162269,26044],{"class":135},[129,162271,162272],{"class":139}," numbers:\n",[129,162274,162275,162277,162279],{"class":131,"line":1209},[129,162276,159983],{"class":139},[129,162278,9492],{"class":135},[129,162280,162281],{"class":139}," number\n",[129,162283,162284,162286],{"class":131,"line":1215},[129,162285,4104],{"class":135},[129,162287,162288],{"class":139}," total\n",[14,162290,162291],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[71,162293,162295],{"id":162294},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[120,162297,162299],{"className":30379,"code":162298,"language":30381,"meta":42,"style":42},"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",[126,162300,162301,162311,162315,162319,162327,162338,162348,162358,162368,162378,162382,162386,162395,162417,162421,162425,162434,162440,162460,162472,162483,162487,162496,162507,162512,162516,162520,162529,162535,162554,162566,162576,162580,162591,162601,162605,162613,162624,162628,162632,162636,162644,162649,162663,162667,162679,162684,162696,162701,162713,162718,162730,162740,162744,162750],{"__ignoreMap":42},[129,162302,162303,162306,162308],{"class":131,"line":132},[129,162304,162305],{"class":139},"balance ",[129,162307,185],{"class":135},[129,162309,162310],{"class":188}," 1000\n",[129,162312,162313],{"class":131,"line":51},[129,162314,2414],{"emptyLinePlaceholder":56},[129,162316,162317],{"class":131,"line":1194},[129,162318,2414],{"emptyLinePlaceholder":56},[129,162320,162321,162323,162325],{"class":131,"line":1209},[129,162322,31948],{"class":135},[129,162324,152034],{"class":1977},[129,162326,31954],{"class":139},[129,162328,162329,162331,162333,162336],{"class":131,"line":1215},[129,162330,31300],{"class":188},[129,162332,140],{"class":139},[129,162334,162335],{"class":244},"\"====== ATM ======\"",[129,162337,146],{"class":139},[129,162339,162340,162342,162344,162346],{"class":131,"line":1229},[129,162341,31300],{"class":188},[129,162343,140],{"class":139},[129,162345,160649],{"class":244},[129,162347,146],{"class":139},[129,162349,162350,162352,162354,162356],{"class":131,"line":1235},[129,162351,31300],{"class":188},[129,162353,140],{"class":139},[129,162355,160660],{"class":244},[129,162357,146],{"class":139},[129,162359,162360,162362,162364,162366],{"class":131,"line":1326},[129,162361,31300],{"class":188},[129,162363,140],{"class":139},[129,162365,160671],{"class":244},[129,162367,146],{"class":139},[129,162369,162370,162372,162374,162376],{"class":131,"line":1332},[129,162371,31300],{"class":188},[129,162373,140],{"class":139},[129,162375,160682],{"class":244},[129,162377,146],{"class":139},[129,162379,162380],{"class":131,"line":1344},[129,162381,2414],{"emptyLinePlaceholder":56},[129,162383,162384],{"class":131,"line":1626},[129,162385,2414],{"emptyLinePlaceholder":56},[129,162387,162388,162390,162393],{"class":131,"line":1631},[129,162389,31948],{"class":135},[129,162391,162392],{"class":1977}," show_balance",[129,162394,31954],{"class":139},[129,162396,162397,162399,162401,162403,162406,162408,162411,162413,162415],{"class":131,"line":1637},[129,162398,31300],{"class":188},[129,162400,140],{"class":139},[129,162402,192],{"class":135},[129,162404,162405],{"class":244},"\"当前余额:",[129,162407,1035],{"class":188},[129,162409,162410],{"class":139},"balance",[129,162412,1085],{"class":188},[129,162414,157013],{"class":244},[129,162416,146],{"class":139},[129,162418,162419],{"class":131,"line":1642},[129,162420,2414],{"emptyLinePlaceholder":56},[129,162422,162423],{"class":131,"line":1656},[129,162424,2414],{"emptyLinePlaceholder":56},[129,162426,162427,162429,162432],{"class":131,"line":1661},[129,162428,31948],{"class":135},[129,162430,162431],{"class":1977}," save_money",[129,162433,31954],{"class":139},[129,162435,162436,162438],{"class":131,"line":1667},[129,162437,161862],{"class":135},[129,162439,150100],{"class":139},[129,162441,162442,162445,162447,162449,162451,162453,162455,162458],{"class":131,"line":1688},[129,162443,162444],{"class":139},"    money ",[129,162446,185],{"class":135},[129,162448,109798],{"class":188},[129,162450,140],{"class":139},[129,162452,53822],{"class":188},[129,162454,140],{"class":139},[129,162456,162457],{"class":244},"\"请输入存款金额:\"",[129,162459,30498],{"class":139},[129,162461,162462,162464,162466,162468,162470],{"class":131,"line":1693},[129,162463,3115],{"class":135},[129,162465,150143],{"class":139},[129,162467,1602],{"class":135},[129,162469,4107],{"class":188},[129,162471,3753],{"class":139},[129,162473,162474,162476,162478,162481],{"class":131,"line":1707},[129,162475,32452],{"class":188},[129,162477,140],{"class":139},[129,162479,162480],{"class":244},"\"金额必须大于0\"",[129,162482,146],{"class":139},[129,162484,162485],{"class":131,"line":1712},[129,162486,152362],{"class":135},[129,162488,162489,162492,162494],{"class":131,"line":1741},[129,162490,162491],{"class":139},"    balance ",[129,162493,9492],{"class":135},[129,162495,150176],{"class":139},[129,162497,162498,162500,162502,162505],{"class":131,"line":1746},[129,162499,31300],{"class":188},[129,162501,140],{"class":139},[129,162503,162504],{"class":244},"\"存款成功\"",[129,162506,146],{"class":139},[129,162508,162509],{"class":131,"line":1763},[129,162510,162511],{"class":139},"    show_balance()\n",[129,162513,162514],{"class":131,"line":1768},[129,162515,2414],{"emptyLinePlaceholder":56},[129,162517,162518],{"class":131,"line":1773},[129,162519,2414],{"emptyLinePlaceholder":56},[129,162521,162522,162524,162527],{"class":131,"line":1778},[129,162523,31948],{"class":135},[129,162525,162526],{"class":1977}," withdraw_money",[129,162528,31954],{"class":139},[129,162530,162531,162533],{"class":131,"line":1792},[129,162532,161862],{"class":135},[129,162534,150100],{"class":139},[129,162536,162537,162539,162541,162543,162545,162547,162549,162552],{"class":131,"line":1797},[129,162538,162444],{"class":139},[129,162540,185],{"class":135},[129,162542,109798],{"class":188},[129,162544,140],{"class":139},[129,162546,53822],{"class":188},[129,162548,140],{"class":139},[129,162550,162551],{"class":244},"\"请输入取款金额:\"",[129,162553,30498],{"class":139},[129,162555,162556,162558,162560,162562,162564],{"class":131,"line":2591},[129,162557,3115],{"class":135},[129,162559,150143],{"class":139},[129,162561,1602],{"class":135},[129,162563,4107],{"class":188},[129,162565,3753],{"class":139},[129,162567,162568,162570,162572,162574],{"class":131,"line":2605},[129,162569,32452],{"class":188},[129,162571,140],{"class":139},[129,162573,162480],{"class":244},[129,162575,146],{"class":139},[129,162577,162578],{"class":131,"line":2613},[129,162579,152362],{"class":135},[129,162581,162582,162584,162586,162588],{"class":131,"line":2618},[129,162583,3115],{"class":135},[129,162585,150143],{"class":139},[129,162587,1099],{"class":135},[129,162589,162590],{"class":139}," balance:\n",[129,162592,162593,162595,162597,162599],{"class":131,"line":2624},[129,162594,32452],{"class":188},[129,162596,140],{"class":139},[129,162598,150238],{"class":244},[129,162600,146],{"class":139},[129,162602,162603],{"class":131,"line":2630},[129,162604,152362],{"class":135},[129,162606,162607,162609,162611],{"class":131,"line":2635},[129,162608,162491],{"class":139},[129,162610,150253],{"class":135},[129,162612,150176],{"class":139},[129,162614,162615,162617,162619,162622],{"class":131,"line":7963},[129,162616,31300],{"class":188},[129,162618,140],{"class":139},[129,162620,162621],{"class":244},"\"取款成功\"",[129,162623,146],{"class":139},[129,162625,162626],{"class":131,"line":7987},[129,162627,162511],{"class":139},[129,162629,162630],{"class":131,"line":7992},[129,162631,2414],{"emptyLinePlaceholder":56},[129,162633,162634],{"class":131,"line":7998},[129,162635,2414],{"emptyLinePlaceholder":56},[129,162637,162638,162640,162642],{"class":131,"line":8025},[129,162639,108664],{"class":135},[129,162641,95293],{"class":188},[129,162643,3753],{"class":139},[129,162645,162646],{"class":131,"line":8030},[129,162647,162648],{"class":139},"    show_menu()\n",[129,162650,162651,162653,162655,162657,162659,162661],{"class":131,"line":8036},[129,162652,160693],{"class":139},[129,162654,185],{"class":135},[129,162656,60606],{"class":188},[129,162658,140],{"class":139},[129,162660,153074],{"class":244},[129,162662,146],{"class":139},[129,162664,162665],{"class":131,"line":8048},[129,162666,2414],{"emptyLinePlaceholder":56},[129,162668,162669,162671,162673,162675,162677],{"class":131,"line":8060},[129,162670,3115],{"class":135},[129,162672,153087],{"class":139},[129,162674,2963],{"class":135},[129,162676,153092],{"class":244},[129,162678,3753],{"class":139},[129,162680,162681],{"class":131,"line":8072},[129,162682,162683],{"class":139},"        show_balance()\n",[129,162685,162686,162688,162690,162692,162694],{"class":131,"line":9731},[129,162687,39294],{"class":135},[129,162689,153087],{"class":139},[129,162691,2963],{"class":135},[129,162693,153111],{"class":244},[129,162695,3753],{"class":139},[129,162697,162698],{"class":131,"line":9756},[129,162699,162700],{"class":139},"        save_money()\n",[129,162702,162703,162705,162707,162709,162711],{"class":131,"line":9779},[129,162704,39294],{"class":135},[129,162706,153087],{"class":139},[129,162708,2963],{"class":135},[129,162710,153129],{"class":244},[129,162712,3753],{"class":139},[129,162714,162715],{"class":131,"line":9803},[129,162716,162717],{"class":139},"        withdraw_money()\n",[129,162719,162720,162722,162724,162726,162728],{"class":131,"line":9808},[129,162721,39294],{"class":135},[129,162723,153087],{"class":139},[129,162725,2963],{"class":135},[129,162727,153183],{"class":244},[129,162729,3753],{"class":139},[129,162731,162732,162734,162736,162738],{"class":131,"line":9813},[129,162733,32452],{"class":188},[129,162735,140],{"class":139},[129,162737,153194],{"class":244},[129,162739,146],{"class":139},[129,162741,162742],{"class":131,"line":9818},[129,162743,31628],{"class":135},[129,162745,162746,162748],{"class":131,"line":9827},[129,162747,158023],{"class":135},[129,162749,3753],{"class":139},[129,162751,162752,162754,162756,162758],{"class":131,"line":9832},[129,162753,32452],{"class":188},[129,162755,140],{"class":139},[129,162757,153215],{"class":244},[129,162759,146],{"class":139},[14,162761,162762],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[71,162764,162766],{"id":162765},"_514-易错点","5.14 易错点",[83,162768,162769,162772,162775,162780,162785,162788],{},[86,162770,162771],{},"函数定义后必须调用才会执行。",[86,162773,162774],{},"函数名后面有括号才是调用。",[86,162776,162777,162779],{},[126,162778,17061],{}," 后面的代码不会执行。",[86,162781,162782,162783,28386],{},"没有返回值的函数默认返回 ",[126,162784,95687],{},[86,162786,162787],{},"局部变量不能在函数外部访问。",[86,162789,162790,162791,162793],{},"不要滥用 ",[126,162792,161827],{},"，更好的方式是让函数返回新值。",[14,162795,162796,162797,162799],{},"例如不用 ",[126,162798,161827],{}," 改写存款：",[120,162801,162803],{"className":30379,"code":162802,"language":30381,"meta":42,"style":42},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[126,162804,162805,162814,162825,162829,162833,162841,162854],{"__ignoreMap":42},[129,162806,162807,162809,162811],{"class":131,"line":132},[129,162808,31948],{"class":135},[129,162810,162431],{"class":1977},[129,162812,162813],{"class":139},"(balance, money):\n",[129,162815,162816,162818,162821,162823],{"class":131,"line":51},[129,162817,4104],{"class":135},[129,162819,162820],{"class":139}," balance ",[129,162822,620],{"class":135},[129,162824,150176],{"class":139},[129,162826,162827],{"class":131,"line":1194},[129,162828,2414],{"emptyLinePlaceholder":56},[129,162830,162831],{"class":131,"line":1209},[129,162832,2414],{"emptyLinePlaceholder":56},[129,162834,162835,162837,162839],{"class":131,"line":1215},[129,162836,162305],{"class":139},[129,162838,185],{"class":135},[129,162840,162310],{"class":188},[129,162842,162843,162845,162847,162850,162852],{"class":131,"line":1229},[129,162844,162305],{"class":139},[129,162846,185],{"class":135},[129,162848,162849],{"class":139}," save_money(balance, ",[129,162851,1736],{"class":188},[129,162853,146],{"class":139},[129,162855,162856,162858],{"class":131,"line":1235},[129,162857,30416],{"class":188},[129,162859,162860],{"class":139},"(balance)\n",[71,162862,162864],{"id":162863},"_515-本章练习","5.15 本章练习",[83,162866,162867,162874,162880,162886,162892],{},[86,162868,162869,162870,162873],{},"定义函数 ",[126,162871,162872],{},"print_student(name, age)","，输出学生信息。",[86,162875,162869,162876,162879],{},[126,162877,162878],{},"get_max(a, b, c)","，返回三个数中的最大值。",[86,162881,162869,162882,162885],{},[126,162883,162884],{},"is_even(num)","，判断一个数是否为偶数。",[86,162887,162869,162888,162891],{},[126,162889,162890],{},"calculate_bmi(weight, height)","，返回 BMI。",[86,162893,162894],{},"把第 4 章的菜单程序拆分成多个函数。",[5141,162896,162897],{},"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":42,"searchDepth":51,"depth":51,"links":162899},[162900,162901,162902,162903,162904,162905,162906,162907,162908,162912,162913,162914,162915,162916,162917],{"id":160920,"depth":51,"text":160921},{"id":160961,"depth":51,"text":160962},{"id":161051,"depth":51,"text":161052},{"id":161132,"depth":51,"text":161133},{"id":161265,"depth":51,"text":161266},{"id":161387,"depth":51,"text":161388},{"id":161509,"depth":51,"text":161510},{"id":161586,"depth":51,"text":161587},{"id":161708,"depth":51,"text":161709,"children":162909},[162910,162911],{"id":161712,"depth":1194,"text":161713},{"id":161770,"depth":1194,"text":161771},{"id":161899,"depth":51,"text":161900},{"id":162025,"depth":51,"text":162026},{"id":162138,"depth":51,"text":162139},{"id":162294,"depth":51,"text":162295},{"id":162765,"depth":51,"text":162766},{"id":162863,"depth":51,"text":162864},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160912,"description":53},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162924,"title":162925,"body":162926,"description":53,"extension":54,"meta":165970,"navigation":56,"path":165971,"seo":165972,"stem":165973,"__hash__":165974},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162927,"toc":165951},[162928,162931,162935,162938,162941,163045,163048,163052,163055,163135,163138,163142,163145,163205,163208,163244,163247,163262,163266,163339,163342,163397,163400,163470,163473,163557,163567,163625,163629,163674,163677,163703,163706,163812,163816,163819,163861,163864,163928,163931,163935,163938,163999,164002,164032,164035,164073,164077,164080,164089,164092,164216,164219,164260,164264,164267,164278,164318,164321,164336,164341,164344,164411,164414,164504,164508,164511,164559,164562,164589,164591,164621,164624,164644,164647,164678,164681,164714,164718,164721,164745,164748,164772,164775,164799,164803,164806,164936,164939,165019,165022,165097,165101,165104,165154,165157,165199,165202,165226,165228,165252,165255,165310,165313,165379,165383,165386,165389,165427,165430,165483,165486,165532,165535,165568,165571,165575,165894,165898,165927,165931,165948],[10,162929,162925],{"id":162930},"_6-数据容器",[71,162932,162934],{"id":162933},"_61-什么是数据容器","6.1 什么是数据容器",[14,162936,162937],{},"数据容器用于一次保存多个数据。",[14,162939,162940],{},"常见容器：",[277,162942,162943,162960],{},[280,162944,162945],{},[283,162946,162947,162949,162952,162955,162958],{},[286,162948,25772],{},[286,162950,162951],{},"是否有序",[286,162953,162954],{},"是否可变",[286,162956,162957],{},"是否允许重复",[286,162959,27493],{},[324,162961,162962,162980,162996,163011,163028],{},[283,162963,162964,162967,162970,162973,162976],{},[329,162965,162966],{},"list列表",[329,162968,162969],{},"有序",[329,162971,162972],{},"可变",[329,162974,162975],{},"允许",[329,162977,162978],{},[126,162979,155258],{},[283,162981,162982,162985,162987,162990,162992],{},[329,162983,162984],{},"tuple元组",[329,162986,162969],{},[329,162988,162989],{},"不可变",[329,162991,162975],{},[329,162993,162994],{},[126,162995,155271],{},[283,162997,162998,163001,163003,163005,163007],{},[329,162999,163000],{},"str字符串",[329,163002,162969],{},[329,163004,162989],{},[329,163006,162975],{},[329,163008,163009],{},[126,163010,155881],{},[283,163012,163013,163016,163019,163021,163024],{},[329,163014,163015],{},"set集合",[329,163017,163018],{},"无序",[329,163020,162972],{},[329,163022,163023],{},"不允许",[329,163025,163026],{},[126,163027,155296],{},[283,163029,163030,163033,163035,163037,163040],{},[329,163031,163032],{},"dict字典",[329,163034,162969],{},[329,163036,162972],{},[329,163038,163039],{},"key不允许重复",[329,163041,163042],{},[126,163043,163044],{},"{\"name\": \"小明\"}",[14,163046,163047],{},"Python 3.7 之后，字典保持插入顺序。",[71,163049,163051],{"id":163050},"_62-列表list","6.2 列表list",[14,163053,163054],{},"列表用于保存一组有顺序的数据。",[120,163056,163058],{"className":30379,"code":163057,"language":30381,"meta":42,"style":42},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[126,163059,163060,163080,163105,163126],{"__ignoreMap":42},[129,163061,163062,163064,163066,163068,163070,163072,163074,163076,163078],{"class":131,"line":132},[129,163063,160381],{"class":139},[129,163065,185],{"class":135},[129,163067,52227],{"class":139},[129,163069,149889],{"class":244},[129,163071,12450],{"class":139},[129,163073,150937],{"class":244},[129,163075,12450],{"class":139},[129,163077,159732],{"class":244},[129,163079,33247],{"class":139},[129,163081,163082,163085,163087,163089,163091,163093,163095,163097,163099,163101,163103],{"class":131,"line":51},[129,163083,163084],{"class":139},"numbers ",[129,163086,185],{"class":135},[129,163088,52227],{"class":139},[129,163090,357],{"class":188},[129,163092,12450],{"class":139},[129,163094,217],{"class":188},[129,163096,12450],{"class":139},[129,163098,211],{"class":188},[129,163100,12450],{"class":139},[129,163102,432],{"class":188},[129,163104,33247],{"class":139},[129,163106,163107,163110,163112,163114,163116,163118,163120,163122,163124],{"class":131,"line":1194},[129,163108,163109],{"class":139},"mixed ",[129,163111,185],{"class":135},[129,163113,52227],{"class":139},[129,163115,149889],{"class":244},[129,163117,12450],{"class":139},[129,163119,789],{"class":188},[129,163121,12450],{"class":139},[129,163123,31477],{"class":188},[129,163125,33247],{"class":139},[129,163127,163128,163131,163133],{"class":131,"line":1209},[129,163129,163130],{"class":139},"empty ",[129,163132,185],{"class":135},[129,163134,51839],{"class":139},[14,163136,163137],{},"推荐一个列表中保存同类数据，代码更清晰。",[71,163139,163141],{"id":163140},"_63-列表索引","6.3 列表索引",[14,163143,163144],{},"正向索引从 0 开始：",[120,163146,163148],{"className":30379,"code":163147,"language":30381,"meta":42,"style":42},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[126,163149,163150,163170,163174,163185,163195],{"__ignoreMap":42},[129,163151,163152,163154,163156,163158,163160,163162,163164,163166,163168],{"class":131,"line":132},[129,163153,160381],{"class":139},[129,163155,185],{"class":135},[129,163157,52227],{"class":139},[129,163159,149889],{"class":244},[129,163161,12450],{"class":139},[129,163163,150937],{"class":244},[129,163165,12450],{"class":139},[129,163167,159732],{"class":244},[129,163169,33247],{"class":139},[129,163171,163172],{"class":131,"line":51},[129,163173,2414],{"emptyLinePlaceholder":56},[129,163175,163176,163178,163181,163183],{"class":131,"line":1194},[129,163177,30416],{"class":188},[129,163179,163180],{"class":139},"(names[",[129,163182,331],{"class":188},[129,163184,4671],{"class":139},[129,163186,163187,163189,163191,163193],{"class":131,"line":1209},[129,163188,30416],{"class":188},[129,163190,163180],{"class":139},[129,163192,357],{"class":188},[129,163194,4671],{"class":139},[129,163196,163197,163199,163201,163203],{"class":131,"line":1215},[129,163198,30416],{"class":188},[129,163200,163180],{"class":139},[129,163202,217],{"class":188},[129,163204,4671],{"class":139},[14,163206,163207],{},"反向索引从 -1 开始：",[120,163209,163211],{"className":30379,"code":163210,"language":30381,"meta":42,"style":42},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[126,163212,163213,163229],{"__ignoreMap":42},[129,163214,163215,163217,163219,163221,163223,163226],{"class":131,"line":132},[129,163216,30416],{"class":188},[129,163218,163180],{"class":139},[129,163220,671],{"class":135},[129,163222,357],{"class":188},[129,163224,163225],{"class":139},"])  ",[129,163227,163228],{"class":198},"# 小刚\n",[129,163230,163231,163233,163235,163237,163239,163241],{"class":131,"line":51},[129,163232,30416],{"class":188},[129,163234,163180],{"class":139},[129,163236,671],{"class":135},[129,163238,217],{"class":188},[129,163240,163225],{"class":139},[129,163242,163243],{"class":198},"# 小红\n",[14,163245,163246],{},"索引越界会报错：",[120,163248,163250],{"className":30379,"code":163249,"language":30381,"meta":42,"style":42},"print(names[3])\n",[126,163251,163252],{"__ignoreMap":42},[129,163253,163254,163256,163258,163260],{"class":131,"line":132},[129,163255,30416],{"class":188},[129,163257,163180],{"class":139},[129,163259,211],{"class":188},[129,163261,4671],{"class":139},[71,163263,163265],{"id":163264},"_64-列表常用方法","6.4 列表常用方法",[120,163267,163269],{"className":30379,"code":163268,"language":30381,"meta":42,"style":42},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[126,163270,163271,163287,163291,163300,163314,163328,163332],{"__ignoreMap":42},[129,163272,163273,163275,163277,163279,163281,163283,163285],{"class":131,"line":132},[129,163274,160381],{"class":139},[129,163276,185],{"class":135},[129,163278,52227],{"class":139},[129,163280,149889],{"class":244},[129,163282,12450],{"class":139},[129,163284,150937],{"class":244},[129,163286,33247],{"class":139},[129,163288,163289],{"class":131,"line":51},[129,163290,2414],{"emptyLinePlaceholder":56},[129,163292,163293,163296,163298],{"class":131,"line":1194},[129,163294,163295],{"class":139},"names.append(",[129,163297,159732],{"class":244},[129,163299,146],{"class":139},[129,163301,163302,163305,163307,163309,163312],{"class":131,"line":1209},[129,163303,163304],{"class":139},"names.insert(",[129,163306,357],{"class":188},[129,163308,12450],{"class":139},[129,163310,163311],{"class":244},"\"小李\"",[129,163313,146],{"class":139},[129,163315,163316,163319,163321,163323,163326],{"class":131,"line":1215},[129,163317,163318],{"class":139},"names.extend([",[129,163320,8698],{"class":244},[129,163322,12450],{"class":139},[129,163324,163325],{"class":244},"\"小赵\"",[129,163327,4671],{"class":139},[129,163329,163330],{"class":131,"line":1229},[129,163331,2414],{"emptyLinePlaceholder":56},[129,163333,163334,163336],{"class":131,"line":1235},[129,163335,30416],{"class":188},[129,163337,163338],{"class":139},"(names)\n",[14,163340,163341],{},"删除元素：",[120,163343,163345],{"className":30379,"code":163344,"language":30381,"meta":42,"style":42},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[126,163346,163347,163356,163366,163380,163392],{"__ignoreMap":42},[129,163348,163349,163352,163354],{"class":131,"line":132},[129,163350,163351],{"class":139},"names.remove(",[129,163353,150937],{"class":244},[129,163355,146],{"class":139},[129,163357,163358,163361,163363],{"class":131,"line":51},[129,163359,163360],{"class":139},"last ",[129,163362,185],{"class":135},[129,163364,163365],{"class":139}," names.pop()\n",[129,163367,163368,163371,163373,163376,163378],{"class":131,"line":1194},[129,163369,163370],{"class":139},"first ",[129,163372,185],{"class":135},[129,163374,163375],{"class":139}," names.pop(",[129,163377,331],{"class":188},[129,163379,146],{"class":139},[129,163381,163382,163385,163388,163390],{"class":131,"line":1209},[129,163383,163384],{"class":135},"del",[129,163386,163387],{"class":139}," names[",[129,163389,331],{"class":188},[129,163391,33247],{"class":139},[129,163393,163394],{"class":131,"line":1215},[129,163395,163396],{"class":139},"names.clear()\n",[14,163398,163399],{},"查询和统计：",[120,163401,163403],{"className":30379,"code":163402,"language":30381,"meta":42,"style":42},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[126,163404,163405,163433,163437,163448,163459],{"__ignoreMap":42},[129,163406,163407,163409,163411,163413,163415,163417,163419,163421,163423,163425,163427,163429,163431],{"class":131,"line":132},[129,163408,163084],{"class":139},[129,163410,185],{"class":135},[129,163412,52227],{"class":139},[129,163414,357],{"class":188},[129,163416,12450],{"class":139},[129,163418,217],{"class":188},[129,163420,12450],{"class":139},[129,163422,211],{"class":188},[129,163424,12450],{"class":139},[129,163426,217],{"class":188},[129,163428,12450],{"class":139},[129,163430,432],{"class":188},[129,163432,33247],{"class":139},[129,163434,163435],{"class":131,"line":51},[129,163436,2414],{"emptyLinePlaceholder":56},[129,163438,163439,163441,163444,163446],{"class":131,"line":1194},[129,163440,30416],{"class":188},[129,163442,163443],{"class":139},"(numbers.index(",[129,163445,211],{"class":188},[129,163447,30498],{"class":139},[129,163449,163450,163452,163455,163457],{"class":131,"line":1209},[129,163451,30416],{"class":188},[129,163453,163454],{"class":139},"(numbers.count(",[129,163456,217],{"class":188},[129,163458,30498],{"class":139},[129,163460,163461,163463,163465,163467],{"class":131,"line":1215},[129,163462,30416],{"class":188},[129,163464,140],{"class":139},[129,163466,7373],{"class":188},[129,163468,163469],{"class":139},"(numbers))\n",[14,163471,163472],{},"排序：",[120,163474,163476],{"className":30379,"code":163475,"language":30381,"meta":42,"style":42},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[126,163477,163478,163502,163506,163511,163518,163522,163536,163542,163546,163551],{"__ignoreMap":42},[129,163479,163480,163482,163484,163486,163488,163490,163492,163494,163496,163498,163500],{"class":131,"line":132},[129,163481,163084],{"class":139},[129,163483,185],{"class":135},[129,163485,52227],{"class":139},[129,163487,211],{"class":188},[129,163489,12450],{"class":139},[129,163491,357],{"class":188},[129,163493,12450],{"class":139},[129,163495,458],{"class":188},[129,163497,12450],{"class":139},[129,163499,217],{"class":188},[129,163501,33247],{"class":139},[129,163503,163504],{"class":131,"line":51},[129,163505,2414],{"emptyLinePlaceholder":56},[129,163507,163508],{"class":131,"line":1194},[129,163509,163510],{"class":139},"numbers.sort()\n",[129,163512,163513,163515],{"class":131,"line":1209},[129,163514,30416],{"class":188},[129,163516,163517],{"class":139},"(numbers)\n",[129,163519,163520],{"class":131,"line":1215},[129,163521,2414],{"emptyLinePlaceholder":56},[129,163523,163524,163527,163530,163532,163534],{"class":131,"line":1229},[129,163525,163526],{"class":139},"numbers.sort(",[129,163528,163529],{"class":5231},"reverse",[129,163531,185],{"class":135},[129,163533,31477],{"class":188},[129,163535,146],{"class":139},[129,163537,163538,163540],{"class":131,"line":1235},[129,163539,30416],{"class":188},[129,163541,163517],{"class":139},[129,163543,163544],{"class":131,"line":1326},[129,163545,2414],{"emptyLinePlaceholder":56},[129,163547,163548],{"class":131,"line":1332},[129,163549,163550],{"class":139},"numbers.reverse()\n",[129,163552,163553,163555],{"class":131,"line":1344},[129,163554,30416],{"class":188},[129,163556,163517],{"class":139},[14,163558,163559,163562,163563,163566],{},[126,163560,163561],{},"sort()"," 会修改原列表，",[126,163564,163565],{},"sorted()"," 返回新列表。",[120,163568,163570],{"className":30379,"code":163569,"language":30381,"meta":42,"style":42},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[126,163571,163572,163596,163608,163612,163618],{"__ignoreMap":42},[129,163573,163574,163576,163578,163580,163582,163584,163586,163588,163590,163592,163594],{"class":131,"line":132},[129,163575,163084],{"class":139},[129,163577,185],{"class":135},[129,163579,52227],{"class":139},[129,163581,211],{"class":188},[129,163583,12450],{"class":139},[129,163585,357],{"class":188},[129,163587,12450],{"class":139},[129,163589,458],{"class":188},[129,163591,12450],{"class":139},[129,163593,217],{"class":188},[129,163595,33247],{"class":139},[129,163597,163598,163601,163603,163606],{"class":131,"line":51},[129,163599,163600],{"class":139},"new_numbers ",[129,163602,185],{"class":135},[129,163604,163605],{"class":188}," sorted",[129,163607,163517],{"class":139},[129,163609,163610],{"class":131,"line":1194},[129,163611,2414],{"emptyLinePlaceholder":56},[129,163613,163614,163616],{"class":131,"line":1209},[129,163615,30416],{"class":188},[129,163617,163517],{"class":139},[129,163619,163620,163622],{"class":131,"line":1215},[129,163621,30416],{"class":188},[129,163623,163624],{"class":139},"(new_numbers)\n",[71,163626,163628],{"id":163627},"_65-列表遍历","6.5 列表遍历",[120,163630,163632],{"className":30379,"code":163631,"language":30381,"meta":42,"style":42},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[126,163633,163634,163654,163658,163668],{"__ignoreMap":42},[129,163635,163636,163638,163640,163642,163644,163646,163648,163650,163652],{"class":131,"line":132},[129,163637,160381],{"class":139},[129,163639,185],{"class":135},[129,163641,52227],{"class":139},[129,163643,149889],{"class":244},[129,163645,12450],{"class":139},[129,163647,150937],{"class":244},[129,163649,12450],{"class":139},[129,163651,159732],{"class":244},[129,163653,33247],{"class":139},[129,163655,163656],{"class":131,"line":51},[129,163657,2414],{"emptyLinePlaceholder":56},[129,163659,163660,163662,163664,163666],{"class":131,"line":1194},[129,163661,3039],{"class":135},[129,163663,160417],{"class":139},[129,163665,26044],{"class":135},[129,163667,160422],{"class":139},[129,163669,163670,163672],{"class":131,"line":1209},[129,163671,31300],{"class":188},[129,163673,150661],{"class":139},[14,163675,163676],{},"需要索引时：",[120,163678,163680],{"className":30379,"code":163679,"language":30381,"meta":42,"style":42},"for index, name in enumerate(names):\n    print(index, name)\n",[126,163681,163682,163696],{"__ignoreMap":42},[129,163683,163684,163686,163689,163691,163693],{"class":131,"line":132},[129,163685,3039],{"class":135},[129,163687,163688],{"class":139}," index, name ",[129,163690,26044],{"class":135},[129,163692,31607],{"class":188},[129,163694,163695],{"class":139},"(names):\n",[129,163697,163698,163700],{"class":131,"line":51},[129,163699,31300],{"class":188},[129,163701,163702],{"class":139},"(index, name)\n",[14,163704,163705],{},"统计总分：",[120,163707,163709],{"className":30379,"code":163708,"language":30381,"meta":42,"style":42},"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",[126,163710,163711,163736,163744,163748,163759,163767,163771,163788],{"__ignoreMap":42},[129,163712,163713,163716,163718,163720,163722,163724,163726,163728,163730,163732,163734],{"class":131,"line":132},[129,163714,163715],{"class":139},"scores ",[129,163717,185],{"class":135},[129,163719,52227],{"class":139},[129,163721,1001],{"class":188},[129,163723,12450],{"class":139},[129,163725,875],{"class":188},[129,163727,12450],{"class":139},[129,163729,393],{"class":188},[129,163731,12450],{"class":139},[129,163733,700],{"class":188},[129,163735,33247],{"class":139},[129,163737,163738,163740,163742],{"class":131,"line":51},[129,163739,157261],{"class":139},[129,163741,185],{"class":135},[129,163743,47334],{"class":188},[129,163745,163746],{"class":131,"line":1194},[129,163747,2414],{"emptyLinePlaceholder":56},[129,163749,163750,163752,163754,163756],{"class":131,"line":1209},[129,163751,3039],{"class":135},[129,163753,157784],{"class":139},[129,163755,26044],{"class":135},[129,163757,163758],{"class":139}," scores:\n",[129,163760,163761,163763,163765],{"class":131,"line":1215},[129,163762,159308],{"class":139},[129,163764,9492],{"class":135},[129,163766,1593],{"class":139},[129,163768,163769],{"class":131,"line":1229},[129,163770,2414],{"emptyLinePlaceholder":56},[129,163772,163773,163776,163778,163781,163783,163785],{"class":131,"line":1235},[129,163774,163775],{"class":139},"avg ",[129,163777,185],{"class":135},[129,163779,163780],{"class":139}," total ",[129,163782,723],{"class":135},[129,163784,7346],{"class":188},[129,163786,163787],{"class":139},"(scores)\n",[129,163789,163790,163792,163794,163796,163799,163801,163804,163806,163808,163810],{"class":131,"line":1326},[129,163791,30416],{"class":188},[129,163793,140],{"class":139},[129,163795,192],{"class":135},[129,163797,163798],{"class":244},"\"平均分:",[129,163800,1035],{"class":188},[129,163802,163803],{"class":139},"avg",[129,163805,157160],{"class":135},[129,163807,1085],{"class":188},[129,163809,390],{"class":244},[129,163811,146],{"class":139},[71,163813,163815],{"id":163814},"_66-元组tuple","6.6 元组tuple",[14,163817,163818],{},"元组和列表类似，但不可修改。",[120,163820,163822],{"className":30379,"code":163821,"language":30381,"meta":42,"style":42},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[126,163823,163824,163841],{"__ignoreMap":42},[129,163825,163826,163829,163831,163833,163835,163837,163839],{"class":131,"line":132},[129,163827,163828],{"class":139},"point ",[129,163830,185],{"class":135},[129,163832,1672],{"class":139},[129,163834,585],{"class":188},[129,163836,12450],{"class":139},[129,163838,839],{"class":188},[129,163840,146],{"class":139},[129,163842,163843,163845,163847,163849,163851,163853,163855,163857,163859],{"class":131,"line":51},[129,163844,116315],{"class":139},[129,163846,185],{"class":135},[129,163848,1672],{"class":139},[129,163850,149889],{"class":244},[129,163852,12450],{"class":139},[129,163854,789],{"class":188},[129,163856,12450],{"class":139},[129,163858,69270],{"class":244},[129,163860,146],{"class":139},[14,163862,163863],{},"单元素元组必须加逗号：",[120,163865,163867],{"className":30379,"code":163866,"language":30381,"meta":42,"style":42},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[126,163868,163869,163883,163896,163900,163914],{"__ignoreMap":42},[129,163870,163871,163874,163876,163878,163880],{"class":131,"line":132},[129,163872,163873],{"class":139},"t1 ",[129,163875,185],{"class":135},[129,163877,1672],{"class":139},[129,163879,585],{"class":188},[129,163881,163882],{"class":139},",)\n",[129,163884,163885,163888,163890,163892,163894],{"class":131,"line":51},[129,163886,163887],{"class":139},"t2 ",[129,163889,185],{"class":135},[129,163891,1672],{"class":139},[129,163893,585],{"class":188},[129,163895,146],{"class":139},[129,163897,163898],{"class":131,"line":1194},[129,163899,2414],{"emptyLinePlaceholder":56},[129,163901,163902,163904,163906,163908,163911],{"class":131,"line":1209},[129,163903,30416],{"class":188},[129,163905,140],{"class":139},[129,163907,103108],{"class":188},[129,163909,163910],{"class":139},"(t1))  ",[129,163912,163913],{"class":198},"# tuple\n",[129,163915,163916,163918,163920,163922,163925],{"class":131,"line":1215},[129,163917,30416],{"class":188},[129,163919,140],{"class":139},[129,163921,103108],{"class":188},[129,163923,163924],{"class":139},"(t2))  ",[129,163926,163927],{"class":198},"# int\n",[14,163929,163930],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[71,163932,163934],{"id":163933},"_67-字符串str","6.7 字符串str",[14,163936,163937],{},"字符串也是序列，可以索引、切片和遍历。",[120,163939,163941],{"className":30379,"code":163940,"language":30381,"meta":42,"style":42},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[126,163942,163943,163951,163955,163966,163978,163982,163993],{"__ignoreMap":42},[129,163944,163945,163947,163949],{"class":131,"line":132},[129,163946,156445],{"class":139},[129,163948,185],{"class":135},[129,163950,159682],{"class":244},[129,163952,163953],{"class":131,"line":51},[129,163954,2414],{"emptyLinePlaceholder":56},[129,163956,163957,163959,163962,163964],{"class":131,"line":1194},[129,163958,30416],{"class":188},[129,163960,163961],{"class":139},"(text[",[129,163963,331],{"class":188},[129,163965,4671],{"class":139},[129,163967,163968,163970,163972,163974,163976],{"class":131,"line":1209},[129,163969,30416],{"class":188},[129,163971,163961],{"class":139},[129,163973,671],{"class":135},[129,163975,357],{"class":188},[129,163977,4671],{"class":139},[129,163979,163980],{"class":131,"line":1215},[129,163981,2414],{"emptyLinePlaceholder":56},[129,163983,163984,163986,163988,163990],{"class":131,"line":1229},[129,163985,3039],{"class":135},[129,163987,159693],{"class":139},[129,163989,26044],{"class":135},[129,163991,163992],{"class":139}," text:\n",[129,163994,163995,163997],{"class":131,"line":1235},[129,163996,31300],{"class":188},[129,163998,159704],{"class":139},[14,164000,164001],{},"字符串不可变：",[120,164003,164005],{"className":30379,"code":164004,"language":30381,"meta":42,"style":42},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[126,164006,164007,164015],{"__ignoreMap":42},[129,164008,164009,164011,164013],{"class":131,"line":132},[129,164010,156445],{"class":139},[129,164012,185],{"class":135},[129,164014,159682],{"class":244},[129,164016,164017,164020,164022,164024,164026,164029],{"class":131,"line":51},[129,164018,164019],{"class":139},"text[",[129,164021,331],{"class":188},[129,164023,4457],{"class":139},[129,164025,185],{"class":135},[129,164027,164028],{"class":244}," \"P\"",[129,164030,164031],{"class":198},"  # 报错\n",[14,164033,164034],{},"如果要得到新字符串：",[120,164036,164038],{"className":30379,"code":164037,"language":30381,"meta":42,"style":42},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[126,164039,164040,164048,164066],{"__ignoreMap":42},[129,164041,164042,164044,164046],{"class":131,"line":132},[129,164043,156445],{"class":139},[129,164045,185],{"class":135},[129,164047,159682],{"class":244},[129,164049,164050,164052,164054,164056,164058,164061,164063],{"class":131,"line":51},[129,164051,156445],{"class":139},[129,164053,185],{"class":135},[129,164055,164028],{"class":244},[129,164057,45567],{"class":135},[129,164059,164060],{"class":139}," text[",[129,164062,357],{"class":188},[129,164064,164065],{"class":139},":]\n",[129,164067,164068,164070],{"class":131,"line":1194},[129,164069,30416],{"class":188},[129,164071,164072],{"class":139},"(text)\n",[71,164074,164076],{"id":164075},"_68-切片","6.8 切片",[14,164078,164079],{},"切片用于从序列中取一部分。",[120,164081,164083],{"className":30379,"code":164082,"language":30381,"meta":42,"style":42},"序列[开始:结束:步长]\n",[126,164084,164085],{"__ignoreMap":42},[129,164086,164087],{"class":131,"line":132},[129,164088,164082],{"class":139},[14,164090,164091],{},"结束位置不包含。",[120,164093,164095],{"className":30379,"code":164094,"language":30381,"meta":42,"style":42},"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",[126,164096,164097,164134,164138,164157,164172,164186,164200],{"__ignoreMap":42},[129,164098,164099,164102,164104,164106,164108,164110,164112,164114,164116,164118,164120,164122,164124,164126,164128,164130,164132],{"class":131,"line":132},[129,164100,164101],{"class":139},"nums ",[129,164103,185],{"class":135},[129,164105,52227],{"class":139},[129,164107,331],{"class":188},[129,164109,12450],{"class":139},[129,164111,357],{"class":188},[129,164113,12450],{"class":139},[129,164115,217],{"class":188},[129,164117,12450],{"class":139},[129,164119,211],{"class":188},[129,164121,12450],{"class":139},[129,164123,432],{"class":188},[129,164125,12450],{"class":139},[129,164127,458],{"class":188},[129,164129,12450],{"class":139},[129,164131,483],{"class":188},[129,164133,33247],{"class":139},[129,164135,164136],{"class":131,"line":51},[129,164137,2414],{"emptyLinePlaceholder":56},[129,164139,164140,164142,164145,164147,164149,164151,164154],{"class":131,"line":1194},[129,164141,30416],{"class":188},[129,164143,164144],{"class":139},"(nums[",[129,164146,357],{"class":188},[129,164148,998],{"class":139},[129,164150,432],{"class":188},[129,164152,164153],{"class":139},"])    ",[129,164155,164156],{"class":198},"# [1, 2, 3]\n",[129,164158,164159,164161,164164,164166,164169],{"class":131,"line":1209},[129,164160,30416],{"class":188},[129,164162,164163],{"class":139},"(nums[:",[129,164165,211],{"class":188},[129,164167,164168],{"class":139},"])     ",[129,164170,164171],{"class":198},"# [0, 1, 2]\n",[129,164173,164174,164176,164178,164180,164183],{"class":131,"line":1215},[129,164175,30416],{"class":188},[129,164177,164144],{"class":139},[129,164179,211],{"class":188},[129,164181,164182],{"class":139},":])     ",[129,164184,164185],{"class":198},"# [3, 4, 5, 6]\n",[129,164187,164188,164190,164193,164195,164197],{"class":131,"line":1229},[129,164189,30416],{"class":188},[129,164191,164192],{"class":139},"(nums[::",[129,164194,217],{"class":188},[129,164196,164153],{"class":139},[129,164198,164199],{"class":198},"# [0, 2, 4, 6]\n",[129,164201,164202,164204,164206,164208,164210,164213],{"class":131,"line":1235},[129,164203,30416],{"class":188},[129,164205,164192],{"class":139},[129,164207,671],{"class":135},[129,164209,357],{"class":188},[129,164211,164212],{"class":139},"])   ",[129,164214,164215],{"class":198},"# 反转\n",[14,164217,164218],{},"字符串切片：",[120,164220,164222],{"className":30379,"code":164221,"language":30381,"meta":42,"style":42},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[126,164223,164224,164233,164247],{"__ignoreMap":42},[129,164225,164226,164228,164230],{"class":131,"line":132},[129,164227,156445],{"class":139},[129,164229,185],{"class":135},[129,164231,164232],{"class":244}," \"abcdef\"\n",[129,164234,164235,164237,164239,164241,164243,164245],{"class":131,"line":51},[129,164236,30416],{"class":188},[129,164238,163961],{"class":139},[129,164240,357],{"class":188},[129,164242,998],{"class":139},[129,164244,432],{"class":188},[129,164246,4671],{"class":139},[129,164248,164249,164251,164254,164256,164258],{"class":131,"line":1194},[129,164250,30416],{"class":188},[129,164252,164253],{"class":139},"(text[::",[129,164255,671],{"class":135},[129,164257,357],{"class":188},[129,164259,4671],{"class":139},[71,164261,164263],{"id":164262},"_69-集合set","6.9 集合set",[14,164265,164266],{},"集合特点：",[83,164268,164269,164272,164275],{},[86,164270,164271],{},"无序。",[86,164273,164274],{},"元素不重复。",[86,164276,164277],{},"可以做交集、并集、差集。",[120,164279,164281],{"className":30379,"code":164280,"language":30381,"meta":42,"style":42},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[126,164282,164283,164311],{"__ignoreMap":42},[129,164284,164285,164287,164289,164291,164293,164295,164297,164299,164301,164303,164305,164307,164309],{"class":131,"line":132},[129,164286,164101],{"class":139},[129,164288,185],{"class":135},[129,164290,4462],{"class":139},[129,164292,357],{"class":188},[129,164294,12450],{"class":139},[129,164296,217],{"class":188},[129,164298,12450],{"class":139},[129,164300,211],{"class":188},[129,164302,12450],{"class":139},[129,164304,211],{"class":188},[129,164306,12450],{"class":139},[129,164308,432],{"class":188},[129,164310,1579],{"class":139},[129,164312,164313,164315],{"class":131,"line":51},[129,164314,30416],{"class":188},[129,164316,164317],{"class":139},"(nums)\n",[14,164319,164320],{},"创建空集合：",[120,164322,164324],{"className":30379,"code":164323,"language":30381,"meta":42,"style":42},"s = set()\n",[126,164325,164326],{"__ignoreMap":42},[129,164327,164328,164330,164332,164334],{"class":131,"line":132},[129,164329,10594],{"class":139},[129,164331,185],{"class":135},[129,164333,119723],{"class":188},[129,164335,1990],{"class":139},[14,164337,9040,164338,164340],{},[126,164339,32460],{}," 是空字典，不是空集合。",[14,164342,164343],{},"集合常用操作：",[120,164345,164347],{"className":30379,"code":164346,"language":30381,"meta":42,"style":42},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[126,164348,164349,164369,164373,164382,164391,164400],{"__ignoreMap":42},[129,164350,164351,164353,164355,164357,164359,164361,164363,164365,164367],{"class":131,"line":132},[129,164352,10594],{"class":139},[129,164354,185],{"class":135},[129,164356,4462],{"class":139},[129,164358,357],{"class":188},[129,164360,12450],{"class":139},[129,164362,217],{"class":188},[129,164364,12450],{"class":139},[129,164366,211],{"class":188},[129,164368,1579],{"class":139},[129,164370,164371],{"class":131,"line":51},[129,164372,2414],{"emptyLinePlaceholder":56},[129,164374,164375,164378,164380],{"class":131,"line":1194},[129,164376,164377],{"class":139},"s.add(",[129,164379,432],{"class":188},[129,164381,146],{"class":139},[129,164383,164384,164387,164389],{"class":131,"line":1209},[129,164385,164386],{"class":139},"s.remove(",[129,164388,217],{"class":188},[129,164390,146],{"class":139},[129,164392,164393,164396,164398],{"class":131,"line":1215},[129,164394,164395],{"class":139},"s.discard(",[129,164397,585],{"class":188},[129,164399,146],{"class":139},[129,164401,164402,164404,164406,164408],{"class":131,"line":1229},[129,164403,30416],{"class":188},[129,164405,140],{"class":139},[129,164407,7373],{"class":188},[129,164409,164410],{"class":139},"(s))\n",[14,164412,164413],{},"交并差：",[120,164415,164417],{"className":30379,"code":164416,"language":30381,"meta":42,"style":42},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[126,164418,164419,164439,164459,164463,164478,164491],{"__ignoreMap":42},[129,164420,164421,164423,164425,164427,164429,164431,164433,164435,164437],{"class":131,"line":132},[129,164422,10934],{"class":139},[129,164424,185],{"class":135},[129,164426,4462],{"class":139},[129,164428,357],{"class":188},[129,164430,12450],{"class":139},[129,164432,217],{"class":188},[129,164434,12450],{"class":139},[129,164436,211],{"class":188},[129,164438,1579],{"class":139},[129,164440,164441,164443,164445,164447,164449,164451,164453,164455,164457],{"class":131,"line":51},[129,164442,10960],{"class":139},[129,164444,185],{"class":135},[129,164446,4462],{"class":139},[129,164448,211],{"class":188},[129,164450,12450],{"class":139},[129,164452,432],{"class":188},[129,164454,12450],{"class":139},[129,164456,458],{"class":188},[129,164458,1579],{"class":139},[129,164460,164461],{"class":131,"line":1194},[129,164462,2414],{"emptyLinePlaceholder":56},[129,164464,164465,164467,164470,164472,164475],{"class":131,"line":1209},[129,164466,30416],{"class":188},[129,164468,164469],{"class":139},"(a ",[129,164471,492],{"class":135},[129,164473,164474],{"class":139}," b)  ",[129,164476,164477],{"class":198},"# 交集\n",[129,164479,164480,164482,164484,164486,164488],{"class":131,"line":1215},[129,164481,30416],{"class":188},[129,164483,164469],{"class":139},[129,164485,1060],{"class":135},[129,164487,164474],{"class":139},[129,164489,164490],{"class":198},"# 并集\n",[129,164492,164493,164495,164497,164499,164501],{"class":131,"line":1229},[129,164494,30416],{"class":188},[129,164496,164469],{"class":139},[129,164498,671],{"class":135},[129,164500,164474],{"class":139},[129,164502,164503],{"class":198},"# 差集\n",[71,164505,164507],{"id":164506},"_610-字典dict","6.10 字典dict",[14,164509,164510],{},"字典通过 key-value 保存数据。",[120,164512,164514],{"className":30379,"code":164513,"language":30381,"meta":42,"style":42},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[126,164515,164516,164524,164534,164545,164555],{"__ignoreMap":42},[129,164517,164518,164520,164522],{"class":131,"line":132},[129,164519,149482],{"class":139},[129,164521,185],{"class":135},[129,164523,15587],{"class":139},[129,164525,164526,164528,164530,164532],{"class":131,"line":51},[129,164527,147021],{"class":244},[129,164529,51438],{"class":139},[129,164531,149889],{"class":244},[129,164533,31467],{"class":139},[129,164535,164536,164539,164541,164543],{"class":131,"line":1194},[129,164537,164538],{"class":244},"    \"age\"",[129,164540,51438],{"class":139},[129,164542,789],{"class":188},[129,164544,31467],{"class":139},[129,164546,164547,164550,164552],{"class":131,"line":1209},[129,164548,164549],{"class":244},"    \"score\"",[129,164551,51438],{"class":139},[129,164553,164554],{"class":188},"95\n",[129,164556,164557],{"class":131,"line":1215},[129,164558,1579],{"class":139},[14,164560,164561],{},"获取值：",[120,164563,164565],{"className":30379,"code":164564,"language":30381,"meta":42,"style":42},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[126,164566,164567,164578],{"__ignoreMap":42},[129,164568,164569,164571,164574,164576],{"class":131,"line":132},[129,164570,30416],{"class":188},[129,164572,164573],{"class":139},"(student[",[129,164575,62680],{"class":244},[129,164577,4671],{"class":139},[129,164579,164580,164582,164585,164587],{"class":131,"line":51},[129,164581,30416],{"class":188},[129,164583,164584],{"class":139},"(student.get(",[129,164586,62680],{"class":244},[129,164588,30498],{"class":139},[14,164590,15403],{},[120,164592,164594],{"className":30379,"code":164593,"language":30381,"meta":42,"style":42},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[126,164595,164596,164609],{"__ignoreMap":42},[129,164597,164598,164600,164603,164606],{"class":131,"line":132},[129,164599,152860],{"class":139},[129,164601,164602],{"class":244},"\"address\"",[129,164604,164605],{"class":139},"]     ",[129,164607,164608],{"class":198},"# key不存在会报错\n",[129,164610,164611,164614,164616,164618],{"class":131,"line":51},[129,164612,164613],{"class":139},"student.get(",[129,164615,164602],{"class":244},[129,164617,13729],{"class":139},[129,164619,164620],{"class":198},"# key不存在返回None\n",[14,164622,164623],{},"设置默认值：",[120,164625,164627],{"className":30379,"code":164626,"language":30381,"meta":42,"style":42},"print(student.get(\"address\", \"未知\"))\n",[126,164628,164629],{"__ignoreMap":42},[129,164630,164631,164633,164635,164637,164639,164642],{"class":131,"line":132},[129,164632,30416],{"class":188},[129,164634,164584],{"class":139},[129,164636,164602],{"class":244},[129,164638,12450],{"class":139},[129,164640,164641],{"class":244},"\"未知\"",[129,164643,30498],{"class":139},[14,164645,164646],{},"新增和修改：",[120,164648,164650],{"className":30379,"code":164649,"language":30381,"meta":42,"style":42},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[126,164651,164652,164665],{"__ignoreMap":42},[129,164653,164654,164656,164658,164660,164662],{"class":131,"line":132},[129,164655,152860],{"class":139},[129,164657,69125],{"class":244},[129,164659,4457],{"class":139},[129,164661,185],{"class":135},[129,164663,164664],{"class":188}," 19\n",[129,164666,164667,164669,164671,164673,164675],{"class":131,"line":51},[129,164668,152860],{"class":139},[129,164670,164602],{"class":244},[129,164672,4457],{"class":139},[129,164674,185],{"class":135},[129,164676,164677],{"class":244}," \"北京\"\n",[14,164679,164680],{},"删除：",[120,164682,164684],{"className":30379,"code":164683,"language":30381,"meta":42,"style":42},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[126,164685,164686,164699,164709],{"__ignoreMap":42},[129,164687,164688,164690,164692,164695,164697],{"class":131,"line":132},[129,164689,155359],{"class":139},[129,164691,185],{"class":135},[129,164693,164694],{"class":139}," student.pop(",[129,164696,151473],{"class":244},[129,164698,146],{"class":139},[129,164700,164701,164703,164705,164707],{"class":131,"line":51},[129,164702,163384],{"class":135},[129,164704,152150],{"class":139},[129,164706,69125],{"class":244},[129,164708,33247],{"class":139},[129,164710,164711],{"class":131,"line":1194},[129,164712,164713],{"class":139},"student.clear()\n",[71,164715,164717],{"id":164716},"_611-字典遍历","6.11 字典遍历",[14,164719,164720],{},"遍历 key：",[120,164722,164724],{"className":30379,"code":164723,"language":30381,"meta":42,"style":42},"for key in student:\n    print(key, student[key])\n",[126,164725,164726,164738],{"__ignoreMap":42},[129,164727,164728,164730,164733,164735],{"class":131,"line":132},[129,164729,3039],{"class":135},[129,164731,164732],{"class":139}," key ",[129,164734,26044],{"class":135},[129,164736,164737],{"class":139}," student:\n",[129,164739,164740,164742],{"class":131,"line":51},[129,164741,31300],{"class":188},[129,164743,164744],{"class":139},"(key, student[key])\n",[14,164746,164747],{},"遍历 value：",[120,164749,164751],{"className":30379,"code":164750,"language":30381,"meta":42,"style":42},"for value in student.values():\n    print(value)\n",[126,164752,164753,164765],{"__ignoreMap":42},[129,164754,164755,164757,164760,164762],{"class":131,"line":132},[129,164756,3039],{"class":135},[129,164758,164759],{"class":139}," value ",[129,164761,26044],{"class":135},[129,164763,164764],{"class":139}," student.values():\n",[129,164766,164767,164769],{"class":131,"line":51},[129,164768,31300],{"class":188},[129,164770,164771],{"class":139},"(value)\n",[14,164773,164774],{},"遍历 key 和 value：",[120,164776,164778],{"className":30379,"code":164777,"language":30381,"meta":42,"style":42},"for key, value in student.items():\n    print(key, value)\n",[126,164779,164780,164792],{"__ignoreMap":42},[129,164781,164782,164784,164787,164789],{"class":131,"line":132},[129,164783,3039],{"class":135},[129,164785,164786],{"class":139}," key, value ",[129,164788,26044],{"class":135},[129,164790,164791],{"class":139}," student.items():\n",[129,164793,164794,164796],{"class":131,"line":51},[129,164795,31300],{"class":188},[129,164797,164798],{"class":139},"(key, value)\n",[71,164800,164802],{"id":164801},"_612-嵌套容器","6.12 嵌套容器",[14,164804,164805],{},"列表中保存字典，是项目中最常见的结构之一。",[120,164807,164809],{"className":30379,"code":164808,"language":30381,"meta":42,"style":42},"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",[126,164810,164811,164819,164847,164875,164903,164907,164911,164921],{"__ignoreMap":42},[129,164812,164813,164815,164817],{"class":131,"line":132},[129,164814,159717],{"class":139},[129,164816,185],{"class":135},[129,164818,55448],{"class":139},[129,164820,164821,164823,164825,164827,164829,164831,164833,164835,164837,164839,164841,164843,164845],{"class":131,"line":51},[129,164822,148386],{"class":139},[129,164824,62680],{"class":244},[129,164826,51438],{"class":139},[129,164828,149889],{"class":244},[129,164830,12450],{"class":139},[129,164832,69125],{"class":244},[129,164834,51438],{"class":139},[129,164836,789],{"class":188},[129,164838,12450],{"class":139},[129,164840,151473],{"class":244},[129,164842,51438],{"class":139},[129,164844,1128],{"class":188},[129,164846,4944],{"class":139},[129,164848,164849,164851,164853,164855,164857,164859,164861,164863,164865,164867,164869,164871,164873],{"class":131,"line":1194},[129,164850,148386],{"class":139},[129,164852,62680],{"class":244},[129,164854,51438],{"class":139},[129,164856,150937],{"class":244},[129,164858,12450],{"class":139},[129,164860,69125],{"class":244},[129,164862,51438],{"class":139},[129,164864,764],{"class":188},[129,164866,12450],{"class":139},[129,164868,151473],{"class":244},[129,164870,51438],{"class":139},[129,164872,950],{"class":188},[129,164874,4944],{"class":139},[129,164876,164877,164879,164881,164883,164885,164887,164889,164891,164893,164895,164897,164899,164901],{"class":131,"line":1209},[129,164878,148386],{"class":139},[129,164880,62680],{"class":244},[129,164882,51438],{"class":139},[129,164884,159732],{"class":244},[129,164886,12450],{"class":139},[129,164888,69125],{"class":244},[129,164890,51438],{"class":139},[129,164892,814],{"class":188},[129,164894,12450],{"class":139},[129,164896,151473],{"class":244},[129,164898,51438],{"class":139},[129,164900,545],{"class":188},[129,164902,4944],{"class":139},[129,164904,164905],{"class":131,"line":1215},[129,164906,33247],{"class":139},[129,164908,164909],{"class":131,"line":1229},[129,164910,2414],{"emptyLinePlaceholder":56},[129,164912,164913,164915,164917,164919],{"class":131,"line":1235},[129,164914,3039],{"class":135},[129,164916,152138],{"class":139},[129,164918,26044],{"class":135},[129,164920,152143],{"class":139},[129,164922,164923,164925,164927,164929,164932,164934],{"class":131,"line":1326},[129,164924,31300],{"class":188},[129,164926,164573],{"class":139},[129,164928,62680],{"class":244},[129,164930,164931],{"class":139},"], student[",[129,164933,151473],{"class":244},[129,164935,4671],{"class":139},[14,164937,164938],{},"统计平均分：",[120,164940,164942],{"className":30379,"code":164941,"language":30381,"meta":42,"style":42},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[126,164943,164944,164952,164956,164966,164978,164982,164997],{"__ignoreMap":42},[129,164945,164946,164948,164950],{"class":131,"line":132},[129,164947,157261],{"class":139},[129,164949,185],{"class":135},[129,164951,47334],{"class":188},[129,164953,164954],{"class":131,"line":51},[129,164955,2414],{"emptyLinePlaceholder":56},[129,164957,164958,164960,164962,164964],{"class":131,"line":1194},[129,164959,3039],{"class":135},[129,164961,152138],{"class":139},[129,164963,26044],{"class":135},[129,164965,152143],{"class":139},[129,164967,164968,164970,164972,164974,164976],{"class":131,"line":1209},[129,164969,159308],{"class":139},[129,164971,9492],{"class":135},[129,164973,152150],{"class":139},[129,164975,151473],{"class":244},[129,164977,33247],{"class":139},[129,164979,164980],{"class":131,"line":1215},[129,164981,2414],{"emptyLinePlaceholder":56},[129,164983,164984,164986,164988,164990,164992,164994],{"class":131,"line":1229},[129,164985,163775],{"class":139},[129,164987,185],{"class":135},[129,164989,163780],{"class":139},[129,164991,723],{"class":135},[129,164993,7346],{"class":188},[129,164995,164996],{"class":139},"(students)\n",[129,164998,164999,165001,165003,165005,165007,165009,165011,165013,165015,165017],{"class":131,"line":1235},[129,165000,30416],{"class":188},[129,165002,140],{"class":139},[129,165004,192],{"class":135},[129,165006,163798],{"class":244},[129,165008,1035],{"class":188},[129,165010,163803],{"class":139},[129,165012,157160],{"class":135},[129,165014,1085],{"class":188},[129,165016,390],{"class":244},[129,165018,146],{"class":139},[14,165020,165021],{},"查找学生：",[120,165023,165025],{"className":30379,"code":165024,"language":30381,"meta":42,"style":42},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[126,165026,165027,165042,165046,165056,165070,165076,165080,165086],{"__ignoreMap":42},[129,165028,165029,165031,165033,165035,165037,165040],{"class":131,"line":132},[129,165030,111579],{"class":139},[129,165032,185],{"class":135},[129,165034,60606],{"class":188},[129,165036,140],{"class":139},[129,165038,165039],{"class":244},"\"请输入学生姓名:\"",[129,165041,146],{"class":139},[129,165043,165044],{"class":131,"line":51},[129,165045,2414],{"emptyLinePlaceholder":56},[129,165047,165048,165050,165052,165054],{"class":131,"line":1194},[129,165049,3039],{"class":135},[129,165051,152138],{"class":139},[129,165053,26044],{"class":135},[129,165055,152143],{"class":139},[129,165057,165058,165060,165062,165064,165066,165068],{"class":131,"line":1209},[129,165059,3115],{"class":135},[129,165061,152150],{"class":139},[129,165063,62680],{"class":244},[129,165065,4457],{"class":139},[129,165067,2963],{"class":135},[129,165069,160433],{"class":139},[129,165071,165072,165074],{"class":131,"line":1215},[129,165073,32452],{"class":188},[129,165075,150043],{"class":139},[129,165077,165078],{"class":131,"line":1229},[129,165079,31628],{"class":135},[129,165081,165082,165084],{"class":131,"line":1235},[129,165083,1715],{"class":135},[129,165085,3753],{"class":139},[129,165087,165088,165090,165092,165095],{"class":131,"line":1326},[129,165089,31300],{"class":188},[129,165091,140],{"class":139},[129,165093,165094],{"class":244},"\"没有找到\"",[129,165096,146],{"class":139},[71,165098,165100],{"id":165099},"_613-容器通用操作","6.13 容器通用操作",[14,165102,165103],{},"长度：",[120,165105,165107],{"className":30379,"code":165106,"language":30381,"meta":42,"style":42},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[126,165108,165109,165128,165138],{"__ignoreMap":42},[129,165110,165111,165113,165116,165118,165120,165122,165124,165126],{"class":131,"line":132},[129,165112,7373],{"class":188},[129,165114,165115],{"class":139},"([",[129,165117,357],{"class":188},[129,165119,12450],{"class":139},[129,165121,217],{"class":188},[129,165123,12450],{"class":139},[129,165125,211],{"class":188},[129,165127,4671],{"class":139},[129,165129,165130,165132,165134,165136],{"class":131,"line":51},[129,165131,7373],{"class":188},[129,165133,140],{"class":139},[129,165135,155881],{"class":244},[129,165137,146],{"class":139},[129,165139,165140,165142,165145,165147,165149,165151],{"class":131,"line":1194},[129,165141,7373],{"class":188},[129,165143,165144],{"class":139},"({",[129,165146,62680],{"class":244},[129,165148,51438],{"class":139},[129,165150,149889],{"class":244},[129,165152,165153],{"class":139},"})\n",[14,165155,165156],{},"最大最小：",[120,165158,165160],{"className":30379,"code":165159,"language":30381,"meta":42,"style":42},"max([1, 2, 3])\nmin([1, 2, 3])\n",[126,165161,165162,165180],{"__ignoreMap":42},[129,165163,165164,165166,165168,165170,165172,165174,165176,165178],{"class":131,"line":132},[129,165165,6030],{"class":188},[129,165167,165115],{"class":139},[129,165169,357],{"class":188},[129,165171,12450],{"class":139},[129,165173,217],{"class":188},[129,165175,12450],{"class":139},[129,165177,211],{"class":188},[129,165179,4671],{"class":139},[129,165181,165182,165185,165187,165189,165191,165193,165195,165197],{"class":131,"line":51},[129,165183,165184],{"class":188},"min",[129,165186,165115],{"class":139},[129,165188,357],{"class":188},[129,165190,12450],{"class":139},[129,165192,217],{"class":188},[129,165194,12450],{"class":139},[129,165196,211],{"class":188},[129,165198,4671],{"class":139},[14,165200,165201],{},"求和：",[120,165203,165205],{"className":30379,"code":165204,"language":30381,"meta":42,"style":42},"sum([1, 2, 3])\n",[126,165206,165207],{"__ignoreMap":42},[129,165208,165209,165212,165214,165216,165218,165220,165222,165224],{"class":131,"line":132},[129,165210,165211],{"class":188},"sum",[129,165213,165115],{"class":139},[129,165215,357],{"class":188},[129,165217,12450],{"class":139},[129,165219,217],{"class":188},[129,165221,12450],{"class":139},[129,165223,211],{"class":188},[129,165225,4671],{"class":139},[14,165227,163472],{},[120,165229,165231],{"className":30379,"code":165230,"language":30381,"meta":42,"style":42},"sorted([3, 1, 2])\n",[126,165232,165233],{"__ignoreMap":42},[129,165234,165235,165238,165240,165242,165244,165246,165248,165250],{"class":131,"line":132},[129,165236,165237],{"class":188},"sorted",[129,165239,165115],{"class":139},[129,165241,211],{"class":188},[129,165243,12450],{"class":139},[129,165245,357],{"class":188},[129,165247,12450],{"class":139},[129,165249,217],{"class":188},[129,165251,4671],{"class":139},[14,165253,165254],{},"类型转换：",[120,165256,165258],{"className":30379,"code":165257,"language":30381,"meta":42,"style":42},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[126,165259,165260,165270,165288],{"__ignoreMap":42},[129,165261,165262,165264,165266,165268],{"class":131,"line":132},[129,165263,154071],{"class":188},[129,165265,140],{"class":139},[129,165267,155881],{"class":244},[129,165269,146],{"class":139},[129,165271,165272,165274,165276,165278,165280,165282,165284,165286],{"class":131,"line":51},[129,165273,155266],{"class":188},[129,165275,165115],{"class":139},[129,165277,357],{"class":188},[129,165279,12450],{"class":139},[129,165281,217],{"class":188},[129,165283,12450],{"class":139},[129,165285,211],{"class":188},[129,165287,4671],{"class":139},[129,165289,165290,165292,165294,165296,165298,165300,165302,165304,165306,165308],{"class":131,"line":1194},[129,165291,155291],{"class":188},[129,165293,165115],{"class":139},[129,165295,357],{"class":188},[129,165297,12450],{"class":139},[129,165299,357],{"class":188},[129,165301,12450],{"class":139},[129,165303,217],{"class":188},[129,165305,12450],{"class":139},[129,165307,211],{"class":188},[129,165309,4671],{"class":139},[14,165311,165312],{},"成员判断：",[120,165314,165316],{"className":30379,"code":165315,"language":30381,"meta":42,"style":42},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[126,165317,165318,165335,165359],{"__ignoreMap":42},[129,165319,165320,165322,165324,165327,165330,165333],{"class":131,"line":132},[129,165321,30416],{"class":188},[129,165323,140],{"class":139},[129,165325,165326],{"class":244},"\"a\"",[129,165328,165329],{"class":135}," in",[129,165331,165332],{"class":244}," \"abc\"",[129,165334,146],{"class":139},[129,165336,165337,165339,165341,165343,165345,165347,165349,165351,165353,165355,165357],{"class":131,"line":51},[129,165338,30416],{"class":188},[129,165340,140],{"class":139},[129,165342,357],{"class":188},[129,165344,165329],{"class":135},[129,165346,52227],{"class":139},[129,165348,357],{"class":188},[129,165350,12450],{"class":139},[129,165352,217],{"class":188},[129,165354,12450],{"class":139},[129,165356,211],{"class":188},[129,165358,4671],{"class":139},[129,165360,165361,165363,165365,165367,165369,165371,165373,165375,165377],{"class":131,"line":1194},[129,165362,30416],{"class":188},[129,165364,140],{"class":139},[129,165366,62680],{"class":244},[129,165368,165329],{"class":135},[129,165370,4462],{"class":139},[129,165372,62680],{"class":244},[129,165374,51438],{"class":139},[129,165376,149889],{"class":244},[129,165378,165153],{"class":139},[71,165380,165382],{"id":165381},"_614-推导式","6.14 推导式",[14,165384,165385],{},"推导式用于快速生成容器。",[14,165387,165388],{},"列表推导式：",[120,165390,165392],{"className":30379,"code":165391,"language":30381,"meta":42,"style":42},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[126,165393,165394,165421],{"__ignoreMap":42},[129,165395,165396,165398,165400,165403,165405,165407,165409,165411,165413,165415,165417,165419],{"class":131,"line":132},[129,165397,164101],{"class":139},[129,165399,185],{"class":135},[129,165401,165402],{"class":139}," [i ",[129,165404,3039],{"class":135},[129,165406,9453],{"class":139},[129,165408,26044],{"class":135},[129,165410,32444],{"class":188},[129,165412,140],{"class":139},[129,165414,357],{"class":188},[129,165416,12450],{"class":139},[129,165418,483],{"class":188},[129,165420,97301],{"class":139},[129,165422,165423,165425],{"class":131,"line":51},[129,165424,30416],{"class":188},[129,165426,164317],{"class":139},[14,165428,165429],{},"带条件：",[120,165431,165433],{"className":30379,"code":165432,"language":30381,"meta":42,"style":42},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[126,165434,165435,165476],{"__ignoreMap":42},[129,165436,165437,165440,165442,165444,165446,165448,165450,165452,165454,165456,165458,165460,165462,165464,165466,165468,165470,165472,165474],{"class":131,"line":132},[129,165438,165439],{"class":139},"even_nums ",[129,165441,185],{"class":135},[129,165443,165402],{"class":139},[129,165445,3039],{"class":135},[129,165447,9453],{"class":139},[129,165449,26044],{"class":135},[129,165451,32444],{"class":188},[129,165453,140],{"class":139},[129,165455,357],{"class":188},[129,165457,12450],{"class":139},[129,165459,476],{"class":188},[129,165461,13729],{"class":139},[129,165463,1545],{"class":135},[129,165465,9453],{"class":139},[129,165467,467],{"class":135},[129,165469,14770],{"class":188},[129,165471,101560],{"class":135},[129,165473,4107],{"class":188},[129,165475,33247],{"class":139},[129,165477,165478,165480],{"class":131,"line":51},[129,165479,30416],{"class":188},[129,165481,165482],{"class":139},"(even_nums)\n",[14,165484,165485],{},"字典推导式：",[120,165487,165489],{"className":30379,"code":165488,"language":30381,"meta":42,"style":42},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[126,165490,165491,165525],{"__ignoreMap":42},[129,165492,165493,165496,165498,165501,165503,165505,165508,165510,165512,165514,165516,165518,165520,165522],{"class":131,"line":132},[129,165494,165495],{"class":139},"squares ",[129,165497,185],{"class":135},[129,165499,165500],{"class":139}," {i: i ",[129,165502,10676],{"class":135},[129,165504,14770],{"class":188},[129,165506,165507],{"class":135}," for",[129,165509,9453],{"class":139},[129,165511,26044],{"class":135},[129,165513,32444],{"class":188},[129,165515,140],{"class":139},[129,165517,357],{"class":188},[129,165519,12450],{"class":139},[129,165521,483],{"class":188},[129,165523,165524],{"class":139},")}\n",[129,165526,165527,165529],{"class":131,"line":51},[129,165528,30416],{"class":188},[129,165530,165531],{"class":139},"(squares)\n",[14,165533,165534],{},"集合推导式：",[120,165536,165538],{"className":30379,"code":165537,"language":30381,"meta":42,"style":42},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[126,165539,165540,165561],{"__ignoreMap":42},[129,165541,165542,165545,165547,165550,165552,165554,165556,165559],{"class":131,"line":132},[129,165543,165544],{"class":139},"chars ",[129,165546,185],{"class":135},[129,165548,165549],{"class":139}," {ch ",[129,165551,3039],{"class":135},[129,165553,159693],{"class":139},[129,165555,26044],{"class":135},[129,165557,165558],{"class":244}," \"hello\"",[129,165560,1579],{"class":139},[129,165562,165563,165565],{"class":131,"line":51},[129,165564,30416],{"class":188},[129,165566,165567],{"class":139},"(chars)\n",[14,165569,165570],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[71,165572,165574],{"id":165573},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[120,165576,165578],{"className":30379,"code":165577,"language":30381,"meta":42,"style":42},"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",[126,165579,165580,165588,165608,165628,165648,165668,165672,165676,165684,165698,165707,165711,165721,165733,165737,165757,165766,165770,165786,165791,165795,165809,165813,165835,165871],{"__ignoreMap":42},[129,165581,165582,165584,165586],{"class":131,"line":132},[129,165583,159717],{"class":139},[129,165585,185],{"class":135},[129,165587,55448],{"class":139},[129,165589,165590,165592,165594,165596,165598,165600,165602,165604,165606],{"class":131,"line":51},[129,165591,148386],{"class":139},[129,165593,62680],{"class":244},[129,165595,51438],{"class":139},[129,165597,149889],{"class":244},[129,165599,12450],{"class":139},[129,165601,151473],{"class":244},[129,165603,51438],{"class":139},[129,165605,1128],{"class":188},[129,165607,4944],{"class":139},[129,165609,165610,165612,165614,165616,165618,165620,165622,165624,165626],{"class":131,"line":1194},[129,165611,148386],{"class":139},[129,165613,62680],{"class":244},[129,165615,51438],{"class":139},[129,165617,150937],{"class":244},[129,165619,12450],{"class":139},[129,165621,151473],{"class":244},[129,165623,51438],{"class":139},[129,165625,950],{"class":188},[129,165627,4944],{"class":139},[129,165629,165630,165632,165634,165636,165638,165640,165642,165644,165646],{"class":131,"line":1209},[129,165631,148386],{"class":139},[129,165633,62680],{"class":244},[129,165635,51438],{"class":139},[129,165637,159732],{"class":244},[129,165639,12450],{"class":139},[129,165641,151473],{"class":244},[129,165643,51438],{"class":139},[129,165645,545],{"class":188},[129,165647,4944],{"class":139},[129,165649,165650,165652,165654,165656,165658,165660,165662,165664,165666],{"class":131,"line":1215},[129,165651,148386],{"class":139},[129,165653,62680],{"class":244},[129,165655,51438],{"class":139},[129,165657,163311],{"class":244},[129,165659,12450],{"class":139},[129,165661,151473],{"class":244},[129,165663,51438],{"class":139},[129,165665,1021],{"class":188},[129,165667,4944],{"class":139},[129,165669,165670],{"class":131,"line":1229},[129,165671,33247],{"class":139},[129,165673,165674],{"class":131,"line":1235},[129,165675,2414],{"emptyLinePlaceholder":56},[129,165677,165678,165680,165682],{"class":131,"line":1326},[129,165679,157261],{"class":139},[129,165681,185],{"class":135},[129,165683,47334],{"class":188},[129,165685,165686,165689,165691,165694,165696],{"class":131,"line":1332},[129,165687,165688],{"class":139},"max_student ",[129,165690,185],{"class":135},[129,165692,165693],{"class":139}," students[",[129,165695,331],{"class":188},[129,165697,33247],{"class":139},[129,165699,165700,165703,165705],{"class":131,"line":1344},[129,165701,165702],{"class":139},"passed ",[129,165704,185],{"class":135},[129,165706,51839],{"class":139},[129,165708,165709],{"class":131,"line":1626},[129,165710,2414],{"emptyLinePlaceholder":56},[129,165712,165713,165715,165717,165719],{"class":131,"line":1631},[129,165714,3039],{"class":135},[129,165716,152138],{"class":139},[129,165718,26044],{"class":135},[129,165720,152143],{"class":139},[129,165722,165723,165725,165727,165729,165731],{"class":131,"line":1637},[129,165724,159308],{"class":139},[129,165726,9492],{"class":135},[129,165728,152150],{"class":139},[129,165730,151473],{"class":244},[129,165732,33247],{"class":139},[129,165734,165735],{"class":131,"line":1642},[129,165736,2414],{"emptyLinePlaceholder":56},[129,165738,165739,165741,165743,165745,165747,165749,165752,165754],{"class":131,"line":1656},[129,165740,3115],{"class":135},[129,165742,152150],{"class":139},[129,165744,151473],{"class":244},[129,165746,4457],{"class":139},[129,165748,1099],{"class":135},[129,165750,165751],{"class":139}," max_student[",[129,165753,151473],{"class":244},[129,165755,165756],{"class":139},"]:\n",[129,165758,165759,165762,165764],{"class":131,"line":1661},[129,165760,165761],{"class":139},"        max_student ",[129,165763,185],{"class":135},[129,165765,152166],{"class":139},[129,165767,165768],{"class":131,"line":1667},[129,165769,2414],{"emptyLinePlaceholder":56},[129,165771,165772,165774,165776,165778,165780,165782,165784],{"class":131,"line":1688},[129,165773,3115],{"class":135},[129,165775,152150],{"class":139},[129,165777,151473],{"class":244},[129,165779,4457],{"class":139},[129,165781,1724],{"class":135},[129,165783,157838],{"class":188},[129,165785,3753],{"class":139},[129,165787,165788],{"class":131,"line":1693},[129,165789,165790],{"class":139},"        passed.append(student)\n",[129,165792,165793],{"class":131,"line":1707},[129,165794,2414],{"emptyLinePlaceholder":56},[129,165796,165797,165799,165801,165803,165805,165807],{"class":131,"line":1712},[129,165798,163775],{"class":139},[129,165800,185],{"class":135},[129,165802,163780],{"class":139},[129,165804,723],{"class":135},[129,165806,7346],{"class":188},[129,165808,164996],{"class":139},[129,165810,165811],{"class":131,"line":1741},[129,165812,2414],{"emptyLinePlaceholder":56},[129,165814,165815,165817,165819,165821,165823,165825,165827,165829,165831,165833],{"class":131,"line":1746},[129,165816,30416],{"class":188},[129,165818,140],{"class":139},[129,165820,192],{"class":135},[129,165822,163798],{"class":244},[129,165824,1035],{"class":188},[129,165826,163803],{"class":139},[129,165828,157160],{"class":135},[129,165830,1085],{"class":188},[129,165832,390],{"class":244},[129,165834,146],{"class":139},[129,165836,165837,165839,165841,165843,165846,165848,165851,165853,165855,165857,165859,165861,165863,165865,165867,165869],{"class":131,"line":1763},[129,165838,30416],{"class":188},[129,165840,140],{"class":139},[129,165842,192],{"class":135},[129,165844,165845],{"class":244},"\"最高分学生:",[129,165847,1035],{"class":188},[129,165849,165850],{"class":139},"max_student[",[129,165852,152883],{"class":244},[129,165854,1079],{"class":139},[129,165856,1085],{"class":188},[129,165858,4462],{"class":188},[129,165860,165850],{"class":139},[129,165862,152921],{"class":244},[129,165864,1079],{"class":139},[129,165866,1085],{"class":188},[129,165868,390],{"class":244},[129,165870,146],{"class":139},[129,165872,165873,165875,165877,165879,165882,165885,165888,165890,165892],{"class":131,"line":1768},[129,165874,30416],{"class":188},[129,165876,140],{"class":139},[129,165878,192],{"class":135},[129,165880,165881],{"class":244},"\"及格人数:",[129,165883,165884],{"class":188},"{len",[129,165886,165887],{"class":139},"(passed)",[129,165889,1085],{"class":188},[129,165891,390],{"class":244},[129,165893,146],{"class":139},[71,165895,165897],{"id":165896},"_616-易错点","6.16 易错点",[83,165899,165900,165903,165906,165909,165915,165924],{},[86,165901,165902],{},"列表可变，元组和字符串不可变。",[86,165904,165905],{},"切片结束位置不包含。",[86,165907,165908],{},"字典通过 key 取值，不是通过索引。",[86,165910,165911,165912,28386],{},"空集合要用 ",[126,165913,165914],{},"set()",[86,165916,104367,165917,165920,165921,28386],{},[126,165918,165919],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[126,165922,165923],{},"get()",[86,165925,165926],{},"嵌套容器要先看清楚每一层是什么类型。",[71,165928,165930],{"id":165929},"_617-本章练习","6.17 本章练习",[83,165932,165933,165936,165939,165942,165945],{},[86,165934,165935],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[86,165937,165938],{},"输入一句话，统计每个字符出现次数。",[86,165940,165941],{},"使用集合去除列表中的重复元素。",[86,165943,165944],{},"使用字典保存一个学生的信息，并实现修改成绩。",[86,165946,165947],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5141,165949,165950],{},"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":42,"searchDepth":51,"depth":51,"links":165952},[165953,165954,165955,165956,165957,165958,165959,165960,165961,165962,165963,165964,165965,165966,165967,165968,165969],{"id":162933,"depth":51,"text":162934},{"id":163050,"depth":51,"text":163051},{"id":163140,"depth":51,"text":163141},{"id":163264,"depth":51,"text":163265},{"id":163627,"depth":51,"text":163628},{"id":163814,"depth":51,"text":163815},{"id":163933,"depth":51,"text":163934},{"id":164075,"depth":51,"text":164076},{"id":164262,"depth":51,"text":164263},{"id":164506,"depth":51,"text":164507},{"id":164716,"depth":51,"text":164717},{"id":164801,"depth":51,"text":164802},{"id":165099,"depth":51,"text":165100},{"id":165381,"depth":51,"text":165382},{"id":165573,"depth":51,"text":165574},{"id":165896,"depth":51,"text":165897},{"id":165929,"depth":51,"text":165930},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162925,"description":53},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165976,"title":165977,"body":165978,"description":53,"extension":54,"meta":168150,"navigation":56,"path":168151,"seo":168152,"stem":168153,"__hash__":168154},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165979,"toc":168125},[165980,165983,165987,165990,166070,166073,166094,166097,166101,166104,166166,166169,166186,166190,166193,166238,166240,166248,166252,166255,166337,166340,166343,166368,166371,166394,166398,166401,166403,166465,166468,166470,166521,166525,166529,166535,166640,166644,166650,166721,166725,166728,166796,166799,166879,166883,166889,166925,166928,166931,167041,167047,167051,167054,167126,167129,167133,167137,167142,167204,167208,167213,167281,167285,167290,167406,167410,167413,167493,167496,167500,167503,167607,167609,167624,167627,167631,167769,167777,167781,167783,167794,167796,168054,168058,168090,168094,168122],[10,165981,165977],{"id":165982},"_7-函数进阶",[71,165984,165986],{"id":165985},"_71-多返回值","7.1 多返回值",[14,165988,165989],{},"Python 函数可以返回多个值，本质上返回的是元组。",[120,165991,165993],{"className":30379,"code":165992,"language":30381,"meta":42,"style":42},"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",[126,165994,165995,166004,166012,166020,166029,166036,166040,166044,166053,166059],{"__ignoreMap":42},[129,165996,165997,165999,166002],{"class":131,"line":132},[129,165998,31948],{"class":135},[129,166000,166001],{"class":1977}," get_info",[129,166003,31954],{"class":139},[129,166005,166006,166008,166010],{"class":131,"line":51},[129,166007,152371],{"class":139},[129,166009,185],{"class":135},[129,166011,149354],{"class":244},[129,166013,166014,166016,166018],{"class":131,"line":1194},[129,166015,152387],{"class":139},[129,166017,185],{"class":135},[129,166019,146552],{"class":188},[129,166021,166022,166024,166026],{"class":131,"line":1209},[129,166023,152402],{"class":139},[129,166025,185],{"class":135},[129,166027,166028],{"class":188}," 95\n",[129,166030,166031,166033],{"class":131,"line":1215},[129,166032,4104],{"class":135},[129,166034,166035],{"class":139}," name, age, score\n",[129,166037,166038],{"class":131,"line":1229},[129,166039,2414],{"emptyLinePlaceholder":56},[129,166041,166042],{"class":131,"line":1235},[129,166043,2414],{"emptyLinePlaceholder":56},[129,166045,166046,166048,166050],{"class":131,"line":1326},[129,166047,161307],{"class":139},[129,166049,185],{"class":135},[129,166051,166052],{"class":139}," get_info()\n",[129,166054,166055,166057],{"class":131,"line":1332},[129,166056,30416],{"class":188},[129,166058,76586],{"class":139},[129,166060,166061,166063,166065,166067],{"class":131,"line":1344},[129,166062,30416],{"class":188},[129,166064,140],{"class":139},[129,166066,103108],{"class":188},[129,166068,166069],{"class":139},"(result))\n",[14,166071,166072],{},"可以直接解包：",[120,166074,166076],{"className":30379,"code":166075,"language":30381,"meta":42,"style":42},"name, age, score = get_info()\nprint(name, age, score)\n",[126,166077,166078,166087],{"__ignoreMap":42},[129,166079,166080,166083,166085],{"class":131,"line":132},[129,166081,166082],{"class":139},"name, age, score ",[129,166084,185],{"class":135},[129,166086,166052],{"class":139},[129,166088,166089,166091],{"class":131,"line":51},[129,166090,30416],{"class":188},[129,166092,166093],{"class":139},"(name, age, score)\n",[14,166095,166096],{},"返回多个值适合函数需要同时给出多个结果时使用。",[71,166098,166100],{"id":166099},"_72-位置参数","7.2 位置参数",[14,166102,166103],{},"位置参数按顺序传递。",[120,166105,166107],{"className":30379,"code":166106,"language":30381,"meta":42,"style":42},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[126,166108,166109,166117,166145,166149,166153],{"__ignoreMap":42},[129,166110,166111,166113,166115],{"class":131,"line":132},[129,166112,31948],{"class":135},[129,166114,149373],{"class":1977},[129,166116,149376],{"class":139},[129,166118,166119,166121,166123,166125,166127,166129,166131,166133,166135,166137,166139,166141,166143],{"class":131,"line":51},[129,166120,31300],{"class":188},[129,166122,140],{"class":139},[129,166124,192],{"class":135},[129,166126,149387],{"class":244},[129,166128,1035],{"class":188},[129,166130,79811],{"class":139},[129,166132,1085],{"class":188},[129,166134,149396],{"class":244},[129,166136,1035],{"class":188},[129,166138,70222],{"class":139},[129,166140,1085],{"class":188},[129,166142,149405],{"class":244},[129,166144,146],{"class":139},[129,166146,166147],{"class":131,"line":1194},[129,166148,2414],{"emptyLinePlaceholder":56},[129,166150,166151],{"class":131,"line":1209},[129,166152,2414],{"emptyLinePlaceholder":56},[129,166154,166155,166158,166160,166162,166164],{"class":131,"line":1215},[129,166156,166157],{"class":139},"introduce(",[129,166159,149889],{"class":244},[129,166161,12450],{"class":139},[129,166163,789],{"class":188},[129,166165,146],{"class":139},[14,166167,166168],{},"顺序错了就会得到错误含义：",[120,166170,166172],{"className":30379,"code":166171,"language":30381,"meta":42,"style":42},"introduce(18, \"小明\")\n",[126,166173,166174],{"__ignoreMap":42},[129,166175,166176,166178,166180,166182,166184],{"class":131,"line":132},[129,166177,166157],{"class":139},[129,166179,789],{"class":188},[129,166181,12450],{"class":139},[129,166183,149889],{"class":244},[129,166185,146],{"class":139},[71,166187,166189],{"id":166188},"_73-关键字参数","7.3 关键字参数",[14,166191,166192],{},"关键字参数按参数名传递。",[120,166194,166196],{"className":30379,"code":166195,"language":30381,"meta":42,"style":42},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[126,166197,166198,166218],{"__ignoreMap":42},[129,166199,166200,166202,166204,166206,166208,166210,166212,166214,166216],{"class":131,"line":132},[129,166201,166157],{"class":139},[129,166203,79811],{"class":5231},[129,166205,185],{"class":135},[129,166207,149889],{"class":244},[129,166209,12450],{"class":139},[129,166211,70222],{"class":5231},[129,166213,185],{"class":135},[129,166215,789],{"class":188},[129,166217,146],{"class":139},[129,166219,166220,166222,166224,166226,166228,166230,166232,166234,166236],{"class":131,"line":51},[129,166221,166157],{"class":139},[129,166223,70222],{"class":5231},[129,166225,185],{"class":135},[129,166227,789],{"class":188},[129,166229,12450],{"class":139},[129,166231,79811],{"class":5231},[129,166233,185],{"class":135},[129,166235,149889],{"class":244},[129,166237,146],{"class":139},[14,166239,117935],{},[83,166241,166242,166245],{},[86,166243,166244],{},"顺序不容易错。",[86,166246,166247],{},"调用时可读性更强。",[71,166249,166251],{"id":166250},"_74-默认参数","7.4 默认参数",[14,166253,166254],{},"默认参数给参数设置默认值。",[120,166256,166258],{"className":30379,"code":166257,"language":30381,"meta":42,"style":42},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[126,166259,166260,166276,166306,166310,166314,166324],{"__ignoreMap":42},[129,166261,166262,166264,166266,166269,166271,166274],{"class":131,"line":132},[129,166263,31948],{"class":135},[129,166265,122094],{"class":1977},[129,166267,166268],{"class":139},"(host, port",[129,166270,185],{"class":135},[129,166272,166273],{"class":188},"3306",[129,166275,30787],{"class":139},[129,166277,166278,166280,166282,166284,166287,166289,166291,166293,166295,166297,166300,166302,166304],{"class":131,"line":51},[129,166279,31300],{"class":188},[129,166281,140],{"class":139},[129,166283,192],{"class":135},[129,166285,166286],{"class":244},"\"连接",[129,166288,1035],{"class":188},[129,166290,27396],{"class":139},[129,166292,1085],{"class":188},[129,166294,998],{"class":244},[129,166296,1035],{"class":188},[129,166298,166299],{"class":139},"port",[129,166301,1085],{"class":188},[129,166303,390],{"class":244},[129,166305,146],{"class":139},[129,166307,166308],{"class":131,"line":1194},[129,166309,2414],{"emptyLinePlaceholder":56},[129,166311,166312],{"class":131,"line":1209},[129,166313,2414],{"emptyLinePlaceholder":56},[129,166315,166316,166319,166322],{"class":131,"line":1215},[129,166317,166318],{"class":139},"connect(",[129,166320,166321],{"class":244},"\"localhost\"",[129,166323,146],{"class":139},[129,166325,166326,166328,166330,166332,166335],{"class":131,"line":1229},[129,166327,166318],{"class":139},[129,166329,166321],{"class":244},[129,166331,12450],{"class":139},[129,166333,166334],{"class":188},"6379",[129,166336,146],{"class":139},[14,166338,166339],{},"注意：默认参数必须放在非默认参数后面。",[14,166341,166342],{},"错误：",[120,166344,166346],{"className":30379,"code":166345,"language":30381,"meta":42,"style":42},"def connect(port=3306, host):\n    pass\n",[126,166347,166348,166364],{"__ignoreMap":42},[129,166349,166350,166352,166354,166357,166359,166361],{"class":131,"line":132},[129,166351,31948],{"class":135},[129,166353,122094],{"class":1977},[129,166355,166356],{"class":139},"(port",[129,166358,185],{"class":135},[129,166360,166273],{"class":188},[129,166362,166363],{"class":139},", host):\n",[129,166365,166366],{"class":131,"line":51},[129,166367,149538],{"class":135},[14,166369,166370],{},"正确：",[120,166372,166374],{"className":30379,"code":166373,"language":30381,"meta":42,"style":42},"def connect(host, port=3306):\n    pass\n",[126,166375,166376,166390],{"__ignoreMap":42},[129,166377,166378,166380,166382,166384,166386,166388],{"class":131,"line":132},[129,166379,31948],{"class":135},[129,166381,122094],{"class":1977},[129,166383,166268],{"class":139},[129,166385,185],{"class":135},[129,166387,166273],{"class":188},[129,166389,30787],{"class":139},[129,166391,166392],{"class":131,"line":51},[129,166393,149538],{"class":135},[71,166395,166397],{"id":166396},"_75-默认参数的坑","7.5 默认参数的坑",[14,166399,166400],{},"不要使用可变对象作为默认参数。",[14,166402,157624],{},[120,166404,166406],{"className":30379,"code":166405,"language":30381,"meta":42,"style":42},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[126,166407,166408,166423,166428,166435,166439,166443,166454],{"__ignoreMap":42},[129,166409,166410,166412,166415,166418,166420],{"class":131,"line":132},[129,166411,31948],{"class":135},[129,166413,166414],{"class":1977}," add_item",[129,166416,166417],{"class":139},"(item, items",[129,166419,185],{"class":135},[129,166421,166422],{"class":139},"[]):\n",[129,166424,166425],{"class":131,"line":51},[129,166426,166427],{"class":139},"    items.append(item)\n",[129,166429,166430,166432],{"class":131,"line":1194},[129,166431,4104],{"class":135},[129,166433,166434],{"class":139}," items\n",[129,166436,166437],{"class":131,"line":1209},[129,166438,2414],{"emptyLinePlaceholder":56},[129,166440,166441],{"class":131,"line":1215},[129,166442,2414],{"emptyLinePlaceholder":56},[129,166444,166445,166447,166450,166452],{"class":131,"line":1229},[129,166446,30416],{"class":188},[129,166448,166449],{"class":139},"(add_item(",[129,166451,165326],{"class":244},[129,166453,30498],{"class":139},[129,166455,166456,166458,166460,166463],{"class":131,"line":1235},[129,166457,30416],{"class":188},[129,166459,166449],{"class":139},[129,166461,166462],{"class":244},"\"b\"",[129,166464,30498],{"class":139},[14,166466,166467],{},"第二次调用会复用第一次的列表。",[14,166469,155889],{},[120,166471,166473],{"className":30379,"code":166472,"language":30381,"meta":42,"style":42},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[126,166474,166475,166489,166502,166511,166515],{"__ignoreMap":42},[129,166476,166477,166479,166481,166483,166485,166487],{"class":131,"line":132},[129,166478,31948],{"class":135},[129,166480,166414],{"class":1977},[129,166482,166417],{"class":139},[129,166484,185],{"class":135},[129,166486,95687],{"class":188},[129,166488,30787],{"class":139},[129,166490,166491,166493,166496,166498,166500],{"class":131,"line":51},[129,166492,3115],{"class":135},[129,166494,166495],{"class":139}," items ",[129,166497,38928],{"class":135},[129,166499,38934],{"class":188},[129,166501,3753],{"class":139},[129,166503,166504,166507,166509],{"class":131,"line":1194},[129,166505,166506],{"class":139},"        items ",[129,166508,185],{"class":135},[129,166510,51839],{"class":139},[129,166512,166513],{"class":131,"line":1209},[129,166514,166427],{"class":139},[129,166516,166517,166519],{"class":131,"line":1215},[129,166518,4104],{"class":135},[129,166520,166434],{"class":139},[71,166522,166524],{"id":166523},"_76-不定长参数","7.6 不定长参数",[100,166526,166528],{"id":166527},"_761-args","7.6.1 *args",[14,166530,166531,166534],{},[126,166532,166533],{},"*args"," 接收任意数量的位置参数，得到元组。",[120,166536,166538],{"className":30379,"code":166537,"language":30381,"meta":42,"style":42},"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",[126,166539,166540,166553,166561,166572,166581,166587,166591,166595,166614],{"__ignoreMap":42},[129,166541,166542,166544,166546,166548,166550],{"class":131,"line":132},[129,166543,31948],{"class":135},[129,166545,5224],{"class":1977},[129,166547,140],{"class":139},[129,166549,594],{"class":135},[129,166551,166552],{"class":139},"args):\n",[129,166554,166555,166557,166559],{"class":131,"line":51},[129,166556,159308],{"class":139},[129,166558,185],{"class":135},[129,166560,47334],{"class":188},[129,166562,166563,166565,166567,166569],{"class":131,"line":1194},[129,166564,3215],{"class":135},[129,166566,156181],{"class":139},[129,166568,26044],{"class":135},[129,166570,166571],{"class":139}," args:\n",[129,166573,166574,166576,166578],{"class":131,"line":1209},[129,166575,159983],{"class":139},[129,166577,9492],{"class":135},[129,166579,166580],{"class":139}," num\n",[129,166582,166583,166585],{"class":131,"line":1215},[129,166584,4104],{"class":135},[129,166586,162288],{"class":139},[129,166588,166589],{"class":131,"line":1229},[129,166590,2414],{"emptyLinePlaceholder":56},[129,166592,166593],{"class":131,"line":1235},[129,166594,2414],{"emptyLinePlaceholder":56},[129,166596,166597,166599,166602,166604,166606,166608,166610,166612],{"class":131,"line":1326},[129,166598,30416],{"class":188},[129,166600,166601],{"class":139},"(add(",[129,166603,357],{"class":188},[129,166605,12450],{"class":139},[129,166607,217],{"class":188},[129,166609,12450],{"class":139},[129,166611,211],{"class":188},[129,166613,30498],{"class":139},[129,166615,166616,166618,166620,166622,166624,166626,166628,166630,166632,166634,166636,166638],{"class":131,"line":1332},[129,166617,30416],{"class":188},[129,166619,166601],{"class":139},[129,166621,357],{"class":188},[129,166623,12450],{"class":139},[129,166625,217],{"class":188},[129,166627,12450],{"class":139},[129,166629,211],{"class":188},[129,166631,12450],{"class":139},[129,166633,432],{"class":188},[129,166635,12450],{"class":139},[129,166637,458],{"class":188},[129,166639,30498],{"class":139},[100,166641,166643],{"id":166642},"_762-kwargs","7.6.2 **kwargs",[14,166645,166646,166649],{},[126,166647,166648],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[120,166651,166653],{"className":30379,"code":166652,"language":30381,"meta":42,"style":42},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[126,166654,166655,166668,166679,166685,166689,166693],{"__ignoreMap":42},[129,166656,166657,166659,166661,166663,166665],{"class":131,"line":132},[129,166658,31948],{"class":135},[129,166660,161946],{"class":1977},[129,166662,140],{"class":139},[129,166664,10676],{"class":135},[129,166666,166667],{"class":139},"kwargs):\n",[129,166669,166670,166672,166674,166676],{"class":131,"line":51},[129,166671,3215],{"class":135},[129,166673,164786],{"class":139},[129,166675,26044],{"class":135},[129,166677,166678],{"class":139}," kwargs.items():\n",[129,166680,166681,166683],{"class":131,"line":1194},[129,166682,32452],{"class":188},[129,166684,164798],{"class":139},[129,166686,166687],{"class":131,"line":1209},[129,166688,2414],{"emptyLinePlaceholder":56},[129,166690,166691],{"class":131,"line":1215},[129,166692,2414],{"emptyLinePlaceholder":56},[129,166694,166695,166697,166699,166701,166703,166705,166707,166709,166711,166713,166715,166717,166719],{"class":131,"line":1229},[129,166696,162011],{"class":139},[129,166698,79811],{"class":5231},[129,166700,185],{"class":135},[129,166702,149889],{"class":244},[129,166704,12450],{"class":139},[129,166706,70222],{"class":5231},[129,166708,185],{"class":135},[129,166710,789],{"class":188},[129,166712,12450],{"class":139},[129,166714,70273],{"class":5231},[129,166716,185],{"class":135},[129,166718,69270],{"class":244},[129,166720,146],{"class":139},[71,166722,166724],{"id":166723},"_77-参数解包","7.7 参数解包",[14,166726,166727],{},"列表或元组解包为位置参数：",[120,166729,166731],{"className":30379,"code":166730,"language":30381,"meta":42,"style":42},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[126,166732,166733,166742,166757,166761,166765,166785],{"__ignoreMap":42},[129,166734,166735,166737,166739],{"class":131,"line":132},[129,166736,31948],{"class":135},[129,166738,5224],{"class":1977},[129,166740,166741],{"class":139},"(a, b, c):\n",[129,166743,166744,166746,166748,166750,166752,166754],{"class":131,"line":51},[129,166745,4104],{"class":135},[129,166747,10884],{"class":139},[129,166749,620],{"class":135},[129,166751,10897],{"class":139},[129,166753,620],{"class":135},[129,166755,166756],{"class":139}," c\n",[129,166758,166759],{"class":131,"line":1194},[129,166760,2414],{"emptyLinePlaceholder":56},[129,166762,166763],{"class":131,"line":1209},[129,166764,2414],{"emptyLinePlaceholder":56},[129,166766,166767,166769,166771,166773,166775,166777,166779,166781,166783],{"class":131,"line":1215},[129,166768,164101],{"class":139},[129,166770,185],{"class":135},[129,166772,52227],{"class":139},[129,166774,357],{"class":188},[129,166776,12450],{"class":139},[129,166778,217],{"class":188},[129,166780,12450],{"class":139},[129,166782,211],{"class":188},[129,166784,33247],{"class":139},[129,166786,166787,166789,166791,166793],{"class":131,"line":1229},[129,166788,30416],{"class":188},[129,166790,166601],{"class":139},[129,166792,594],{"class":135},[129,166794,166795],{"class":139},"nums))\n",[14,166797,166798],{},"字典解包为关键字参数：",[120,166800,166802],{"className":30379,"code":166801,"language":30381,"meta":42,"style":42},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[126,166803,166804,166812,166838,166842,166846,166870],{"__ignoreMap":42},[129,166805,166806,166808,166810],{"class":131,"line":132},[129,166807,31948],{"class":135},[129,166809,149373],{"class":1977},[129,166811,149376],{"class":139},[129,166813,166814,166816,166818,166820,166822,166824,166826,166828,166830,166832,166834,166836],{"class":131,"line":51},[129,166815,31300],{"class":188},[129,166817,140],{"class":139},[129,166819,192],{"class":135},[129,166821,390],{"class":244},[129,166823,1035],{"class":188},[129,166825,79811],{"class":139},[129,166827,1085],{"class":188},[129,166829,4462],{"class":188},[129,166831,70222],{"class":139},[129,166833,1085],{"class":188},[129,166835,390],{"class":244},[129,166837,146],{"class":139},[129,166839,166840],{"class":131,"line":1194},[129,166841,2414],{"emptyLinePlaceholder":56},[129,166843,166844],{"class":131,"line":1209},[129,166845,2414],{"emptyLinePlaceholder":56},[129,166847,166848,166850,166852,166854,166856,166858,166860,166862,166864,166866,166868],{"class":131,"line":1215},[129,166849,116315],{"class":139},[129,166851,185],{"class":135},[129,166853,4462],{"class":139},[129,166855,62680],{"class":244},[129,166857,51438],{"class":139},[129,166859,149889],{"class":244},[129,166861,12450],{"class":139},[129,166863,69125],{"class":244},[129,166865,51438],{"class":139},[129,166867,789],{"class":188},[129,166869,1579],{"class":139},[129,166871,166872,166874,166876],{"class":131,"line":1229},[129,166873,166157],{"class":139},[129,166875,10676],{"class":135},[129,166877,166878],{"class":139},"info)\n",[71,166880,166882],{"id":166881},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166884,166885,166888],{},[126,166886,166887],{},"lambda"," 用于定义简单匿名函数。",[120,166890,166892],{"className":30379,"code":166891,"language":30381,"meta":42,"style":42},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[126,166893,166894,166911],{"__ignoreMap":42},[129,166895,166896,166899,166901,166904,166907,166909],{"class":131,"line":132},[129,166897,166898],{"class":139},"add ",[129,166900,185],{"class":135},[129,166902,166903],{"class":135}," lambda",[129,166905,166906],{"class":139}," a, b: a ",[129,166908,620],{"class":135},[129,166910,151105],{"class":139},[129,166912,166913,166915,166917,166919,166921,166923],{"class":131,"line":51},[129,166914,30416],{"class":188},[129,166916,166601],{"class":139},[129,166918,357],{"class":188},[129,166920,12450],{"class":139},[129,166922,217],{"class":188},[129,166924,30498],{"class":139},[14,166926,166927],{},"常和排序、过滤等函数一起使用。",[14,166929,166930],{},"按分数排序：",[120,166932,166934],{"className":30379,"code":166933,"language":30381,"meta":42,"style":42},"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",[126,166935,166936,166944,166964,166984,167004,167008,167012,167035],{"__ignoreMap":42},[129,166937,166938,166940,166942],{"class":131,"line":132},[129,166939,159717],{"class":139},[129,166941,185],{"class":135},[129,166943,55448],{"class":139},[129,166945,166946,166948,166950,166952,166954,166956,166958,166960,166962],{"class":131,"line":51},[129,166947,148386],{"class":139},[129,166949,62680],{"class":244},[129,166951,51438],{"class":139},[129,166953,149889],{"class":244},[129,166955,12450],{"class":139},[129,166957,151473],{"class":244},[129,166959,51438],{"class":139},[129,166961,1128],{"class":188},[129,166963,4944],{"class":139},[129,166965,166966,166968,166970,166972,166974,166976,166978,166980,166982],{"class":131,"line":1194},[129,166967,148386],{"class":139},[129,166969,62680],{"class":244},[129,166971,51438],{"class":139},[129,166973,150937],{"class":244},[129,166975,12450],{"class":139},[129,166977,151473],{"class":244},[129,166979,51438],{"class":139},[129,166981,950],{"class":188},[129,166983,4944],{"class":139},[129,166985,166986,166988,166990,166992,166994,166996,166998,167000,167002],{"class":131,"line":1209},[129,166987,148386],{"class":139},[129,166989,62680],{"class":244},[129,166991,51438],{"class":139},[129,166993,159732],{"class":244},[129,166995,12450],{"class":139},[129,166997,151473],{"class":244},[129,166999,51438],{"class":139},[129,167001,545],{"class":188},[129,167003,4944],{"class":139},[129,167005,167006],{"class":131,"line":1215},[129,167007,33247],{"class":139},[129,167009,167010],{"class":131,"line":1229},[129,167011,2414],{"emptyLinePlaceholder":56},[129,167013,167014,167017,167019,167021,167023,167025,167027,167029,167031,167033],{"class":131,"line":1235},[129,167015,167016],{"class":139},"students.sort(",[129,167018,153947],{"class":5231},[129,167020,153950],{"class":135},[129,167022,153953],{"class":139},[129,167024,151473],{"class":244},[129,167026,112203],{"class":139},[129,167028,163529],{"class":5231},[129,167030,185],{"class":135},[129,167032,31477],{"class":188},[129,167034,146],{"class":139},[129,167036,167037,167039],{"class":131,"line":1326},[129,167038,30416],{"class":188},[129,167040,164996],{"class":139},[14,167042,167043,167044,167046],{},"如果逻辑复杂，不要硬写 ",[126,167045,166887],{},"，定义普通函数更清晰。",[71,167048,167050],{"id":167049},"_79-函数作为参数","7.9 函数作为参数",[14,167052,167053],{},"函数可以作为参数传给另一个函数。",[120,167055,167057],{"className":30379,"code":167056,"language":30381,"meta":42,"style":42},"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",[126,167058,167059,167067,167077,167081,167085,167095,167102,167106,167110],{"__ignoreMap":42},[129,167060,167061,167063,167065],{"class":131,"line":132},[129,167062,31948],{"class":135},[129,167064,5224],{"class":1977},[129,167066,151094],{"class":139},[129,167068,167069,167071,167073,167075],{"class":131,"line":51},[129,167070,4104],{"class":135},[129,167072,10884],{"class":139},[129,167074,620],{"class":135},[129,167076,151105],{"class":139},[129,167078,167079],{"class":131,"line":1194},[129,167080,2414],{"emptyLinePlaceholder":56},[129,167082,167083],{"class":131,"line":1209},[129,167084,2414],{"emptyLinePlaceholder":56},[129,167086,167087,167089,167092],{"class":131,"line":1215},[129,167088,31948],{"class":135},[129,167090,167091],{"class":1977}," calculate",[129,167093,167094],{"class":139},"(a, b, func):\n",[129,167096,167097,167099],{"class":131,"line":1229},[129,167098,4104],{"class":135},[129,167100,167101],{"class":139}," func(a, b)\n",[129,167103,167104],{"class":131,"line":1235},[129,167105,2414],{"emptyLinePlaceholder":56},[129,167107,167108],{"class":131,"line":1326},[129,167109,2414],{"emptyLinePlaceholder":56},[129,167111,167112,167114,167117,167119,167121,167123],{"class":131,"line":1332},[129,167113,30416],{"class":188},[129,167115,167116],{"class":139},"(calculate(",[129,167118,585],{"class":188},[129,167120,12450],{"class":139},[129,167122,839],{"class":188},[129,167124,167125],{"class":139},", add))\n",[14,167127,167128],{},"这种思想在排序、回调、框架中经常出现。",[71,167130,167132],{"id":167131},"_710-mapfiltersorted","7.10 map、filter、sorted",[100,167134,167136],{"id":167135},"_7101-map","7.10.1 map",[14,167138,167139,167141],{},[126,167140,74045],{}," 对每个元素执行函数。",[120,167143,167145],{"className":30379,"code":167144,"language":30381,"meta":42,"style":42},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[126,167146,167147,167171,167194],{"__ignoreMap":42},[129,167148,167149,167151,167153,167155,167157,167159,167161,167163,167165,167167,167169],{"class":131,"line":132},[129,167150,164101],{"class":139},[129,167152,185],{"class":135},[129,167154,52227],{"class":139},[129,167156,357],{"class":188},[129,167158,12450],{"class":139},[129,167160,217],{"class":188},[129,167162,12450],{"class":139},[129,167164,211],{"class":188},[129,167166,12450],{"class":139},[129,167168,432],{"class":188},[129,167170,33247],{"class":139},[129,167172,167173,167175,167177,167180,167182,167184,167187,167189,167191],{"class":131,"line":51},[129,167174,161307],{"class":139},[129,167176,185],{"class":135},[129,167178,167179],{"class":188}," map",[129,167181,140],{"class":139},[129,167183,166887],{"class":135},[129,167185,167186],{"class":139}," x: x ",[129,167188,594],{"class":135},[129,167190,14770],{"class":188},[129,167192,167193],{"class":139},", nums)\n",[129,167195,167196,167198,167200,167202],{"class":131,"line":1194},[129,167197,30416],{"class":188},[129,167199,140],{"class":139},[129,167201,154071],{"class":188},[129,167203,166069],{"class":139},[100,167205,167207],{"id":167206},"_7102-filter","7.10.2 filter",[14,167209,167210,167212],{},[126,167211,80052],{}," 保留满足条件的元素。",[120,167214,167216],{"className":30379,"code":167215,"language":30381,"meta":42,"style":42},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[126,167217,167218,167246,167271],{"__ignoreMap":42},[129,167219,167220,167222,167224,167226,167228,167230,167232,167234,167236,167238,167240,167242,167244],{"class":131,"line":132},[129,167221,164101],{"class":139},[129,167223,185],{"class":135},[129,167225,52227],{"class":139},[129,167227,357],{"class":188},[129,167229,12450],{"class":139},[129,167231,217],{"class":188},[129,167233,12450],{"class":139},[129,167235,211],{"class":188},[129,167237,12450],{"class":139},[129,167239,432],{"class":188},[129,167241,12450],{"class":139},[129,167243,458],{"class":188},[129,167245,33247],{"class":139},[129,167247,167248,167250,167252,167255,167257,167259,167261,167263,167265,167267,167269],{"class":131,"line":51},[129,167249,161307],{"class":139},[129,167251,185],{"class":135},[129,167253,167254],{"class":188}," filter",[129,167256,140],{"class":139},[129,167258,166887],{"class":135},[129,167260,167186],{"class":139},[129,167262,467],{"class":135},[129,167264,14770],{"class":188},[129,167266,101560],{"class":135},[129,167268,4107],{"class":188},[129,167270,167193],{"class":139},[129,167272,167273,167275,167277,167279],{"class":131,"line":1194},[129,167274,30416],{"class":188},[129,167276,140],{"class":139},[129,167278,154071],{"class":188},[129,167280,166069],{"class":139},[100,167282,167284],{"id":167283},"_7103-sorted","7.10.3 sorted",[14,167286,167287,167289],{},[126,167288,165237],{}," 返回排序后的新列表。",[120,167291,167293],{"className":30379,"code":167292,"language":30381,"meta":42,"style":42},"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",[126,167294,167295,167303,167323,167343,167363,167367,167371,167400],{"__ignoreMap":42},[129,167296,167297,167299,167301],{"class":131,"line":132},[129,167298,159717],{"class":139},[129,167300,185],{"class":135},[129,167302,55448],{"class":139},[129,167304,167305,167307,167309,167311,167313,167315,167317,167319,167321],{"class":131,"line":51},[129,167306,148386],{"class":139},[129,167308,62680],{"class":244},[129,167310,51438],{"class":139},[129,167312,149889],{"class":244},[129,167314,12450],{"class":139},[129,167316,151473],{"class":244},[129,167318,51438],{"class":139},[129,167320,1128],{"class":188},[129,167322,4944],{"class":139},[129,167324,167325,167327,167329,167331,167333,167335,167337,167339,167341],{"class":131,"line":1194},[129,167326,148386],{"class":139},[129,167328,62680],{"class":244},[129,167330,51438],{"class":139},[129,167332,150937],{"class":244},[129,167334,12450],{"class":139},[129,167336,151473],{"class":244},[129,167338,51438],{"class":139},[129,167340,950],{"class":188},[129,167342,4944],{"class":139},[129,167344,167345,167347,167349,167351,167353,167355,167357,167359,167361],{"class":131,"line":1209},[129,167346,148386],{"class":139},[129,167348,62680],{"class":244},[129,167350,51438],{"class":139},[129,167352,159732],{"class":244},[129,167354,12450],{"class":139},[129,167356,151473],{"class":244},[129,167358,51438],{"class":139},[129,167360,545],{"class":188},[129,167362,4944],{"class":139},[129,167364,167365],{"class":131,"line":1215},[129,167366,33247],{"class":139},[129,167368,167369],{"class":131,"line":1229},[129,167370,2414],{"emptyLinePlaceholder":56},[129,167372,167373,167375,167377,167379,167382,167384,167386,167388,167390,167392,167394,167396,167398],{"class":131,"line":1235},[129,167374,161307],{"class":139},[129,167376,185],{"class":135},[129,167378,163605],{"class":188},[129,167380,167381],{"class":139},"(students, ",[129,167383,153947],{"class":5231},[129,167385,153950],{"class":135},[129,167387,153953],{"class":139},[129,167389,151473],{"class":244},[129,167391,112203],{"class":139},[129,167393,163529],{"class":5231},[129,167395,185],{"class":135},[129,167397,31477],{"class":188},[129,167399,146],{"class":139},[129,167401,167402,167404],{"class":131,"line":1326},[129,167403,30416],{"class":188},[129,167405,76586],{"class":139},[71,167407,167409],{"id":167408},"_711-闭包入门","7.11 闭包入门",[14,167411,167412],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[120,167414,167416],{"className":30379,"code":167415,"language":30381,"meta":42,"style":42},"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",[126,167417,167418,167428,167438,167449,167453,167460,167464,167468,167482],{"__ignoreMap":42},[129,167419,167420,167422,167425],{"class":131,"line":132},[129,167421,31948],{"class":135},[129,167423,167424],{"class":1977}," outer",[129,167426,167427],{"class":139},"(base):\n",[129,167429,167430,167432,167435],{"class":131,"line":51},[129,167431,30802],{"class":135},[129,167433,167434],{"class":1977}," inner",[129,167436,167437],{"class":139},"(num):\n",[129,167439,167440,167442,167445,167447],{"class":131,"line":1194},[129,167441,14767],{"class":135},[129,167443,167444],{"class":139}," base ",[129,167446,620],{"class":135},[129,167448,166580],{"class":139},[129,167450,167451],{"class":131,"line":1209},[129,167452,2414],{"emptyLinePlaceholder":56},[129,167454,167455,167457],{"class":131,"line":1215},[129,167456,4104],{"class":135},[129,167458,167459],{"class":139}," inner\n",[129,167461,167462],{"class":131,"line":1229},[129,167463,2414],{"emptyLinePlaceholder":56},[129,167465,167466],{"class":131,"line":1235},[129,167467,2414],{"emptyLinePlaceholder":56},[129,167469,167470,167473,167475,167478,167480],{"class":131,"line":1326},[129,167471,167472],{"class":139},"add_10 ",[129,167474,185],{"class":135},[129,167476,167477],{"class":139}," outer(",[129,167479,585],{"class":188},[129,167481,146],{"class":139},[129,167483,167484,167486,167489,167491],{"class":131,"line":1332},[129,167485,30416],{"class":188},[129,167487,167488],{"class":139},"(add_10(",[129,167490,458],{"class":188},[129,167492,30498],{"class":139},[14,167494,167495],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[71,167497,167499],{"id":167498},"_712-装饰器入门","7.12 装饰器入门",[14,167501,167502],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[120,167504,167506],{"className":30379,"code":167505,"language":30381,"meta":42,"style":42},"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",[126,167507,167508,167517,167526,167537,167542,167553,167557,167564,167568,167572,167577,167585,167595,167599,167603],{"__ignoreMap":42},[129,167509,167510,167512,167514],{"class":131,"line":132},[129,167511,31948],{"class":135},[129,167513,87192],{"class":1977},[129,167515,167516],{"class":139},"(func):\n",[129,167518,167519,167521,167524],{"class":131,"line":51},[129,167520,30802],{"class":135},[129,167522,167523],{"class":1977}," wrapper",[129,167525,31954],{"class":139},[129,167527,167528,167530,167532,167535],{"class":131,"line":1194},[129,167529,32452],{"class":188},[129,167531,140],{"class":139},[129,167533,167534],{"class":244},"\"函数开始执行\"",[129,167536,146],{"class":139},[129,167538,167539],{"class":131,"line":1209},[129,167540,167541],{"class":139},"        func()\n",[129,167543,167544,167546,167548,167551],{"class":131,"line":1215},[129,167545,32452],{"class":188},[129,167547,140],{"class":139},[129,167549,167550],{"class":244},"\"函数执行结束\"",[129,167552,146],{"class":139},[129,167554,167555],{"class":131,"line":1229},[129,167556,2414],{"emptyLinePlaceholder":56},[129,167558,167559,167561],{"class":131,"line":1235},[129,167560,4104],{"class":135},[129,167562,167563],{"class":139}," wrapper\n",[129,167565,167566],{"class":131,"line":1326},[129,167567,2414],{"emptyLinePlaceholder":56},[129,167569,167570],{"class":131,"line":1332},[129,167571,2414],{"emptyLinePlaceholder":56},[129,167573,167574],{"class":131,"line":1344},[129,167575,167576],{"class":1977},"@log\n",[129,167578,167579,167581,167583],{"class":131,"line":1626},[129,167580,31948],{"class":135},[129,167582,160997],{"class":1977},[129,167584,31954],{"class":139},[129,167586,167587,167589,167591,167593],{"class":131,"line":1631},[129,167588,31300],{"class":188},[129,167590,140],{"class":139},[129,167592,5859],{"class":244},[129,167594,146],{"class":139},[129,167596,167597],{"class":131,"line":1637},[129,167598,2414],{"emptyLinePlaceholder":56},[129,167600,167601],{"class":131,"line":1642},[129,167602,2414],{"emptyLinePlaceholder":56},[129,167604,167605],{"class":131,"line":1656},[129,167606,161032],{"class":139},[14,167608,158275],{},[120,167610,167612],{"className":30379,"code":167611,"language":30381,"meta":42,"style":42},"say_hello = log(say_hello)\n",[126,167613,167614],{"__ignoreMap":42},[129,167615,167616,167619,167621],{"class":131,"line":132},[129,167617,167618],{"class":139},"say_hello ",[129,167620,185],{"class":135},[129,167622,167623],{"class":139}," log(say_hello)\n",[14,167625,167626],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[71,167628,167630],{"id":167629},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[120,167632,167634],{"className":30379,"code":167633,"language":30381,"meta":42,"style":42},"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",[126,167635,167636,167644,167661,167671,167690,167700,167707,167711,167717,167721,167725,167729,167737,167747,167751,167755],{"__ignoreMap":42},[129,167637,167638,167640,167642],{"class":131,"line":132},[129,167639,31948],{"class":135},[129,167641,87192],{"class":1977},[129,167643,167516],{"class":139},[129,167645,167646,167648,167650,167652,167654,167657,167659],{"class":131,"line":51},[129,167647,30802],{"class":135},[129,167649,167523],{"class":1977},[129,167651,140],{"class":139},[129,167653,594],{"class":135},[129,167655,167656],{"class":139},"args, ",[129,167658,10676],{"class":135},[129,167660,166667],{"class":139},[129,167662,167663,167665,167667,167669],{"class":131,"line":1194},[129,167664,32452],{"class":188},[129,167666,140],{"class":139},[129,167668,167534],{"class":244},[129,167670,146],{"class":139},[129,167672,167673,167676,167678,167681,167683,167685,167687],{"class":131,"line":1209},[129,167674,167675],{"class":139},"        result ",[129,167677,185],{"class":135},[129,167679,167680],{"class":139}," func(",[129,167682,594],{"class":135},[129,167684,167656],{"class":139},[129,167686,10676],{"class":135},[129,167688,167689],{"class":139},"kwargs)\n",[129,167691,167692,167694,167696,167698],{"class":131,"line":1215},[129,167693,32452],{"class":188},[129,167695,140],{"class":139},[129,167697,167550],{"class":244},[129,167699,146],{"class":139},[129,167701,167702,167704],{"class":131,"line":1229},[129,167703,14767],{"class":135},[129,167705,167706],{"class":139}," result\n",[129,167708,167709],{"class":131,"line":1235},[129,167710,2414],{"emptyLinePlaceholder":56},[129,167712,167713,167715],{"class":131,"line":1326},[129,167714,4104],{"class":135},[129,167716,167563],{"class":139},[129,167718,167719],{"class":131,"line":1332},[129,167720,2414],{"emptyLinePlaceholder":56},[129,167722,167723],{"class":131,"line":1344},[129,167724,2414],{"emptyLinePlaceholder":56},[129,167726,167727],{"class":131,"line":1626},[129,167728,167576],{"class":1977},[129,167730,167731,167733,167735],{"class":131,"line":1631},[129,167732,31948],{"class":135},[129,167734,5224],{"class":1977},[129,167736,151094],{"class":139},[129,167738,167739,167741,167743,167745],{"class":131,"line":1637},[129,167740,4104],{"class":135},[129,167742,10884],{"class":139},[129,167744,620],{"class":135},[129,167746,151105],{"class":139},[129,167748,167749],{"class":131,"line":1642},[129,167750,2414],{"emptyLinePlaceholder":56},[129,167752,167753],{"class":131,"line":1656},[129,167754,2414],{"emptyLinePlaceholder":56},[129,167756,167757,167759,167761,167763,167765,167767],{"class":131,"line":1661},[129,167758,30416],{"class":188},[129,167760,166601],{"class":139},[129,167762,585],{"class":188},[129,167764,12450],{"class":139},[129,167766,839],{"class":188},[129,167768,30498],{"class":139},[14,167770,167771,167772,101019,167774,167776],{},"这个写法使用 ",[126,167773,166533],{},[126,167775,166648],{}," 接收原函数的所有参数。",[71,167778,167780],{"id":167779},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167782,123293],{},[83,167784,167785,167788,167791],{},[86,167786,167787],{},"给定一组学生数据。",[86,167789,167790],{},"封装函数，根据传入规则筛选学生。",[86,167792,167793],{},"筛选及格、优秀、未成年学生。",[14,167795,10050],{},[120,167797,167799],{"className":30379,"code":167798,"language":30381,"meta":42,"style":42},"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",[126,167800,167801,167809,167837,167865,167893,167897,167901,167905,167915,167923,167933,167940,167945,167951,167955,167959,167983,168006,168029,168033,168040,168047],{"__ignoreMap":42},[129,167802,167803,167805,167807],{"class":131,"line":132},[129,167804,159717],{"class":139},[129,167806,185],{"class":135},[129,167808,55448],{"class":139},[129,167810,167811,167813,167815,167817,167819,167821,167823,167825,167827,167829,167831,167833,167835],{"class":131,"line":51},[129,167812,148386],{"class":139},[129,167814,62680],{"class":244},[129,167816,51438],{"class":139},[129,167818,149889],{"class":244},[129,167820,12450],{"class":139},[129,167822,69125],{"class":244},[129,167824,51438],{"class":139},[129,167826,789],{"class":188},[129,167828,12450],{"class":139},[129,167830,151473],{"class":244},[129,167832,51438],{"class":139},[129,167834,1128],{"class":188},[129,167836,4944],{"class":139},[129,167838,167839,167841,167843,167845,167847,167849,167851,167853,167855,167857,167859,167861,167863],{"class":131,"line":1194},[129,167840,148386],{"class":139},[129,167842,62680],{"class":244},[129,167844,51438],{"class":139},[129,167846,150937],{"class":244},[129,167848,12450],{"class":139},[129,167850,69125],{"class":244},[129,167852,51438],{"class":139},[129,167854,764],{"class":188},[129,167856,12450],{"class":139},[129,167858,151473],{"class":244},[129,167860,51438],{"class":139},[129,167862,950],{"class":188},[129,167864,4944],{"class":139},[129,167866,167867,167869,167871,167873,167875,167877,167879,167881,167883,167885,167887,167889,167891],{"class":131,"line":1209},[129,167868,148386],{"class":139},[129,167870,62680],{"class":244},[129,167872,51438],{"class":139},[129,167874,159732],{"class":244},[129,167876,12450],{"class":139},[129,167878,69125],{"class":244},[129,167880,51438],{"class":139},[129,167882,814],{"class":188},[129,167884,12450],{"class":139},[129,167886,151473],{"class":244},[129,167888,51438],{"class":139},[129,167890,1021],{"class":188},[129,167892,4944],{"class":139},[129,167894,167895],{"class":131,"line":1215},[129,167896,33247],{"class":139},[129,167898,167899],{"class":131,"line":1229},[129,167900,2414],{"emptyLinePlaceholder":56},[129,167902,167903],{"class":131,"line":1235},[129,167904,2414],{"emptyLinePlaceholder":56},[129,167906,167907,167909,167912],{"class":131,"line":1326},[129,167908,31948],{"class":135},[129,167910,167911],{"class":1977}," filter_students",[129,167913,167914],{"class":139},"(students, condition):\n",[129,167916,167917,167919,167921],{"class":131,"line":1332},[129,167918,161224],{"class":139},[129,167920,185],{"class":135},[129,167922,51839],{"class":139},[129,167924,167925,167927,167929,167931],{"class":131,"line":1344},[129,167926,3215],{"class":135},[129,167928,152138],{"class":139},[129,167930,26044],{"class":135},[129,167932,152143],{"class":139},[129,167934,167935,167937],{"class":131,"line":1626},[129,167936,2511],{"class":135},[129,167938,167939],{"class":139}," condition(student):\n",[129,167941,167942],{"class":131,"line":1631},[129,167943,167944],{"class":139},"            result.append(student)\n",[129,167946,167947,167949],{"class":131,"line":1637},[129,167948,4104],{"class":135},[129,167950,167706],{"class":139},[129,167952,167953],{"class":131,"line":1642},[129,167954,2414],{"emptyLinePlaceholder":56},[129,167956,167957],{"class":131,"line":1656},[129,167958,2414],{"emptyLinePlaceholder":56},[129,167960,167961,167963,167965,167968,167970,167973,167975,167977,167979,167981],{"class":131,"line":1661},[129,167962,165702],{"class":139},[129,167964,185],{"class":135},[129,167966,167967],{"class":139}," filter_students(students, ",[129,167969,166887],{"class":135},[129,167971,167972],{"class":139}," s: s[",[129,167974,151473],{"class":244},[129,167976,4457],{"class":139},[129,167978,1724],{"class":135},[129,167980,157838],{"class":188},[129,167982,146],{"class":139},[129,167984,167985,167988,167990,167992,167994,167996,167998,168000,168002,168004],{"class":131,"line":1667},[129,167986,167987],{"class":139},"excellent ",[129,167989,185],{"class":135},[129,167991,167967],{"class":139},[129,167993,166887],{"class":135},[129,167995,167972],{"class":139},[129,167997,151473],{"class":244},[129,167999,4457],{"class":139},[129,168001,1724],{"class":135},[129,168003,157789],{"class":188},[129,168005,146],{"class":139},[129,168007,168008,168011,168013,168015,168017,168019,168021,168023,168025,168027],{"class":131,"line":1688},[129,168009,168010],{"class":139},"under_age ",[129,168012,185],{"class":135},[129,168014,167967],{"class":139},[129,168016,166887],{"class":135},[129,168018,167972],{"class":139},[129,168020,69125],{"class":244},[129,168022,4457],{"class":139},[129,168024,1049],{"class":135},[129,168026,156286],{"class":188},[129,168028,146],{"class":139},[129,168030,168031],{"class":131,"line":1693},[129,168032,2414],{"emptyLinePlaceholder":56},[129,168034,168035,168037],{"class":131,"line":1707},[129,168036,30416],{"class":188},[129,168038,168039],{"class":139},"(passed)\n",[129,168041,168042,168044],{"class":131,"line":1712},[129,168043,30416],{"class":188},[129,168045,168046],{"class":139},"(excellent)\n",[129,168048,168049,168051],{"class":131,"line":1741},[129,168050,30416],{"class":188},[129,168052,168053],{"class":139},"(under_age)\n",[71,168055,168057],{"id":168056},"_715-易错点","7.15 易错点",[83,168059,168060,168063,168071,168076,168087],{},[86,168061,168062],{},"默认参数不要写可变对象。",[86,168064,168065,168067,168068,168070],{},[126,168066,166533],{}," 是元组，",[126,168069,166648],{}," 是字典。",[86,168072,168073,168075],{},[126,168074,166887],{}," 只适合简单表达式。",[86,168077,168078,101019,168080,168082,168083,168086],{},[126,168079,74045],{},[126,168081,80052],{}," 的结果是迭代器，常用 ",[126,168084,168085],{},"list()"," 转换查看。",[86,168088,168089],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[71,168091,168093],{"id":168092},"_716-本章练习","7.16 本章练习",[83,168095,168096,168103,168109,168114,168119],{},[86,168097,168098,168099,168102],{},"写函数 ",[126,168100,168101],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[86,168104,168098,168105,168108],{},[126,168106,168107],{},"print_user(**kwargs)","，输出用户所有字段。",[86,168110,104367,168111,168113],{},[126,168112,166887],{}," 对学生列表按年龄排序。",[86,168115,104367,168116,168118],{},[126,168117,80052],{}," 找出成绩不及格的学生。",[86,168120,168121],{},"写一个装饰器，统计函数执行前后的提示信息。",[5141,168123,168124],{},"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":42,"searchDepth":51,"depth":51,"links":168126},[168127,168128,168129,168130,168131,168132,168136,168137,168138,168139,168144,168145,168146,168147,168148,168149],{"id":165985,"depth":51,"text":165986},{"id":166099,"depth":51,"text":166100},{"id":166188,"depth":51,"text":166189},{"id":166250,"depth":51,"text":166251},{"id":166396,"depth":51,"text":166397},{"id":166523,"depth":51,"text":166524,"children":168133},[168134,168135],{"id":166527,"depth":1194,"text":166528},{"id":166642,"depth":1194,"text":166643},{"id":166723,"depth":51,"text":166724},{"id":166881,"depth":51,"text":166882},{"id":167049,"depth":51,"text":167050},{"id":167131,"depth":51,"text":167132,"children":168140},[168141,168142,168143],{"id":167135,"depth":1194,"text":167136},{"id":167206,"depth":1194,"text":167207},{"id":167283,"depth":1194,"text":167284},{"id":167408,"depth":51,"text":167409},{"id":167498,"depth":51,"text":167499},{"id":167629,"depth":51,"text":167630},{"id":167779,"depth":51,"text":167780},{"id":168056,"depth":51,"text":168057},{"id":168092,"depth":51,"text":168093},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165977,"description":53},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168156,"title":168157,"body":168158,"description":53,"extension":54,"meta":170677,"navigation":56,"path":170678,"seo":170679,"stem":170680,"__hash__":170681},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168159,"toc":170652},[168160,168163,168167,168170,168173,168204,168208,168212,168215,168242,168246,168249,168300,168303,168318,168321,168356,168360,168362,168386,168389,168449,168453,168457,168460,168517,168520,168540,168544,168547,168610,168614,168617,168673,168680,168704,168708,168711,168774,168778,168783,168834,168837,168841,168846,168913,168916,168998,169002,169007,169058,169061,169065,169068,169071,169079,169082,169128,169131,169177,169181,169187,169231,169234,169280,169283,169323,169326,169387,169391,169394,169484,169487,169629,169632,169699,169703,169706,169709,169850,169853,169931,169934,170110,170114,170116,170127,170129,170328,170332,170576,170580,170614,170618,170649],[10,168161,168157],{"id":168162},"_8-文件操作",[71,168164,168166],{"id":168165},"_81-文件操作的意义","8.1 文件操作的意义",[14,168168,168169],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168171,168172],{},"常见文件类型：",[83,168174,168175,168181,168187,168193,168199],{},[86,168176,168177,168180],{},[126,168178,168179],{},".txt","：普通文本。",[86,168182,168183,168186],{},[126,168184,168185],{},".csv","：表格文本。",[86,168188,168189,168192],{},[126,168190,168191],{},".json","：结构化数据。",[86,168194,168195,168198],{},[126,168196,168197],{},".log","：日志文件。",[86,168200,168201,168203],{},[126,168202,146353],{},"：Python 源代码。",[71,168205,168207],{"id":168206},"_82-路径","8.2 路径",[100,168209,168211],{"id":168210},"_821-相对路径","8.2.1 相对路径",[14,168213,168214],{},"相对当前运行目录：",[120,168216,168218],{"className":30379,"code":168217,"language":30381,"meta":42,"style":42},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[126,168219,168220],{"__ignoreMap":42},[129,168221,168222,168224,168226,168228,168230,168232,168234,168236,168238,168240],{"class":131,"line":132},[129,168223,86916],{"class":188},[129,168225,140],{"class":139},[129,168227,146797],{"class":244},[129,168229,12450],{"class":139},[129,168231,146802],{"class":244},[129,168233,12450],{"class":139},[129,168235,146807],{"class":5231},[129,168237,185],{"class":135},[129,168239,146812],{"class":244},[129,168241,146],{"class":139},[100,168243,168245],{"id":168244},"_822-绝对路径","8.2.2 绝对路径",[14,168247,168248],{},"从根目录或盘符开始：",[120,168250,168252],{"className":30379,"code":168251,"language":30381,"meta":42,"style":42},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[126,168253,168254,168277],{"__ignoreMap":42},[129,168255,168256,168258,168260,168263,168265,168267,168269,168271,168273,168275],{"class":131,"line":132},[129,168257,86916],{"class":188},[129,168259,140],{"class":139},[129,168261,168262],{"class":244},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[129,168264,12450],{"class":139},[129,168266,146802],{"class":244},[129,168268,12450],{"class":139},[129,168270,146807],{"class":5231},[129,168272,185],{"class":135},[129,168274,146812],{"class":244},[129,168276,146],{"class":139},[129,168278,168279,168281,168283,168286,168288,168290,168292,168294,168296,168298],{"class":131,"line":51},[129,168280,86916],{"class":188},[129,168282,140],{"class":139},[129,168284,168285],{"class":244},"\"D:\u002Fdata\u002Fdata.txt\"",[129,168287,12450],{"class":139},[129,168289,146802],{"class":244},[129,168291,12450],{"class":139},[129,168293,146807],{"class":5231},[129,168295,185],{"class":135},[129,168297,146812],{"class":244},[129,168299,146],{"class":139},[14,168301,168302],{},"Windows 路径建议写成：",[120,168304,168306],{"className":30379,"code":168305,"language":30381,"meta":42,"style":42},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[126,168307,168308],{"__ignoreMap":42},[129,168309,168310,168313,168315],{"class":131,"line":132},[129,168311,168312],{"class":139},"path ",[129,168314,185],{"class":135},[129,168316,168317],{"class":244}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168319,168320],{},"或原始字符串：",[120,168322,168324],{"className":30379,"code":168323,"language":30381,"meta":42,"style":42},"path = r\"D:\\data\\data.txt\"\n",[126,168325,168326],{"__ignoreMap":42},[129,168327,168328,168330,168332,168334,168336,168339,168342,168345,168347,168349,168351,168354],{"class":131,"line":132},[129,168329,168312],{"class":139},[129,168331,185],{"class":135},[129,168333,17136],{"class":135},[129,168335,390],{"class":244},[129,168337,168338],{"class":47978},"D:",[129,168340,168341],{"class":188},"\\d",[129,168343,168344],{"class":47978},"ata",[129,168346,168341],{"class":188},[129,168348,168344],{"class":47978},[129,168350,697],{"class":188},[129,168352,168353],{"class":47978},"txt",[129,168355,25134],{"class":244},[71,168357,168359],{"id":168358},"_83-open函数","8.3 open函数",[14,168361,5196],{},[120,168363,168365],{"className":30379,"code":168364,"language":30381,"meta":42,"style":42},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[126,168366,168367],{"__ignoreMap":42},[129,168368,168369,168371,168373,168375,168378,168380,168382,168384],{"class":131,"line":132},[129,168370,45355],{"class":5231},[129,168372,13579],{"class":135},[129,168374,146792],{"class":188},[129,168376,168377],{"class":139},"(文件路径, 打开模式, ",[129,168379,146807],{"class":5231},[129,168381,185],{"class":135},[129,168383,146812],{"class":244},[129,168385,146],{"class":139},[14,168387,168388],{},"常见模式：",[277,168390,168391,168400],{},[280,168392,168393],{},[283,168394,168395,168398],{},[286,168396,168397],{},"模式",[286,168399,25870],{},[324,168401,168402,168411,168420,168429,168439],{},[283,168403,168404,168408],{},[329,168405,168406],{},[126,168407,809],{},[329,168409,168410],{},"只读，文件不存在会报错",[283,168412,168413,168417],{},[329,168414,168415],{},[126,168416,934],{},[329,168418,168419],{},"只写，文件不存在会创建，存在会清空",[283,168421,168422,168426],{},[329,168423,168424],{},[126,168425,20],{},[329,168427,168428],{},"追加，文件不存在会创建",[283,168430,168431,168436],{},[329,168432,168433],{},[126,168434,168435],{},"rb",[329,168437,168438],{},"二进制只读",[283,168440,168441,168446],{},[329,168442,168443],{},[126,168444,168445],{},"wb",[329,168447,168448],{},"二进制只写",[71,168450,168452],{"id":168451},"_84-读取文件","8.4 读取文件",[100,168454,168456],{"id":168455},"_841-read","8.4.1 read",[14,168458,168459],{},"一次读取全部内容：",[120,168461,168463],{"className":30379,"code":168462,"language":30381,"meta":42,"style":42},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[126,168464,168465,168491,168503,168510],{"__ignoreMap":42},[129,168466,168467,168469,168471,168473,168475,168477,168479,168481,168483,168485,168487,168489],{"class":131,"line":132},[129,168468,45355],{"class":5231},[129,168470,13579],{"class":135},[129,168472,146792],{"class":188},[129,168474,140],{"class":139},[129,168476,146797],{"class":244},[129,168478,12450],{"class":139},[129,168480,146802],{"class":244},[129,168482,12450],{"class":139},[129,168484,146807],{"class":5231},[129,168486,185],{"class":135},[129,168488,146812],{"class":244},[129,168490,146],{"class":139},[129,168492,168493,168496,168498,168500],{"class":131,"line":51},[129,168494,168495],{"class":139},"content ",[129,168497,185],{"class":135},[129,168499,148154],{"class":5231},[129,168501,168502],{"class":139},".read()\n",[129,168504,168505,168507],{"class":131,"line":1194},[129,168506,30416],{"class":188},[129,168508,168509],{"class":139},"(content)\n",[129,168511,168512,168514],{"class":131,"line":1209},[129,168513,45355],{"class":5231},[129,168515,168516],{"class":139},".close()\n",[14,168518,168519],{},"可以指定读取字符数：",[120,168521,168523],{"className":30379,"code":168522,"language":30381,"meta":42,"style":42},"content = file.read(10)\n",[126,168524,168525],{"__ignoreMap":42},[129,168526,168527,168529,168531,168533,168536,168538],{"class":131,"line":132},[129,168528,168495],{"class":139},[129,168530,185],{"class":135},[129,168532,148154],{"class":5231},[129,168534,168535],{"class":139},".read(",[129,168537,585],{"class":188},[129,168539,146],{"class":139},[100,168541,168543],{"id":168542},"_842-readline","8.4.2 readline",[14,168545,168546],{},"一次读取一行：",[120,168548,168550],{"className":30379,"code":168549,"language":30381,"meta":42,"style":42},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[126,168551,168552,168578,168582,168593,168600,168604],{"__ignoreMap":42},[129,168553,168554,168556,168558,168560,168562,168564,168566,168568,168570,168572,168574,168576],{"class":131,"line":132},[129,168555,45355],{"class":5231},[129,168557,13579],{"class":135},[129,168559,146792],{"class":188},[129,168561,140],{"class":139},[129,168563,146797],{"class":244},[129,168565,12450],{"class":139},[129,168567,146802],{"class":244},[129,168569,12450],{"class":139},[129,168571,146807],{"class":5231},[129,168573,185],{"class":135},[129,168575,146812],{"class":244},[129,168577,146],{"class":139},[129,168579,168580],{"class":131,"line":51},[129,168581,2414],{"emptyLinePlaceholder":56},[129,168583,168584,168586,168588,168590],{"class":131,"line":1194},[129,168585,147253],{"class":139},[129,168587,185],{"class":135},[129,168589,148154],{"class":5231},[129,168591,168592],{"class":139},".readline()\n",[129,168594,168595,168597],{"class":131,"line":1209},[129,168596,30416],{"class":188},[129,168598,168599],{"class":139},"(line)\n",[129,168601,168602],{"class":131,"line":1215},[129,168603,2414],{"emptyLinePlaceholder":56},[129,168605,168606,168608],{"class":131,"line":1229},[129,168607,45355],{"class":5231},[129,168609,168516],{"class":139},[100,168611,168613],{"id":168612},"_843-readlines","8.4.3 readlines",[14,168615,168616],{},"读取所有行，返回列表：",[120,168618,168620],{"className":30379,"code":168619,"language":30381,"meta":42,"style":42},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[126,168621,168622,168648,168660,168667],{"__ignoreMap":42},[129,168623,168624,168626,168628,168630,168632,168634,168636,168638,168640,168642,168644,168646],{"class":131,"line":132},[129,168625,45355],{"class":5231},[129,168627,13579],{"class":135},[129,168629,146792],{"class":188},[129,168631,140],{"class":139},[129,168633,146797],{"class":244},[129,168635,12450],{"class":139},[129,168637,146802],{"class":244},[129,168639,12450],{"class":139},[129,168641,146807],{"class":5231},[129,168643,185],{"class":135},[129,168645,146812],{"class":244},[129,168647,146],{"class":139},[129,168649,168650,168653,168655,168657],{"class":131,"line":51},[129,168651,168652],{"class":139},"lines ",[129,168654,185],{"class":135},[129,168656,148154],{"class":5231},[129,168658,168659],{"class":139},".readlines()\n",[129,168661,168662,168664],{"class":131,"line":1194},[129,168663,30416],{"class":188},[129,168665,168666],{"class":139},"(lines)\n",[129,168668,168669,168671],{"class":131,"line":1209},[129,168670,45355],{"class":5231},[129,168672,168516],{"class":139},[14,168674,168675,168676,168679],{},"每一行通常带有换行符，可以用 ",[126,168677,168678],{},"strip()"," 去掉：",[120,168681,168683],{"className":30379,"code":168682,"language":30381,"meta":42,"style":42},"for line in lines:\n    print(line.strip())\n",[126,168684,168685,168697],{"__ignoreMap":42},[129,168686,168687,168689,168692,168694],{"class":131,"line":132},[129,168688,3039],{"class":135},[129,168690,168691],{"class":139}," line ",[129,168693,26044],{"class":135},[129,168695,168696],{"class":139}," lines:\n",[129,168698,168699,168701],{"class":131,"line":51},[129,168700,31300],{"class":188},[129,168702,168703],{"class":139},"(line.strip())\n",[100,168705,168707],{"id":168706},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168709,168710],{},"推荐读取大文件时使用：",[120,168712,168714],{"className":30379,"code":168713,"language":30381,"meta":42,"style":42},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[126,168715,168716,168742,168746,168758,168764,168768],{"__ignoreMap":42},[129,168717,168718,168720,168722,168724,168726,168728,168730,168732,168734,168736,168738,168740],{"class":131,"line":132},[129,168719,45355],{"class":5231},[129,168721,13579],{"class":135},[129,168723,146792],{"class":188},[129,168725,140],{"class":139},[129,168727,146797],{"class":244},[129,168729,12450],{"class":139},[129,168731,146802],{"class":244},[129,168733,12450],{"class":139},[129,168735,146807],{"class":5231},[129,168737,185],{"class":135},[129,168739,146812],{"class":244},[129,168741,146],{"class":139},[129,168743,168744],{"class":131,"line":51},[129,168745,2414],{"emptyLinePlaceholder":56},[129,168747,168748,168750,168752,168754,168756],{"class":131,"line":1194},[129,168749,3039],{"class":135},[129,168751,168691],{"class":139},[129,168753,26044],{"class":135},[129,168755,148154],{"class":5231},[129,168757,3753],{"class":139},[129,168759,168760,168762],{"class":131,"line":1209},[129,168761,31300],{"class":188},[129,168763,168703],{"class":139},[129,168765,168766],{"class":131,"line":1215},[129,168767,2414],{"emptyLinePlaceholder":56},[129,168769,168770,168772],{"class":131,"line":1229},[129,168771,45355],{"class":5231},[129,168773,168516],{"class":139},[71,168775,168777],{"id":168776},"_85-with语句","8.5 with语句",[14,168779,168780,168782],{},[126,168781,107834],{}," 会自动关闭文件，推荐使用。",[120,168784,168786],{"className":30379,"code":168785,"language":30381,"meta":42,"style":42},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[126,168787,168788,168818,168828],{"__ignoreMap":42},[129,168789,168790,168792,168794,168796,168798,168800,168802,168804,168806,168808,168810,168812,168814,168816],{"class":131,"line":132},[129,168791,107834],{"class":135},[129,168793,146792],{"class":188},[129,168795,140],{"class":139},[129,168797,146797],{"class":244},[129,168799,12450],{"class":139},[129,168801,146802],{"class":244},[129,168803,12450],{"class":139},[129,168805,146807],{"class":5231},[129,168807,185],{"class":135},[129,168809,146812],{"class":244},[129,168811,13729],{"class":139},[129,168813,31384],{"class":135},[129,168815,148154],{"class":5231},[129,168817,3753],{"class":139},[129,168819,168820,168822,168824,168826],{"class":131,"line":51},[129,168821,146824],{"class":139},[129,168823,185],{"class":135},[129,168825,148154],{"class":5231},[129,168827,168502],{"class":139},[129,168829,168830,168832],{"class":131,"line":1194},[129,168831,31300],{"class":188},[129,168833,168509],{"class":139},[14,168835,168836],{},"等价于打开文件、读取、最后关闭，但更安全。",[71,168838,168840],{"id":168839},"_86-写入文件","8.6 写入文件",[14,168842,168843,168845],{},[126,168844,934],{}," 模式会清空原文件。",[120,168847,168849],{"className":30379,"code":168848,"language":30381,"meta":42,"style":42},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[126,168850,168851,168881,168898],{"__ignoreMap":42},[129,168852,168853,168855,168857,168859,168861,168863,168865,168867,168869,168871,168873,168875,168877,168879],{"class":131,"line":132},[129,168854,107834],{"class":135},[129,168856,146792],{"class":188},[129,168858,140],{"class":139},[129,168860,146797],{"class":244},[129,168862,12450],{"class":139},[129,168864,151977],{"class":244},[129,168866,12450],{"class":139},[129,168868,146807],{"class":5231},[129,168870,185],{"class":135},[129,168872,146812],{"class":244},[129,168874,13729],{"class":139},[129,168876,31384],{"class":135},[129,168878,148154],{"class":5231},[129,168880,3753],{"class":139},[129,168882,168883,168886,168889,168892,168894,168896],{"class":131,"line":51},[129,168884,168885],{"class":5231},"    file",[129,168887,168888],{"class":139},".write(",[129,168890,168891],{"class":244},"\"hello",[129,168893,156526],{"class":188},[129,168895,390],{"class":244},[129,168897,146],{"class":139},[129,168899,168900,168902,168904,168907,168909,168911],{"class":131,"line":1194},[129,168901,168885],{"class":5231},[129,168903,168888],{"class":139},[129,168905,168906],{"class":244},"\"python",[129,168908,156526],{"class":188},[129,168910,390],{"class":244},[129,168912,146],{"class":139},[14,168914,168915],{},"写入多行：",[120,168917,168919],{"className":30379,"code":168918,"language":30381,"meta":42,"style":42},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[126,168920,168921,168956,168960,168991],{"__ignoreMap":42},[129,168922,168923,168925,168927,168929,168932,168934,168936,168938,168941,168943,168945,168947,168950,168952,168954],{"class":131,"line":132},[129,168924,168652],{"class":139},[129,168926,185],{"class":135},[129,168928,52227],{"class":139},[129,168930,168931],{"class":244},"\"小明,18",[129,168933,156526],{"class":188},[129,168935,390],{"class":244},[129,168937,12450],{"class":139},[129,168939,168940],{"class":244},"\"小红,17",[129,168942,156526],{"class":188},[129,168944,390],{"class":244},[129,168946,12450],{"class":139},[129,168948,168949],{"class":244},"\"小刚,19",[129,168951,156526],{"class":188},[129,168953,390],{"class":244},[129,168955,33247],{"class":139},[129,168957,168958],{"class":131,"line":51},[129,168959,2414],{"emptyLinePlaceholder":56},[129,168961,168962,168964,168966,168968,168971,168973,168975,168977,168979,168981,168983,168985,168987,168989],{"class":131,"line":1194},[129,168963,107834],{"class":135},[129,168965,146792],{"class":188},[129,168967,140],{"class":139},[129,168969,168970],{"class":244},"\"students.txt\"",[129,168972,12450],{"class":139},[129,168974,151977],{"class":244},[129,168976,12450],{"class":139},[129,168978,146807],{"class":5231},[129,168980,185],{"class":135},[129,168982,146812],{"class":244},[129,168984,13729],{"class":139},[129,168986,31384],{"class":135},[129,168988,148154],{"class":5231},[129,168990,3753],{"class":139},[129,168992,168993,168995],{"class":131,"line":1209},[129,168994,168885],{"class":5231},[129,168996,168997],{"class":139},".writelines(lines)\n",[71,168999,169001],{"id":169000},"_87-追加文件","8.7 追加文件",[14,169003,169004,169006],{},[126,169005,20],{}," 模式不会清空原内容，而是在末尾追加。",[120,169008,169010],{"className":30379,"code":169009,"language":30381,"meta":42,"style":42},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[126,169011,169012,169043],{"__ignoreMap":42},[129,169013,169014,169016,169018,169020,169023,169025,169027,169029,169031,169033,169035,169037,169039,169041],{"class":131,"line":132},[129,169015,107834],{"class":135},[129,169017,146792],{"class":188},[129,169019,140],{"class":139},[129,169021,169022],{"class":244},"\"log.txt\"",[129,169024,12450],{"class":139},[129,169026,165326],{"class":244},[129,169028,12450],{"class":139},[129,169030,146807],{"class":5231},[129,169032,185],{"class":135},[129,169034,146812],{"class":244},[129,169036,13729],{"class":139},[129,169038,31384],{"class":135},[129,169040,148154],{"class":5231},[129,169042,3753],{"class":139},[129,169044,169045,169047,169049,169052,169054,169056],{"class":131,"line":51},[129,169046,168885],{"class":5231},[129,169048,168888],{"class":139},[129,169050,169051],{"class":244},"\"程序启动",[129,169053,156526],{"class":188},[129,169055,390],{"class":244},[129,169057,146],{"class":139},[14,169059,169060],{},"日志类文件常用追加模式。",[71,169062,169064],{"id":169063},"_88-文件编码","8.8 文件编码",[14,169066,169067],{},"编码决定文字如何保存为字节。",[14,169069,169070],{},"常见编码：",[83,169072,169073,169076],{},[86,169074,169075],{},"UTF-8：推荐。",[86,169077,169078],{},"GBK：部分 Windows 中文文件常见。",[14,169080,169081],{},"读取文件乱码时，可以尝试：",[120,169083,169085],{"className":30379,"code":169084,"language":30381,"meta":42,"style":42},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[126,169086,169087,169118],{"__ignoreMap":42},[129,169088,169089,169091,169093,169095,169097,169099,169101,169103,169105,169107,169110,169112,169114,169116],{"class":131,"line":132},[129,169090,107834],{"class":135},[129,169092,146792],{"class":188},[129,169094,140],{"class":139},[129,169096,146797],{"class":244},[129,169098,12450],{"class":139},[129,169100,146802],{"class":244},[129,169102,12450],{"class":139},[129,169104,146807],{"class":5231},[129,169106,185],{"class":135},[129,169108,169109],{"class":244},"\"gbk\"",[129,169111,13729],{"class":139},[129,169113,31384],{"class":135},[129,169115,148154],{"class":5231},[129,169117,3753],{"class":139},[129,169119,169120,169122,169124,169126],{"class":131,"line":51},[129,169121,146824],{"class":139},[129,169123,185],{"class":135},[129,169125,148154],{"class":5231},[129,169127,168502],{"class":139},[14,169129,169130],{},"写文件时建议统一 UTF-8：",[120,169132,169134],{"className":30379,"code":169133,"language":30381,"meta":42,"style":42},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[126,169135,169136,169166],{"__ignoreMap":42},[129,169137,169138,169140,169142,169144,169146,169148,169150,169152,169154,169156,169158,169160,169162,169164],{"class":131,"line":132},[129,169139,107834],{"class":135},[129,169141,146792],{"class":188},[129,169143,140],{"class":139},[129,169145,146797],{"class":244},[129,169147,12450],{"class":139},[129,169149,151977],{"class":244},[129,169151,12450],{"class":139},[129,169153,146807],{"class":5231},[129,169155,185],{"class":135},[129,169157,146812],{"class":244},[129,169159,13729],{"class":139},[129,169161,31384],{"class":135},[129,169163,148154],{"class":5231},[129,169165,3753],{"class":139},[129,169167,169168,169170,169172,169175],{"class":131,"line":51},[129,169169,168885],{"class":5231},[129,169171,168888],{"class":139},[129,169173,169174],{"class":244},"\"中文内容\"",[129,169176,146],{"class":139},[71,169178,169180],{"id":169179},"_89-pathlib","8.9 pathlib",[14,169182,169183,169186],{},[126,169184,169185],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[120,169188,169190],{"className":30379,"code":169189,"language":30381,"meta":42,"style":42},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[126,169191,169192,169202,169206,169224],{"__ignoreMap":42},[129,169193,169194,169196,169198,169200],{"class":131,"line":132},[129,169195,30738],{"class":135},[129,169197,108312],{"class":139},[129,169199,30393],{"class":135},[129,169201,108317],{"class":139},[129,169203,169204],{"class":131,"line":51},[129,169205,2414],{"emptyLinePlaceholder":56},[129,169207,169208,169210,169212,169214,169217,169219,169221],{"class":131,"line":1194},[129,169209,168312],{"class":139},[129,169211,185],{"class":135},[129,169213,108546],{"class":139},[129,169215,169216],{"class":244},"\"data\"",[129,169218,13729],{"class":139},[129,169220,723],{"class":135},[129,169222,169223],{"class":244}," \"students.txt\"\n",[129,169225,169226,169228],{"class":131,"line":1209},[129,169227,30416],{"class":188},[129,169229,169230],{"class":139},"(path)\n",[14,169232,169233],{},"创建目录：",[120,169235,169237],{"className":30379,"code":169236,"language":30381,"meta":42,"style":42},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[126,169238,169239,169249,169253,169266],{"__ignoreMap":42},[129,169240,169241,169243,169245,169247],{"class":131,"line":132},[129,169242,30738],{"class":135},[129,169244,108312],{"class":139},[129,169246,30393],{"class":135},[129,169248,108317],{"class":139},[129,169250,169251],{"class":131,"line":51},[129,169252,2414],{"emptyLinePlaceholder":56},[129,169254,169255,169258,169260,169262,169264],{"class":131,"line":1194},[129,169256,169257],{"class":139},"data_dir ",[129,169259,185],{"class":135},[129,169261,108546],{"class":139},[129,169263,169216],{"class":244},[129,169265,146],{"class":139},[129,169267,169268,169271,169274,169276,169278],{"class":131,"line":1209},[129,169269,169270],{"class":139},"data_dir.mkdir(",[129,169272,169273],{"class":5231},"exist_ok",[129,169275,185],{"class":135},[129,169277,31477],{"class":188},[129,169279,146],{"class":139},[14,169281,169282],{},"判断文件是否存在：",[120,169284,169286],{"className":30379,"code":169285,"language":30381,"meta":42,"style":42},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[126,169287,169288,169301,169305,169312],{"__ignoreMap":42},[129,169289,169290,169292,169294,169296,169299],{"class":131,"line":132},[129,169291,168312],{"class":139},[129,169293,185],{"class":135},[129,169295,108546],{"class":139},[129,169297,169298],{"class":244},"\"data\u002Fstudents.txt\"",[129,169300,146],{"class":139},[129,169302,169303],{"class":131,"line":51},[129,169304,2414],{"emptyLinePlaceholder":56},[129,169306,169307,169309],{"class":131,"line":1194},[129,169308,1545],{"class":135},[129,169310,169311],{"class":139}," path.exists():\n",[129,169313,169314,169316,169318,169321],{"class":131,"line":1209},[129,169315,31300],{"class":188},[129,169317,140],{"class":139},[129,169319,169320],{"class":244},"\"文件存在\"",[129,169322,146],{"class":139},[14,169324,169325],{},"读写文本：",[120,169327,169329],{"className":30379,"code":169328,"language":30381,"meta":42,"style":42},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[126,169330,169331,169343,169347,169364,169381],{"__ignoreMap":42},[129,169332,169333,169335,169337,169339,169341],{"class":131,"line":132},[129,169334,168312],{"class":139},[129,169336,185],{"class":135},[129,169338,108546],{"class":139},[129,169340,146797],{"class":244},[129,169342,146],{"class":139},[129,169344,169345],{"class":131,"line":51},[129,169346,2414],{"emptyLinePlaceholder":56},[129,169348,169349,169352,169354,169356,169358,169360,169362],{"class":131,"line":1194},[129,169350,169351],{"class":139},"path.write_text(",[129,169353,145877],{"class":244},[129,169355,12450],{"class":139},[129,169357,146807],{"class":5231},[129,169359,185],{"class":135},[129,169361,146812],{"class":244},[129,169363,146],{"class":139},[129,169365,169366,169368,169370,169373,169375,169377,169379],{"class":131,"line":1209},[129,169367,168495],{"class":139},[129,169369,185],{"class":135},[129,169371,169372],{"class":139}," path.read_text(",[129,169374,146807],{"class":5231},[129,169376,185],{"class":135},[129,169378,146812],{"class":244},[129,169380,146],{"class":139},[129,169382,169383,169385],{"class":131,"line":1215},[129,169384,30416],{"class":188},[129,169386,168509],{"class":139},[71,169388,169390],{"id":169389},"_810-json文件","8.10 JSON文件",[14,169392,169393],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[120,169395,169397],{"className":30379,"code":169396,"language":30381,"meta":42,"style":42},"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",[126,169398,169399,169405,169409,169417,169427,169437,169445,169449,169453,169478],{"__ignoreMap":42},[129,169400,169401,169403],{"class":131,"line":132},[129,169402,30393],{"class":135},[129,169404,147092],{"class":139},[129,169406,169407],{"class":131,"line":51},[129,169408,2414],{"emptyLinePlaceholder":56},[129,169410,169411,169413,169415],{"class":131,"line":1194},[129,169412,149482],{"class":139},[129,169414,185],{"class":135},[129,169416,15587],{"class":139},[129,169418,169419,169421,169423,169425],{"class":131,"line":1209},[129,169420,147021],{"class":244},[129,169422,51438],{"class":139},[129,169424,149889],{"class":244},[129,169426,31467],{"class":139},[129,169428,169429,169431,169433,169435],{"class":131,"line":1215},[129,169430,164538],{"class":244},[129,169432,51438],{"class":139},[129,169434,789],{"class":188},[129,169436,31467],{"class":139},[129,169438,169439,169441,169443],{"class":131,"line":1229},[129,169440,164549],{"class":244},[129,169442,51438],{"class":139},[129,169444,164554],{"class":188},[129,169446,169447],{"class":131,"line":1235},[129,169448,1579],{"class":139},[129,169450,169451],{"class":131,"line":1326},[129,169452,2414],{"emptyLinePlaceholder":56},[129,169454,169455,169457,169459,169462,169464,169466,169468,169470,169472,169474,169476],{"class":131,"line":1332},[129,169456,156445],{"class":139},[129,169458,185],{"class":135},[129,169460,169461],{"class":139}," json.dumps(student, ",[129,169463,147138],{"class":5231},[129,169465,185],{"class":135},[129,169467,33988],{"class":188},[129,169469,12450],{"class":139},[129,169471,152013],{"class":5231},[129,169473,185],{"class":135},[129,169475,217],{"class":188},[129,169477,146],{"class":139},[129,169479,169480,169482],{"class":131,"line":1344},[129,169481,30416],{"class":188},[129,169483,164072],{"class":139},[14,169485,169486],{},"写入 JSON 文件：",[120,169488,169490],{"className":30379,"code":169489,"language":30381,"meta":42,"style":42},"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",[126,169491,169492,169498,169502,169510,169538,169566,169570,169574,169604],{"__ignoreMap":42},[129,169493,169494,169496],{"class":131,"line":132},[129,169495,30393],{"class":135},[129,169497,147092],{"class":139},[129,169499,169500],{"class":131,"line":51},[129,169501,2414],{"emptyLinePlaceholder":56},[129,169503,169504,169506,169508],{"class":131,"line":1194},[129,169505,159717],{"class":139},[129,169507,185],{"class":135},[129,169509,55448],{"class":139},[129,169511,169512,169514,169516,169518,169520,169522,169524,169526,169528,169530,169532,169534,169536],{"class":131,"line":1209},[129,169513,148386],{"class":139},[129,169515,62680],{"class":244},[129,169517,51438],{"class":139},[129,169519,149889],{"class":244},[129,169521,12450],{"class":139},[129,169523,69125],{"class":244},[129,169525,51438],{"class":139},[129,169527,789],{"class":188},[129,169529,12450],{"class":139},[129,169531,151473],{"class":244},[129,169533,51438],{"class":139},[129,169535,1128],{"class":188},[129,169537,4944],{"class":139},[129,169539,169540,169542,169544,169546,169548,169550,169552,169554,169556,169558,169560,169562,169564],{"class":131,"line":1215},[129,169541,148386],{"class":139},[129,169543,62680],{"class":244},[129,169545,51438],{"class":139},[129,169547,150937],{"class":244},[129,169549,12450],{"class":139},[129,169551,69125],{"class":244},[129,169553,51438],{"class":139},[129,169555,764],{"class":188},[129,169557,12450],{"class":139},[129,169559,151473],{"class":244},[129,169561,51438],{"class":139},[129,169563,950],{"class":188},[129,169565,4944],{"class":139},[129,169567,169568],{"class":131,"line":1229},[129,169569,33247],{"class":139},[129,169571,169572],{"class":131,"line":1235},[129,169573,2414],{"emptyLinePlaceholder":56},[129,169575,169576,169578,169580,169582,169584,169586,169588,169590,169592,169594,169596,169598,169600,169602],{"class":131,"line":1326},[129,169577,107834],{"class":135},[129,169579,146792],{"class":188},[129,169581,140],{"class":139},[129,169583,151832],{"class":244},[129,169585,12450],{"class":139},[129,169587,151977],{"class":244},[129,169589,12450],{"class":139},[129,169591,146807],{"class":5231},[129,169593,185],{"class":135},[129,169595,146812],{"class":244},[129,169597,13729],{"class":139},[129,169599,31384],{"class":135},[129,169601,148154],{"class":5231},[129,169603,3753],{"class":139},[129,169605,169606,169609,169611,169613,169615,169617,169619,169621,169623,169625,169627],{"class":131,"line":1332},[129,169607,169608],{"class":139},"    json.dump(students, ",[129,169610,45355],{"class":5231},[129,169612,12450],{"class":139},[129,169614,147138],{"class":5231},[129,169616,185],{"class":135},[129,169618,33988],{"class":188},[129,169620,12450],{"class":139},[129,169622,152013],{"class":5231},[129,169624,185],{"class":135},[129,169626,217],{"class":188},[129,169628,146],{"class":139},[14,169630,169631],{},"读取 JSON 文件：",[120,169633,169635],{"className":30379,"code":169634,"language":30381,"meta":42,"style":42},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[126,169636,169637,169643,169647,169677,169689,169693],{"__ignoreMap":42},[129,169638,169639,169641],{"class":131,"line":132},[129,169640,30393],{"class":135},[129,169642,147092],{"class":139},[129,169644,169645],{"class":131,"line":51},[129,169646,2414],{"emptyLinePlaceholder":56},[129,169648,169649,169651,169653,169655,169657,169659,169661,169663,169665,169667,169669,169671,169673,169675],{"class":131,"line":1194},[129,169650,107834],{"class":135},[129,169652,146792],{"class":188},[129,169654,140],{"class":139},[129,169656,151832],{"class":244},[129,169658,12450],{"class":139},[129,169660,146802],{"class":244},[129,169662,12450],{"class":139},[129,169664,146807],{"class":5231},[129,169666,185],{"class":135},[129,169668,146812],{"class":244},[129,169670,13729],{"class":139},[129,169672,31384],{"class":135},[129,169674,148154],{"class":5231},[129,169676,3753],{"class":139},[129,169678,169679,169681,169683,169685,169687],{"class":131,"line":1209},[129,169680,153038],{"class":139},[129,169682,185],{"class":135},[129,169684,148165],{"class":139},[129,169686,45355],{"class":5231},[129,169688,146],{"class":139},[129,169690,169691],{"class":131,"line":1215},[129,169692,2414],{"emptyLinePlaceholder":56},[129,169694,169695,169697],{"class":131,"line":1229},[129,169696,30416],{"class":188},[129,169698,164996],{"class":139},[71,169700,169702],{"id":169701},"_811-csv文件","8.11 CSV文件",[14,169704,169705],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169707,169708],{},"写入 CSV：",[120,169710,169712],{"className":30379,"code":169711,"language":30381,"meta":42,"style":42},"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",[126,169713,169714,169721,169725,169733,169751,169767,169783,169787,169791,169831,169845],{"__ignoreMap":42},[129,169715,169716,169718],{"class":131,"line":132},[129,169717,30393],{"class":135},[129,169719,169720],{"class":139}," csv\n",[129,169722,169723],{"class":131,"line":51},[129,169724,2414],{"emptyLinePlaceholder":56},[129,169726,169727,169729,169731],{"class":131,"line":1194},[129,169728,159717],{"class":139},[129,169730,185],{"class":135},[129,169732,55448],{"class":139},[129,169734,169735,169738,169740,169742,169744,169746,169749],{"class":131,"line":1209},[129,169736,169737],{"class":139},"    [",[129,169739,73100],{"class":244},[129,169741,12450],{"class":139},[129,169743,73133],{"class":244},[129,169745,12450],{"class":139},[129,169747,169748],{"class":244},"\"成绩\"",[129,169750,87837],{"class":139},[129,169752,169753,169755,169757,169759,169761,169763,169765],{"class":131,"line":1215},[129,169754,169737],{"class":139},[129,169756,149889],{"class":244},[129,169758,12450],{"class":139},[129,169760,789],{"class":188},[129,169762,12450],{"class":139},[129,169764,1128],{"class":188},[129,169766,87837],{"class":139},[129,169768,169769,169771,169773,169775,169777,169779,169781],{"class":131,"line":1229},[129,169770,169737],{"class":139},[129,169772,150937],{"class":244},[129,169774,12450],{"class":139},[129,169776,764],{"class":188},[129,169778,12450],{"class":139},[129,169780,950],{"class":188},[129,169782,87837],{"class":139},[129,169784,169785],{"class":131,"line":1235},[129,169786,33247],{"class":139},[129,169788,169789],{"class":131,"line":1326},[129,169790,2414],{"emptyLinePlaceholder":56},[129,169792,169793,169795,169797,169799,169802,169804,169806,169808,169810,169812,169814,169816,169819,169821,169823,169825,169827,169829],{"class":131,"line":1332},[129,169794,107834],{"class":135},[129,169796,146792],{"class":188},[129,169798,140],{"class":139},[129,169800,169801],{"class":244},"\"students.csv\"",[129,169803,12450],{"class":139},[129,169805,151977],{"class":244},[129,169807,12450],{"class":139},[129,169809,146807],{"class":5231},[129,169811,185],{"class":135},[129,169813,146812],{"class":244},[129,169815,12450],{"class":139},[129,169817,169818],{"class":5231},"newline",[129,169820,185],{"class":135},[129,169822,7667],{"class":244},[129,169824,13729],{"class":139},[129,169826,31384],{"class":135},[129,169828,148154],{"class":5231},[129,169830,3753],{"class":139},[129,169832,169833,169836,169838,169841,169843],{"class":131,"line":1344},[129,169834,169835],{"class":139},"    writer ",[129,169837,185],{"class":135},[129,169839,169840],{"class":139}," csv.writer(",[129,169842,45355],{"class":5231},[129,169844,146],{"class":139},[129,169846,169847],{"class":131,"line":1626},[129,169848,169849],{"class":139},"    writer.writerows(students)\n",[14,169851,169852],{},"读取 CSV：",[120,169854,169856],{"className":30379,"code":169855,"language":30381,"meta":42,"style":42},"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",[126,169857,169858,169864,169868,169898,169912,169924],{"__ignoreMap":42},[129,169859,169860,169862],{"class":131,"line":132},[129,169861,30393],{"class":135},[129,169863,169720],{"class":139},[129,169865,169866],{"class":131,"line":51},[129,169867,2414],{"emptyLinePlaceholder":56},[129,169869,169870,169872,169874,169876,169878,169880,169882,169884,169886,169888,169890,169892,169894,169896],{"class":131,"line":1194},[129,169871,107834],{"class":135},[129,169873,146792],{"class":188},[129,169875,140],{"class":139},[129,169877,169801],{"class":244},[129,169879,12450],{"class":139},[129,169881,146802],{"class":244},[129,169883,12450],{"class":139},[129,169885,146807],{"class":5231},[129,169887,185],{"class":135},[129,169889,146812],{"class":244},[129,169891,13729],{"class":139},[129,169893,31384],{"class":135},[129,169895,148154],{"class":5231},[129,169897,3753],{"class":139},[129,169899,169900,169903,169905,169908,169910],{"class":131,"line":1209},[129,169901,169902],{"class":139},"    reader ",[129,169904,185],{"class":135},[129,169906,169907],{"class":139}," csv.reader(",[129,169909,45355],{"class":5231},[129,169911,146],{"class":139},[129,169913,169914,169916,169919,169921],{"class":131,"line":1215},[129,169915,3215],{"class":135},[129,169917,169918],{"class":139}," row ",[129,169920,26044],{"class":135},[129,169922,169923],{"class":139}," reader:\n",[129,169925,169926,169928],{"class":131,"line":1229},[129,169927,32452],{"class":188},[129,169929,169930],{"class":139},"(row)\n",[14,169932,169933],{},"使用字典写入：",[120,169935,169937],{"className":30379,"code":169936,"language":30381,"meta":42,"style":42},"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",[126,169938,169939,169945,169949,169957,169985,170013,170017,170021,170059,170080,170101,170106],{"__ignoreMap":42},[129,169940,169941,169943],{"class":131,"line":132},[129,169942,30393],{"class":135},[129,169944,169720],{"class":139},[129,169946,169947],{"class":131,"line":51},[129,169948,2414],{"emptyLinePlaceholder":56},[129,169950,169951,169953,169955],{"class":131,"line":1194},[129,169952,159717],{"class":139},[129,169954,185],{"class":135},[129,169956,55448],{"class":139},[129,169958,169959,169961,169963,169965,169967,169969,169971,169973,169975,169977,169979,169981,169983],{"class":131,"line":1209},[129,169960,148386],{"class":139},[129,169962,62680],{"class":244},[129,169964,51438],{"class":139},[129,169966,149889],{"class":244},[129,169968,12450],{"class":139},[129,169970,69125],{"class":244},[129,169972,51438],{"class":139},[129,169974,789],{"class":188},[129,169976,12450],{"class":139},[129,169978,151473],{"class":244},[129,169980,51438],{"class":139},[129,169982,1128],{"class":188},[129,169984,4944],{"class":139},[129,169986,169987,169989,169991,169993,169995,169997,169999,170001,170003,170005,170007,170009,170011],{"class":131,"line":1215},[129,169988,148386],{"class":139},[129,169990,62680],{"class":244},[129,169992,51438],{"class":139},[129,169994,150937],{"class":244},[129,169996,12450],{"class":139},[129,169998,69125],{"class":244},[129,170000,51438],{"class":139},[129,170002,764],{"class":188},[129,170004,12450],{"class":139},[129,170006,151473],{"class":244},[129,170008,51438],{"class":139},[129,170010,950],{"class":188},[129,170012,4944],{"class":139},[129,170014,170015],{"class":131,"line":1229},[129,170016,33247],{"class":139},[129,170018,170019],{"class":131,"line":1235},[129,170020,2414],{"emptyLinePlaceholder":56},[129,170022,170023,170025,170027,170029,170031,170033,170035,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055,170057],{"class":131,"line":1326},[129,170024,107834],{"class":135},[129,170026,146792],{"class":188},[129,170028,140],{"class":139},[129,170030,169801],{"class":244},[129,170032,12450],{"class":139},[129,170034,151977],{"class":244},[129,170036,12450],{"class":139},[129,170038,146807],{"class":5231},[129,170040,185],{"class":135},[129,170042,146812],{"class":244},[129,170044,12450],{"class":139},[129,170046,169818],{"class":5231},[129,170048,185],{"class":135},[129,170050,7667],{"class":244},[129,170052,13729],{"class":139},[129,170054,31384],{"class":135},[129,170056,148154],{"class":5231},[129,170058,3753],{"class":139},[129,170060,170061,170064,170066,170068,170070,170072,170074,170076,170078],{"class":131,"line":1332},[129,170062,170063],{"class":139},"    fieldnames ",[129,170065,185],{"class":135},[129,170067,52227],{"class":139},[129,170069,62680],{"class":244},[129,170071,12450],{"class":139},[129,170073,69125],{"class":244},[129,170075,12450],{"class":139},[129,170077,151473],{"class":244},[129,170079,33247],{"class":139},[129,170081,170082,170084,170086,170089,170091,170093,170096,170098],{"class":131,"line":1344},[129,170083,169835],{"class":139},[129,170085,185],{"class":135},[129,170087,170088],{"class":139}," csv.DictWriter(",[129,170090,45355],{"class":5231},[129,170092,12450],{"class":139},[129,170094,170095],{"class":5231},"fieldnames",[129,170097,185],{"class":135},[129,170099,170100],{"class":139},"fieldnames)\n",[129,170102,170103],{"class":131,"line":1626},[129,170104,170105],{"class":139},"    writer.writeheader()\n",[129,170107,170108],{"class":131,"line":1631},[129,170109,169849],{"class":139},[71,170111,170113],{"id":170112},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170115,123293],{},[83,170117,170118,170121,170124],{},[86,170119,170120],{},"读取文本文件。",[86,170122,170123],{},"统计每个单词出现次数。",[86,170125,170126],{},"输出出现次数最多的前 10 个单词。",[14,170128,10050],{},[120,170130,170132],{"className":30379,"code":170131,"language":30381,"meta":42,"style":42},"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",[126,170133,170134,170144,170148,170161,170177,170181,170191,170200,170204,170216,170236,170245,170249,170267,170271,170301,170305,170321],{"__ignoreMap":42},[129,170135,170136,170138,170140,170142],{"class":131,"line":132},[129,170137,30738],{"class":135},[129,170139,108312],{"class":139},[129,170141,30393],{"class":135},[129,170143,108317],{"class":139},[129,170145,170146],{"class":131,"line":51},[129,170147,2414],{"emptyLinePlaceholder":56},[129,170149,170150,170152,170154,170156,170159],{"class":131,"line":1194},[129,170151,168312],{"class":139},[129,170153,185],{"class":135},[129,170155,108546],{"class":139},[129,170157,170158],{"class":244},"\"article.txt\"",[129,170160,146],{"class":139},[129,170162,170163,170165,170167,170169,170171,170173,170175],{"class":131,"line":1209},[129,170164,168495],{"class":139},[129,170166,185],{"class":135},[129,170168,169372],{"class":139},[129,170170,146807],{"class":5231},[129,170172,185],{"class":135},[129,170174,146812],{"class":244},[129,170176,146],{"class":139},[129,170178,170179],{"class":131,"line":1215},[129,170180,2414],{"emptyLinePlaceholder":56},[129,170182,170183,170186,170188],{"class":131,"line":1229},[129,170184,170185],{"class":139},"words ",[129,170187,185],{"class":135},[129,170189,170190],{"class":139}," content.lower().split()\n",[129,170192,170193,170196,170198],{"class":131,"line":1235},[129,170194,170195],{"class":139},"counter ",[129,170197,185],{"class":135},[129,170199,87869],{"class":139},[129,170201,170202],{"class":131,"line":1326},[129,170203,2414],{"emptyLinePlaceholder":56},[129,170205,170206,170208,170211,170213],{"class":131,"line":1332},[129,170207,3039],{"class":135},[129,170209,170210],{"class":139}," word ",[129,170212,26044],{"class":135},[129,170214,170215],{"class":139}," words:\n",[129,170217,170218,170221,170223,170226,170229,170231,170234],{"class":131,"line":1344},[129,170219,170220],{"class":139},"    word ",[129,170222,185],{"class":135},[129,170224,170225],{"class":139}," word.strip(",[129,170227,170228],{"class":244},"\".,!?;:",[129,170230,156496],{"class":188},[129,170232,170233],{"class":244},"'()[]\"",[129,170235,146],{"class":139},[129,170237,170238,170240,170242],{"class":131,"line":1626},[129,170239,3115],{"class":135},[129,170241,38931],{"class":135},[129,170243,170244],{"class":139}," word:\n",[129,170246,170247],{"class":131,"line":1631},[129,170248,148513],{"class":135},[129,170250,170251,170254,170256,170259,170261,170263,170265],{"class":131,"line":1637},[129,170252,170253],{"class":139},"    counter[word] ",[129,170255,185],{"class":135},[129,170257,170258],{"class":139}," counter.get(word, ",[129,170260,331],{"class":188},[129,170262,13729],{"class":139},[129,170264,620],{"class":135},[129,170266,55700],{"class":188},[129,170268,170269],{"class":131,"line":1642},[129,170270,2414],{"emptyLinePlaceholder":56},[129,170272,170273,170276,170278,170280,170283,170285,170287,170289,170291,170293,170295,170297,170299],{"class":131,"line":1656},[129,170274,170275],{"class":139},"items ",[129,170277,185],{"class":135},[129,170279,163605],{"class":188},[129,170281,170282],{"class":139},"(counter.items(), ",[129,170284,153947],{"class":5231},[129,170286,153950],{"class":135},[129,170288,153953],{"class":139},[129,170290,357],{"class":188},[129,170292,112203],{"class":139},[129,170294,163529],{"class":5231},[129,170296,185],{"class":135},[129,170298,31477],{"class":188},[129,170300,146],{"class":139},[129,170302,170303],{"class":131,"line":1661},[129,170304,2414],{"emptyLinePlaceholder":56},[129,170306,170307,170309,170312,170314,170317,170319],{"class":131,"line":1667},[129,170308,3039],{"class":135},[129,170310,170311],{"class":139}," word, count ",[129,170313,26044],{"class":135},[129,170315,170316],{"class":139}," items[:",[129,170318,585],{"class":188},[129,170320,165756],{"class":139},[129,170322,170323,170325],{"class":131,"line":1688},[129,170324,31300],{"class":188},[129,170326,170327],{"class":139},"(word, count)\n",[71,170329,170331],{"id":170330},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[120,170333,170335],{"className":30379,"code":170334,"language":30381,"meta":42,"style":42},"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",[126,170336,170337,170343,170353,170357,170369,170373,170377,170385,170395,170401,170405,170435,170445,170449,170453,170461,170491,170515,170519,170523,170531,170560,170565],{"__ignoreMap":42},[129,170338,170339,170341],{"class":131,"line":132},[129,170340,30393],{"class":135},[129,170342,147092],{"class":139},[129,170344,170345,170347,170349,170351],{"class":131,"line":51},[129,170346,30738],{"class":135},[129,170348,108312],{"class":139},[129,170350,30393],{"class":135},[129,170352,108317],{"class":139},[129,170354,170355],{"class":131,"line":1194},[129,170356,2414],{"emptyLinePlaceholder":56},[129,170358,170359,170361,170363,170365,170367],{"class":131,"line":1209},[129,170360,151825],{"class":188},[129,170362,13579],{"class":135},[129,170364,108546],{"class":139},[129,170366,151832],{"class":244},[129,170368,146],{"class":139},[129,170370,170371],{"class":131,"line":1215},[129,170372,2414],{"emptyLinePlaceholder":56},[129,170374,170375],{"class":131,"line":1229},[129,170376,2414],{"emptyLinePlaceholder":56},[129,170378,170379,170381,170383],{"class":131,"line":1235},[129,170380,31948],{"class":135},[129,170382,151849],{"class":1977},[129,170384,31954],{"class":139},[129,170386,170387,170389,170391,170393],{"class":131,"line":1326},[129,170388,3115],{"class":135},[129,170390,38931],{"class":135},[129,170392,151860],{"class":188},[129,170394,151863],{"class":139},[129,170396,170397,170399],{"class":131,"line":1332},[129,170398,14767],{"class":135},[129,170400,51839],{"class":139},[129,170402,170403],{"class":131,"line":1344},[129,170404,2414],{"emptyLinePlaceholder":56},[129,170406,170407,170409,170411,170413,170415,170417,170419,170421,170423,170425,170427,170429,170431,170433],{"class":131,"line":1626},[129,170408,34179],{"class":135},[129,170410,146792],{"class":188},[129,170412,140],{"class":139},[129,170414,151825],{"class":188},[129,170416,12450],{"class":139},[129,170418,146802],{"class":244},[129,170420,12450],{"class":139},[129,170422,146807],{"class":5231},[129,170424,185],{"class":135},[129,170426,146812],{"class":244},[129,170428,13729],{"class":139},[129,170430,31384],{"class":135},[129,170432,148154],{"class":5231},[129,170434,3753],{"class":139},[129,170436,170437,170439,170441,170443],{"class":131,"line":1631},[129,170438,14767],{"class":135},[129,170440,148165],{"class":139},[129,170442,45355],{"class":5231},[129,170444,146],{"class":139},[129,170446,170447],{"class":131,"line":1637},[129,170448,2414],{"emptyLinePlaceholder":56},[129,170450,170451],{"class":131,"line":1642},[129,170452,2414],{"emptyLinePlaceholder":56},[129,170454,170455,170457,170459],{"class":131,"line":1656},[129,170456,31948],{"class":135},[129,170458,151959],{"class":1977},[129,170460,151962],{"class":139},[129,170462,170463,170465,170467,170469,170471,170473,170475,170477,170479,170481,170483,170485,170487,170489],{"class":131,"line":1661},[129,170464,34179],{"class":135},[129,170466,146792],{"class":188},[129,170468,140],{"class":139},[129,170470,151825],{"class":188},[129,170472,12450],{"class":139},[129,170474,151977],{"class":244},[129,170476,12450],{"class":139},[129,170478,146807],{"class":5231},[129,170480,185],{"class":135},[129,170482,146812],{"class":244},[129,170484,13729],{"class":139},[129,170486,31384],{"class":135},[129,170488,148154],{"class":5231},[129,170490,3753],{"class":139},[129,170492,170493,170495,170497,170499,170501,170503,170505,170507,170509,170511,170513],{"class":131,"line":1667},[129,170494,151998],{"class":139},[129,170496,45355],{"class":5231},[129,170498,12450],{"class":139},[129,170500,147138],{"class":5231},[129,170502,185],{"class":135},[129,170504,33988],{"class":188},[129,170506,12450],{"class":139},[129,170508,152013],{"class":5231},[129,170510,185],{"class":135},[129,170512,217],{"class":188},[129,170514,146],{"class":139},[129,170516,170517],{"class":131,"line":1688},[129,170518,2414],{"emptyLinePlaceholder":56},[129,170520,170521],{"class":131,"line":1693},[129,170522,2414],{"emptyLinePlaceholder":56},[129,170524,170525,170527,170529],{"class":131,"line":1707},[129,170526,159717],{"class":139},[129,170528,185],{"class":135},[129,170530,153043],{"class":139},[129,170532,170533,170536,170538,170540,170542,170544,170546,170548,170550,170552,170554,170556,170558],{"class":131,"line":1712},[129,170534,170535],{"class":139},"students.append({",[129,170537,62680],{"class":244},[129,170539,51438],{"class":139},[129,170541,149889],{"class":244},[129,170543,12450],{"class":139},[129,170545,69125],{"class":244},[129,170547,51438],{"class":139},[129,170549,789],{"class":188},[129,170551,12450],{"class":139},[129,170553,151473],{"class":244},[129,170555,51438],{"class":139},[129,170557,1128],{"class":188},[129,170559,165153],{"class":139},[129,170561,170562],{"class":131,"line":1741},[129,170563,170564],{"class":139},"save_students(students)\n",[129,170566,170567,170569,170571,170574],{"class":131,"line":1746},[129,170568,30416],{"class":188},[129,170570,140],{"class":139},[129,170572,170573],{"class":244},"\"保存成功\"",[129,170575,146],{"class":139},[71,170577,170579],{"id":170578},"_814-易错点","8.14 易错点",[83,170581,170582,170586,170592,170597,170604,170611],{},[86,170583,170584,168845],{},[126,170585,934],{},[86,170587,170588,170589,28386],{},"读写中文要指定 ",[126,170590,170591],{},"encoding=\"utf-8\"",[86,170593,170594,170595,28386],{},"打开文件后要关闭，推荐使用 ",[126,170596,107834],{},[86,170598,170599,170600,170603],{},"读取大文件不要直接 ",[126,170601,170602],{},"read()"," 全部内容。",[86,170605,170606,170607,170610],{},"Windows 写 CSV 时建议加 ",[126,170608,170609],{},"newline=\"\"","，避免空行。",[86,170612,170613],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[71,170615,170617],{"id":170616},"_815-本章练习","8.15 本章练习",[83,170619,170620,170627,170632,170635,170638],{},[86,170621,170622,170623,170626],{},"写入一个 ",[126,170624,170625],{},"students.txt","，每行保存一个学生姓名。",[86,170628,104356,170629,170631],{},[126,170630,170625],{}," 并输出所有学生。",[86,170633,170634],{},"把学生列表保存为 JSON 文件。",[86,170636,170637],{},"从 JSON 文件读取学生数据，计算平均分。",[86,170639,170640,170641,170644,170645,170648],{},"写一个日志函数 ",[126,170642,170643],{},"write_log(message)","，每次调用向 ",[126,170646,170647],{},"app.log"," 追加一行。",[5141,170650,170651],{},"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":42,"searchDepth":51,"depth":51,"links":170653},[170654,170655,170659,170660,170666,170667,170668,170669,170670,170671,170672,170673,170674,170675,170676],{"id":168165,"depth":51,"text":168166},{"id":168206,"depth":51,"text":168207,"children":170656},[170657,170658],{"id":168210,"depth":1194,"text":168211},{"id":168244,"depth":1194,"text":168245},{"id":168358,"depth":51,"text":168359},{"id":168451,"depth":51,"text":168452,"children":170661},[170662,170663,170664,170665],{"id":168455,"depth":1194,"text":168456},{"id":168542,"depth":1194,"text":168543},{"id":168612,"depth":1194,"text":168613},{"id":168706,"depth":1194,"text":168707},{"id":168776,"depth":51,"text":168777},{"id":168839,"depth":51,"text":168840},{"id":169000,"depth":51,"text":169001},{"id":169063,"depth":51,"text":169064},{"id":169179,"depth":51,"text":169180},{"id":169389,"depth":51,"text":169390},{"id":169701,"depth":51,"text":169702},{"id":170112,"depth":51,"text":170113},{"id":170330,"depth":51,"text":170331},{"id":170578,"depth":51,"text":170579},{"id":170616,"depth":51,"text":170617},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168157,"description":53},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170683,"title":170684,"body":170685,"description":53,"extension":54,"meta":172871,"navigation":56,"path":172872,"seo":172873,"stem":172874,"__hash__":172875},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170686,"toc":172838},[170687,170690,170694,170697,170700,170792,170794,170813,170818,170822,170825,170828,170857,170864,170867,170871,170874,170903,170905,170957,170963,171016,171020,171118,171121,171188,171192,171249,171251,171257,171261,171266,171272,171363,171368,171372,171375,171453,171456,171494,171498,171616,171619,171623,171626,171671,171674,171678,171683,171689,171739,171742,171773,171777,171781,171811,171815,171850,171854,171889,171929,171933,171949,171952,171956,171960,172039,172043,172084,172088,172143,172147,172181,172185,172215,172224,172231,172237,172294,172297,172305,172308,172312,172319,172322,172328,172331,172348,172353,172357,172363,172376,172379,172416,172419,172430,172433,172447,172450,172464,172468,172475,172508,172511,172513,172519,172522,172526,172528,172534,172539,172712,172716,172779,172783,172807,172811,172835],[10,170688,170684],{"id":170689},"_9-异常模块与包",[71,170691,170693],{"id":170692},"_91-什么是异常","9.1 什么是异常",[14,170695,170696],{},"异常是程序运行过程中出现的错误。",[14,170698,170699],{},"常见异常：",[277,170701,170702,170711],{},[280,170703,170704],{},[283,170705,170706,170709],{},[286,170707,170708],{},"异常",[286,170710,25870],{},[324,170712,170713,170723,170733,170742,170752,170762,170772,170782],{},[283,170714,170715,170720],{},[329,170716,170717],{},[126,170718,170719],{},"NameError",[329,170721,170722],{},"使用了未定义变量",[283,170724,170725,170730],{},[329,170726,170727],{},[126,170728,170729],{},"TypeError",[329,170731,170732],{},"类型不匹配",[283,170734,170735,170739],{},[329,170736,170737],{},[126,170738,154835],{},[329,170740,170741],{},"值不合法",[283,170743,170744,170749],{},[329,170745,170746],{},[126,170747,170748],{},"IndexError",[329,170750,170751],{},"列表索引越界",[283,170753,170754,170759],{},[329,170755,170756],{},[126,170757,170758],{},"KeyError",[329,170760,170761],{},"字典 key 不存在",[283,170763,170764,170769],{},[329,170765,170766],{},[126,170767,170768],{},"FileNotFoundError",[329,170770,170771],{},"文件不存在",[283,170773,170774,170779],{},[329,170775,170776],{},[126,170777,170778],{},"ZeroDivisionError",[329,170780,170781],{},"除数为 0",[283,170783,170784,170789],{},[329,170785,170786],{},[126,170787,170788],{},"ImportError",[329,170790,170791],{},"导入失败",[14,170793,15150],{},[120,170795,170797],{"className":30379,"code":170796,"language":30381,"meta":42,"style":42},"num = int(\"abc\")\n",[126,170798,170799],{"__ignoreMap":42},[129,170800,170801,170803,170805,170807,170809,170811],{"class":131,"line":132},[129,170802,155788],{"class":139},[129,170804,185],{"class":135},[129,170806,2396],{"class":188},[129,170808,140],{"class":139},[129,170810,155881],{"class":244},[129,170812,146],{"class":139},[14,170814,170815,170816,28386],{},"会触发 ",[126,170817,154835],{},[71,170819,170821],{"id":170820},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170823,170824],{},"如果不处理异常，程序会直接终止。",[14,170826,170827],{},"例如用户输入年龄：",[120,170829,170831],{"className":30379,"code":170830,"language":30381,"meta":42,"style":42},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[126,170832,170833,170851],{"__ignoreMap":42},[129,170834,170835,170837,170839,170841,170843,170845,170847,170849],{"class":131,"line":132},[129,170836,146547],{"class":139},[129,170838,185],{"class":135},[129,170840,2396],{"class":188},[129,170842,140],{"class":139},[129,170844,53822],{"class":188},[129,170846,140],{"class":139},[129,170848,152395],{"class":244},[129,170850,30498],{"class":139},[129,170852,170853,170855],{"class":131,"line":51},[129,170854,30416],{"class":188},[129,170856,155762],{"class":139},[14,170858,170859,170860,170863],{},"用户输入 ",[126,170861,170862],{},"abc","，程序就会报错退出。",[14,170865,170866],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[71,170868,170870],{"id":170869},"_93-try-except","9.3 try except",[14,170872,170873],{},"基础语法：",[120,170875,170877],{"className":30379,"code":170876,"language":30381,"meta":42,"style":42},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[126,170878,170879,170886,170891,170898],{"__ignoreMap":42},[129,170880,170881,170884],{"class":131,"line":132},[129,170882,170883],{"class":135},"try",[129,170885,3753],{"class":139},[129,170887,170888],{"class":131,"line":51},[129,170889,170890],{"class":139},"    可能出错的代码\n",[129,170892,170893,170896],{"class":131,"line":1194},[129,170894,170895],{"class":135},"except",[129,170897,3753],{"class":139},[129,170899,170900],{"class":131,"line":1209},[129,170901,170902],{"class":139},"    出错后的处理代码\n",[14,170904,15150],{},[120,170906,170908],{"className":30379,"code":170907,"language":30381,"meta":42,"style":42},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[126,170909,170910,170916,170934,170940,170946],{"__ignoreMap":42},[129,170911,170912,170914],{"class":131,"line":132},[129,170913,170883],{"class":135},[129,170915,3753],{"class":139},[129,170917,170918,170920,170922,170924,170926,170928,170930,170932],{"class":131,"line":51},[129,170919,152387],{"class":139},[129,170921,185],{"class":135},[129,170923,2396],{"class":188},[129,170925,140],{"class":139},[129,170927,53822],{"class":188},[129,170929,140],{"class":139},[129,170931,152395],{"class":244},[129,170933,30498],{"class":139},[129,170935,170936,170938],{"class":131,"line":1194},[129,170937,31300],{"class":188},[129,170939,155762],{"class":139},[129,170941,170942,170944],{"class":131,"line":1209},[129,170943,170895],{"class":135},[129,170945,3753],{"class":139},[129,170947,170948,170950,170952,170955],{"class":131,"line":1215},[129,170949,31300],{"class":188},[129,170951,140],{"class":139},[129,170953,170954],{"class":244},"\"年龄必须是数字\"",[129,170956,146],{"class":139},[14,170958,170959,170960,170962],{},"不建议裸写 ",[126,170961,170895],{},"，最好指定异常类型。",[120,170964,170966],{"className":30379,"code":170965,"language":30381,"meta":42,"style":42},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[126,170967,170968,170974,170992,170998,171006],{"__ignoreMap":42},[129,170969,170970,170972],{"class":131,"line":132},[129,170971,170883],{"class":135},[129,170973,3753],{"class":139},[129,170975,170976,170978,170980,170982,170984,170986,170988,170990],{"class":131,"line":51},[129,170977,152387],{"class":139},[129,170979,185],{"class":135},[129,170981,2396],{"class":188},[129,170983,140],{"class":139},[129,170985,53822],{"class":188},[129,170987,140],{"class":139},[129,170989,152395],{"class":244},[129,170991,30498],{"class":139},[129,170993,170994,170996],{"class":131,"line":1194},[129,170995,31300],{"class":188},[129,170997,155762],{"class":139},[129,170999,171000,171002,171004],{"class":131,"line":1209},[129,171001,170895],{"class":135},[129,171003,152227],{"class":188},[129,171005,3753],{"class":139},[129,171007,171008,171010,171012,171014],{"class":131,"line":1215},[129,171009,31300],{"class":188},[129,171011,140],{"class":139},[129,171013,170954],{"class":244},[129,171015,146],{"class":139},[71,171017,171019],{"id":171018},"_94-捕获多个异常","9.4 捕获多个异常",[120,171021,171023],{"className":30379,"code":171022,"language":30381,"meta":42,"style":42},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[126,171024,171025,171031,171052,171072,171079,171087,171098,171107],{"__ignoreMap":42},[129,171026,171027,171029],{"class":131,"line":132},[129,171028,170883],{"class":135},[129,171030,3753],{"class":139},[129,171032,171033,171036,171038,171040,171042,171044,171046,171048,171050],{"class":131,"line":51},[129,171034,171035],{"class":139},"    nums ",[129,171037,185],{"class":135},[129,171039,52227],{"class":139},[129,171041,357],{"class":188},[129,171043,12450],{"class":139},[129,171045,217],{"class":188},[129,171047,12450],{"class":139},[129,171049,211],{"class":188},[129,171051,33247],{"class":139},[129,171053,171054,171057,171059,171061,171063,171065,171067,171070],{"class":131,"line":1194},[129,171055,171056],{"class":139},"    index ",[129,171058,185],{"class":135},[129,171060,2396],{"class":188},[129,171062,140],{"class":139},[129,171064,53822],{"class":188},[129,171066,140],{"class":139},[129,171068,171069],{"class":244},"\"请输入索引:\"",[129,171071,30498],{"class":139},[129,171073,171074,171076],{"class":131,"line":1209},[129,171075,31300],{"class":188},[129,171077,171078],{"class":139},"(nums[index])\n",[129,171080,171081,171083,171085],{"class":131,"line":1215},[129,171082,170895],{"class":135},[129,171084,152227],{"class":188},[129,171086,3753],{"class":139},[129,171088,171089,171091,171093,171096],{"class":131,"line":1229},[129,171090,31300],{"class":188},[129,171092,140],{"class":139},[129,171094,171095],{"class":244},"\"索引必须是整数\"",[129,171097,146],{"class":139},[129,171099,171100,171102,171105],{"class":131,"line":1235},[129,171101,170895],{"class":135},[129,171103,171104],{"class":188}," IndexError",[129,171106,3753],{"class":139},[129,171108,171109,171111,171113,171116],{"class":131,"line":1326},[129,171110,31300],{"class":188},[129,171112,140],{"class":139},[129,171114,171115],{"class":244},"\"索引越界\"",[129,171117,146],{"class":139},[14,171119,171120],{},"多个异常使用相同处理逻辑：",[120,171122,171124],{"className":30379,"code":171123,"language":30381,"meta":42,"style":42},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[126,171125,171126,171132,171150,171163,171177],{"__ignoreMap":42},[129,171127,171128,171130],{"class":131,"line":132},[129,171129,170883],{"class":135},[129,171131,3753],{"class":139},[129,171133,171134,171136,171138,171140,171142,171144,171146,171148],{"class":131,"line":51},[129,171135,45594],{"class":139},[129,171137,185],{"class":135},[129,171139,2396],{"class":188},[129,171141,140],{"class":139},[129,171143,53822],{"class":188},[129,171145,140],{"class":139},[129,171147,155797],{"class":244},[129,171149,30498],{"class":139},[129,171151,171152,171154,171156,171158,171160],{"class":131,"line":1194},[129,171153,31300],{"class":188},[129,171155,140],{"class":139},[129,171157,585],{"class":188},[129,171159,156047],{"class":135},[129,171161,171162],{"class":139}," num)\n",[129,171164,171165,171167,171169,171171,171173,171175],{"class":131,"line":1209},[129,171166,170895],{"class":135},[129,171168,1672],{"class":139},[129,171170,154835],{"class":188},[129,171172,12450],{"class":139},[129,171174,170778],{"class":188},[129,171176,30787],{"class":139},[129,171178,171179,171181,171183,171186],{"class":131,"line":1215},[129,171180,31300],{"class":188},[129,171182,140],{"class":139},[129,171184,171185],{"class":244},"\"输入不合法\"",[129,171187,146],{"class":139},[71,171189,171191],{"id":171190},"_95-获取异常信息","9.5 获取异常信息",[120,171193,171195],{"className":30379,"code":171194,"language":30381,"meta":42,"style":42},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[126,171196,171197,171203,171217,171228],{"__ignoreMap":42},[129,171198,171199,171201],{"class":131,"line":132},[129,171200,170883],{"class":135},[129,171202,3753],{"class":139},[129,171204,171205,171207,171209,171211,171213,171215],{"class":131,"line":51},[129,171206,45594],{"class":139},[129,171208,185],{"class":135},[129,171210,2396],{"class":188},[129,171212,140],{"class":139},[129,171214,155881],{"class":244},[129,171216,146],{"class":139},[129,171218,171219,171221,171223,171225],{"class":131,"line":1194},[129,171220,170895],{"class":135},[129,171222,152227],{"class":188},[129,171224,64605],{"class":135},[129,171226,171227],{"class":139}," e:\n",[129,171229,171230,171232,171234,171236,171239,171241,171243,171245,171247],{"class":131,"line":1209},[129,171231,31300],{"class":188},[129,171233,140],{"class":139},[129,171235,192],{"class":135},[129,171237,171238],{"class":244},"\"出错了:",[129,171240,1035],{"class":188},[129,171242,214],{"class":139},[129,171244,1085],{"class":188},[129,171246,390],{"class":244},[129,171248,146],{"class":139},[14,171250,146458],{},[120,171252,171255],{"className":171253,"code":171254,"language":5202,"meta":42},[5200],"出错了:invalid literal for int() with base 10: 'abc'\n",[126,171256,171254],{"__ignoreMap":42},[71,171258,171260],{"id":171259},"_96-else和finally","9.6 else和finally",[14,171262,171263,171265],{},[126,171264,1715],{},"：没有异常时执行。",[14,171267,171268,171271],{},[126,171269,171270],{},"finally","：无论是否异常都会执行。",[120,171273,171275],{"className":30379,"code":171274,"language":30381,"meta":42,"style":42},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[126,171276,171277,171283,171301,171309,171319,171325,171346,171352],{"__ignoreMap":42},[129,171278,171279,171281],{"class":131,"line":132},[129,171280,170883],{"class":135},[129,171282,3753],{"class":139},[129,171284,171285,171287,171289,171291,171293,171295,171297,171299],{"class":131,"line":51},[129,171286,45594],{"class":139},[129,171288,185],{"class":135},[129,171290,2396],{"class":188},[129,171292,140],{"class":139},[129,171294,53822],{"class":188},[129,171296,140],{"class":139},[129,171298,155797],{"class":244},[129,171300,30498],{"class":139},[129,171302,171303,171305,171307],{"class":131,"line":1194},[129,171304,170895],{"class":135},[129,171306,152227],{"class":188},[129,171308,3753],{"class":139},[129,171310,171311,171313,171315,171317],{"class":131,"line":1209},[129,171312,31300],{"class":188},[129,171314,140],{"class":139},[129,171316,153215],{"class":244},[129,171318,146],{"class":139},[129,171320,171321,171323],{"class":131,"line":1215},[129,171322,1715],{"class":135},[129,171324,3753],{"class":139},[129,171326,171327,171329,171331,171333,171336,171338,171340,171342,171344],{"class":131,"line":1229},[129,171328,31300],{"class":188},[129,171330,140],{"class":139},[129,171332,192],{"class":135},[129,171334,171335],{"class":244},"\"输入正确:",[129,171337,1035],{"class":188},[129,171339,1679],{"class":139},[129,171341,1085],{"class":188},[129,171343,390],{"class":244},[129,171345,146],{"class":139},[129,171347,171348,171350],{"class":131,"line":1235},[129,171349,171270],{"class":135},[129,171351,3753],{"class":139},[129,171353,171354,171356,171358,171361],{"class":131,"line":1326},[129,171355,31300],{"class":188},[129,171357,140],{"class":139},[129,171359,171360],{"class":244},"\"程序结束\"",[129,171362,146],{"class":139},[14,171364,171365,171367],{},[126,171366,171270],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[71,171369,171371],{"id":171370},"_97-抛出异常","9.7 抛出异常",[14,171373,171374],{},"程序可以主动抛出异常。",[120,171376,171378],{"className":30379,"code":171377,"language":30381,"meta":42,"style":42},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[126,171379,171380,171389,171401,171414,171434,171438,171442],{"__ignoreMap":42},[129,171381,171382,171384,171387],{"class":131,"line":132},[129,171383,31948],{"class":135},[129,171385,171386],{"class":1977}," set_age",[129,171388,161416],{"class":139},[129,171390,171391,171393,171395,171397,171399],{"class":131,"line":51},[129,171392,3115],{"class":135},[129,171394,15722],{"class":139},[129,171396,1049],{"class":135},[129,171398,4107],{"class":188},[129,171400,3753],{"class":139},[129,171402,171403,171405,171407,171409,171412],{"class":131,"line":1194},[129,171404,103433],{"class":135},[129,171406,152227],{"class":188},[129,171408,140],{"class":139},[129,171410,171411],{"class":244},"\"年龄不能为负数\"",[129,171413,146],{"class":139},[129,171415,171416,171418,171420,171422,171424,171426,171428,171430,171432],{"class":131,"line":1209},[129,171417,31300],{"class":188},[129,171419,140],{"class":139},[129,171421,192],{"class":135},[129,171423,161984],{"class":244},[129,171425,1035],{"class":188},[129,171427,70222],{"class":139},[129,171429,1085],{"class":188},[129,171431,390],{"class":244},[129,171433,146],{"class":139},[129,171435,171436],{"class":131,"line":1215},[129,171437,2414],{"emptyLinePlaceholder":56},[129,171439,171440],{"class":131,"line":1229},[129,171441,2414],{"emptyLinePlaceholder":56},[129,171443,171444,171447,171449,171451],{"class":131,"line":1235},[129,171445,171446],{"class":139},"set_age(",[129,171448,671],{"class":135},[129,171450,357],{"class":188},[129,171452,146],{"class":139},[14,171454,171455],{},"调用者可以捕获：",[120,171457,171459],{"className":30379,"code":171458,"language":30381,"meta":42,"style":42},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[126,171460,171461,171467,171478,171488],{"__ignoreMap":42},[129,171462,171463,171465],{"class":131,"line":132},[129,171464,170883],{"class":135},[129,171466,3753],{"class":139},[129,171468,171469,171472,171474,171476],{"class":131,"line":51},[129,171470,171471],{"class":139},"    set_age(",[129,171473,671],{"class":135},[129,171475,357],{"class":188},[129,171477,146],{"class":139},[129,171479,171480,171482,171484,171486],{"class":131,"line":1194},[129,171481,170895],{"class":135},[129,171483,152227],{"class":188},[129,171485,64605],{"class":135},[129,171487,171227],{"class":139},[129,171489,171490,171492],{"class":131,"line":1209},[129,171491,31300],{"class":188},[129,171493,67000],{"class":139},[71,171495,171497],{"id":171496},"_98-自定义异常","9.8 自定义异常",[120,171499,171501],{"className":30379,"code":171500,"language":30381,"meta":42,"style":42},"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",[126,171502,171503,171517,171521,171525,171529,171537,171547,171558,171568,171572,171576,171582,171599,171610],{"__ignoreMap":42},[129,171504,171505,171507,171510,171512,171515],{"class":131,"line":132},[129,171506,14709],{"class":135},[129,171508,171509],{"class":1977}," BalanceNotEnoughError",[129,171511,140],{"class":139},[129,171513,171514],{"class":188},"Exception",[129,171516,30787],{"class":139},[129,171518,171519],{"class":131,"line":51},[129,171520,149538],{"class":135},[129,171522,171523],{"class":131,"line":1194},[129,171524,2414],{"emptyLinePlaceholder":56},[129,171526,171527],{"class":131,"line":1209},[129,171528,2414],{"emptyLinePlaceholder":56},[129,171530,171531,171533,171535],{"class":131,"line":1215},[129,171532,31948],{"class":135},[129,171534,150187],{"class":1977},[129,171536,162813],{"class":139},[129,171538,171539,171541,171543,171545],{"class":131,"line":1229},[129,171540,3115],{"class":135},[129,171542,150143],{"class":139},[129,171544,1099],{"class":135},[129,171546,162590],{"class":139},[129,171548,171549,171551,171554,171556],{"class":131,"line":1235},[129,171550,103433],{"class":135},[129,171552,171553],{"class":139}," BalanceNotEnoughError(",[129,171555,150238],{"class":244},[129,171557,146],{"class":139},[129,171559,171560,171562,171564,171566],{"class":131,"line":1326},[129,171561,4104],{"class":135},[129,171563,162820],{"class":139},[129,171565,671],{"class":135},[129,171567,150176],{"class":139},[129,171569,171570],{"class":131,"line":1332},[129,171571,2414],{"emptyLinePlaceholder":56},[129,171573,171574],{"class":131,"line":1344},[129,171575,2414],{"emptyLinePlaceholder":56},[129,171577,171578,171580],{"class":131,"line":1626},[129,171579,170883],{"class":135},[129,171581,3753],{"class":139},[129,171583,171584,171586,171588,171591,171593,171595,171597],{"class":131,"line":1631},[129,171585,162491],{"class":139},[129,171587,185],{"class":135},[129,171589,171590],{"class":139}," withdraw(",[129,171592,450],{"class":188},[129,171594,12450],{"class":139},[129,171596,1736],{"class":188},[129,171598,146],{"class":139},[129,171600,171601,171603,171606,171608],{"class":131,"line":1637},[129,171602,170895],{"class":135},[129,171604,171605],{"class":139}," BalanceNotEnoughError ",[129,171607,31384],{"class":135},[129,171609,171227],{"class":139},[129,171611,171612,171614],{"class":131,"line":1642},[129,171613,31300],{"class":188},[129,171615,67000],{"class":139},[14,171617,171618],{},"入门阶段大多数情况使用内置异常即可。",[71,171620,171622],{"id":171621},"_99-traceback","9.9 traceback",[14,171624,171625],{},"调试时可以输出完整异常堆栈。",[120,171627,171629],{"className":30379,"code":171628,"language":30381,"meta":42,"style":42},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[126,171630,171631,171638,171642,171648,171658,171666],{"__ignoreMap":42},[129,171632,171633,171635],{"class":131,"line":132},[129,171634,30393],{"class":135},[129,171636,171637],{"class":139}," traceback\n",[129,171639,171640],{"class":131,"line":51},[129,171641,2414],{"emptyLinePlaceholder":56},[129,171643,171644,171646],{"class":131,"line":1194},[129,171645,170883],{"class":135},[129,171647,3753],{"class":139},[129,171649,171650,171652,171654,171656],{"class":131,"line":1209},[129,171651,1999],{"class":188},[129,171653,140],{"class":139},[129,171655,155881],{"class":244},[129,171657,146],{"class":139},[129,171659,171660,171662,171664],{"class":131,"line":1215},[129,171661,170895],{"class":135},[129,171663,152227],{"class":188},[129,171665,3753],{"class":139},[129,171667,171668],{"class":131,"line":1229},[129,171669,171670],{"class":139},"    traceback.print_exc()\n",[14,171672,171673],{},"日志系统中常把异常堆栈记录到文件。",[71,171675,171677],{"id":171676},"_910-什么是模块","9.10 什么是模块",[14,171679,171680,171681,125984],{},"模块就是一个 ",[126,171682,146353],{},[14,171684,171685,171686,24619],{},"例如创建 ",[126,171687,171688],{},"my_math.py",[120,171690,171692],{"className":30379,"code":171691,"language":30381,"meta":42,"style":42},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[126,171693,171694,171702,171712,171716,171720,171729],{"__ignoreMap":42},[129,171695,171696,171698,171700],{"class":131,"line":132},[129,171697,31948],{"class":135},[129,171699,5224],{"class":1977},[129,171701,151094],{"class":139},[129,171703,171704,171706,171708,171710],{"class":131,"line":51},[129,171705,4104],{"class":135},[129,171707,10884],{"class":139},[129,171709,620],{"class":135},[129,171711,151105],{"class":139},[129,171713,171714],{"class":131,"line":1194},[129,171715,2414],{"emptyLinePlaceholder":56},[129,171717,171718],{"class":131,"line":1209},[129,171719,2414],{"emptyLinePlaceholder":56},[129,171721,171722,171724,171727],{"class":131,"line":1215},[129,171723,31948],{"class":135},[129,171725,171726],{"class":1977}," sub",[129,171728,151094],{"class":139},[129,171730,171731,171733,171735,171737],{"class":131,"line":1229},[129,171732,4104],{"class":135},[129,171734,10884],{"class":139},[129,171736,671],{"class":135},[129,171738,151105],{"class":139},[14,171740,171741],{},"在另一个文件中导入：",[120,171743,171745],{"className":30379,"code":171744,"language":30381,"meta":42,"style":42},"import my_math\n\nprint(my_math.add(1, 2))\n",[126,171746,171747,171754,171758],{"__ignoreMap":42},[129,171748,171749,171751],{"class":131,"line":132},[129,171750,30393],{"class":135},[129,171752,171753],{"class":139}," my_math\n",[129,171755,171756],{"class":131,"line":51},[129,171757,2414],{"emptyLinePlaceholder":56},[129,171759,171760,171762,171765,171767,171769,171771],{"class":131,"line":1194},[129,171761,30416],{"class":188},[129,171763,171764],{"class":139},"(my_math.add(",[129,171766,357],{"class":188},[129,171768,12450],{"class":139},[129,171770,217],{"class":188},[129,171772,30498],{"class":139},[71,171774,171776],{"id":171775},"_911-import导入","9.11 import导入",[100,171778,171780],{"id":171779},"_9111-导入模块","9.11.1 导入模块",[120,171782,171784],{"className":30379,"code":171783,"language":30381,"meta":42,"style":42},"import random\n\nprint(random.randint(1, 10))\n",[126,171785,171786,171792,171796],{"__ignoreMap":42},[129,171787,171788,171790],{"class":131,"line":132},[129,171789,30393],{"class":135},[129,171791,45329],{"class":139},[129,171793,171794],{"class":131,"line":51},[129,171795,2414],{"emptyLinePlaceholder":56},[129,171797,171798,171800,171803,171805,171807,171809],{"class":131,"line":1194},[129,171799,30416],{"class":188},[129,171801,171802],{"class":139},"(random.randint(",[129,171804,357],{"class":188},[129,171806,12450],{"class":139},[129,171808,585],{"class":188},[129,171810,30498],{"class":139},[100,171812,171814],{"id":171813},"_9112-导入指定内容","9.11.2 导入指定内容",[120,171816,171818],{"className":30379,"code":171817,"language":30381,"meta":42,"style":42},"from random import randint\n\nprint(randint(1, 10))\n",[126,171819,171820,171831,171835],{"__ignoreMap":42},[129,171821,171822,171824,171826,171828],{"class":131,"line":132},[129,171823,30738],{"class":135},[129,171825,57797],{"class":139},[129,171827,30393],{"class":135},[129,171829,171830],{"class":139}," randint\n",[129,171832,171833],{"class":131,"line":51},[129,171834,2414],{"emptyLinePlaceholder":56},[129,171836,171837,171839,171842,171844,171846,171848],{"class":131,"line":1194},[129,171838,30416],{"class":188},[129,171840,171841],{"class":139},"(randint(",[129,171843,357],{"class":188},[129,171845,12450],{"class":139},[129,171847,585],{"class":188},[129,171849,30498],{"class":139},[100,171851,171853],{"id":171852},"_9113-起别名","9.11.3 起别名",[120,171855,171857],{"className":30379,"code":171856,"language":30381,"meta":42,"style":42},"import random as rd\n\nprint(rd.randint(1, 10))\n",[126,171858,171859,171870,171874],{"__ignoreMap":42},[129,171860,171861,171863,171865,171867],{"class":131,"line":132},[129,171862,30393],{"class":135},[129,171864,57797],{"class":139},[129,171866,31384],{"class":135},[129,171868,171869],{"class":139}," rd\n",[129,171871,171872],{"class":131,"line":51},[129,171873,2414],{"emptyLinePlaceholder":56},[129,171875,171876,171878,171881,171883,171885,171887],{"class":131,"line":1194},[129,171877,30416],{"class":188},[129,171879,171880],{"class":139},"(rd.randint(",[129,171882,357],{"class":188},[129,171884,12450],{"class":139},[129,171886,585],{"class":188},[129,171888,30498],{"class":139},[120,171890,171892],{"className":30379,"code":171891,"language":30381,"meta":42,"style":42},"from random import randint as rint\n\nprint(rint(1, 10))\n",[126,171893,171894,171910,171914],{"__ignoreMap":42},[129,171895,171896,171898,171900,171902,171905,171907],{"class":131,"line":132},[129,171897,30738],{"class":135},[129,171899,57797],{"class":139},[129,171901,30393],{"class":135},[129,171903,171904],{"class":139}," randint ",[129,171906,31384],{"class":135},[129,171908,171909],{"class":139}," rint\n",[129,171911,171912],{"class":131,"line":51},[129,171913,2414],{"emptyLinePlaceholder":56},[129,171915,171916,171918,171921,171923,171925,171927],{"class":131,"line":1194},[129,171917,30416],{"class":188},[129,171919,171920],{"class":139},"(rint(",[129,171922,357],{"class":188},[129,171924,12450],{"class":139},[129,171926,585],{"class":188},[129,171928,30498],{"class":139},[100,171930,171932],{"id":171931},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[120,171934,171936],{"className":30379,"code":171935,"language":30381,"meta":42,"style":42},"from random import *\n",[126,171937,171938],{"__ignoreMap":42},[129,171939,171940,171942,171944,171946],{"class":131,"line":132},[129,171941,30738],{"class":135},[129,171943,57797],{"class":139},[129,171945,30393],{"class":135},[129,171947,171948],{"class":135}," *\n",[14,171950,171951],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[71,171953,171955],{"id":171954},"_912-常用内置模块","9.12 常用内置模块",[100,171957,171959],{"id":171958},"_9121-random","9.12.1 random",[120,171961,171963],{"className":30379,"code":171962,"language":30381,"meta":42,"style":42},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[126,171964,171965,171971,171975,171989,172008],{"__ignoreMap":42},[129,171966,171967,171969],{"class":131,"line":132},[129,171968,30393],{"class":135},[129,171970,45329],{"class":139},[129,171972,171973],{"class":131,"line":51},[129,171974,2414],{"emptyLinePlaceholder":56},[129,171976,171977,171979,171981,171983,171985,171987],{"class":131,"line":1194},[129,171978,30416],{"class":188},[129,171980,171802],{"class":139},[129,171982,357],{"class":188},[129,171984,12450],{"class":139},[129,171986,585],{"class":188},[129,171988,30498],{"class":139},[129,171990,171991,171993,171996,171998,172000,172002,172004,172006],{"class":131,"line":1209},[129,171992,30416],{"class":188},[129,171994,171995],{"class":139},"(random.choice([",[129,171997,149889],{"class":244},[129,171999,12450],{"class":139},[129,172001,150937],{"class":244},[129,172003,12450],{"class":139},[129,172005,159732],{"class":244},[129,172007,33144],{"class":139},[129,172009,172010,172012,172015,172017,172019,172021,172023,172025,172027,172029,172031,172033,172035,172037],{"class":131,"line":1215},[129,172011,30416],{"class":188},[129,172013,172014],{"class":139},"(random.sample([",[129,172016,357],{"class":188},[129,172018,12450],{"class":139},[129,172020,217],{"class":188},[129,172022,12450],{"class":139},[129,172024,211],{"class":188},[129,172026,12450],{"class":139},[129,172028,432],{"class":188},[129,172030,12450],{"class":139},[129,172032,458],{"class":188},[129,172034,112203],{"class":139},[129,172036,217],{"class":188},[129,172038,30498],{"class":139},[100,172040,172042],{"id":172041},"_9122-time","9.12.2 time",[120,172044,172046],{"className":30379,"code":172045,"language":30381,"meta":42,"style":42},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[126,172047,172048,172054,172058,172065,172073],{"__ignoreMap":42},[129,172049,172050,172052],{"class":131,"line":132},[129,172051,30393],{"class":135},[129,172053,31830],{"class":139},[129,172055,172056],{"class":131,"line":51},[129,172057,2414],{"emptyLinePlaceholder":56},[129,172059,172060,172062],{"class":131,"line":1194},[129,172061,30416],{"class":188},[129,172063,172064],{"class":139},"(time.time())\n",[129,172066,172067,172069,172071],{"class":131,"line":1209},[129,172068,95072],{"class":139},[129,172070,357],{"class":188},[129,172072,146],{"class":139},[129,172074,172075,172077,172079,172082],{"class":131,"line":1215},[129,172076,30416],{"class":188},[129,172078,140],{"class":139},[129,172080,172081],{"class":244},"\"1秒后执行\"",[129,172083,146],{"class":139},[100,172085,172087],{"id":172086},"_9123-datetime","9.12.3 datetime",[120,172089,172091],{"className":30379,"code":172090,"language":30381,"meta":42,"style":42},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[126,172092,172093,172105,172109,172119,172126],{"__ignoreMap":42},[129,172094,172095,172097,172100,172102],{"class":131,"line":132},[129,172096,30738],{"class":135},[129,172098,172099],{"class":139}," datetime ",[129,172101,30393],{"class":135},[129,172103,172104],{"class":139}," datetime\n",[129,172106,172107],{"class":131,"line":51},[129,172108,2414],{"emptyLinePlaceholder":56},[129,172110,172111,172114,172116],{"class":131,"line":1194},[129,172112,172113],{"class":139},"now ",[129,172115,185],{"class":135},[129,172117,172118],{"class":139}," datetime.now()\n",[129,172120,172121,172123],{"class":131,"line":1209},[129,172122,30416],{"class":188},[129,172124,172125],{"class":139},"(now)\n",[129,172127,172128,172130,172133,172136,172138,172141],{"class":131,"line":1215},[129,172129,30416],{"class":188},[129,172131,172132],{"class":139},"(now.strftime(",[129,172134,172135],{"class":244},"\"%Y-%m-",[129,172137,156692],{"class":188},[129,172139,172140],{"class":244}," %H:%M:%S\"",[129,172142,30498],{"class":139},[100,172144,172146],{"id":172145},"_9124-os","9.12.4 os",[120,172148,172150],{"className":30379,"code":172149,"language":30381,"meta":42,"style":42},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[126,172151,172152,172158,172162,172169],{"__ignoreMap":42},[129,172153,172154,172156],{"class":131,"line":132},[129,172155,30393],{"class":135},[129,172157,45306],{"class":139},[129,172159,172160],{"class":131,"line":51},[129,172161,2414],{"emptyLinePlaceholder":56},[129,172163,172164,172166],{"class":131,"line":1194},[129,172165,30416],{"class":188},[129,172167,172168],{"class":139},"(os.getcwd())\n",[129,172170,172171,172173,172176,172179],{"class":131,"line":1209},[129,172172,30416],{"class":188},[129,172174,172175],{"class":139},"(os.listdir(",[129,172177,172178],{"class":244},"\".\"",[129,172180,30498],{"class":139},[100,172182,172184],{"id":172183},"_9125-sys","9.12.5 sys",[120,172186,172188],{"className":30379,"code":172187,"language":30381,"meta":42,"style":42},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[126,172189,172190,172197,172201,172208],{"__ignoreMap":42},[129,172191,172192,172194],{"class":131,"line":132},[129,172193,30393],{"class":135},[129,172195,172196],{"class":139}," sys\n",[129,172198,172199],{"class":131,"line":51},[129,172200,2414],{"emptyLinePlaceholder":56},[129,172202,172203,172205],{"class":131,"line":1194},[129,172204,30416],{"class":188},[129,172206,172207],{"class":139},"(sys.version)\n",[129,172209,172210,172212],{"class":131,"line":1209},[129,172211,30416],{"class":188},[129,172213,172214],{"class":139},"(sys.path)\n",[71,172216,172218,172219,172221,172222,390],{"id":172217},"_913-if-name-main","9.13 if ",[289,172220,79811],{}," == \"",[289,172223,102059],{},[14,172225,172226,172227,172230],{},"模块被直接运行和被导入时，",[126,172228,172229],{},"__name__"," 的值不同。",[14,172232,172233,172234,24619],{},"创建 ",[126,172235,172236],{},"my_module.py",[120,172238,172240],{"className":30379,"code":172239,"language":30381,"meta":42,"style":42},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[126,172241,172242,172250,172260,172264,172268,172280],{"__ignoreMap":42},[129,172243,172244,172246,172248],{"class":131,"line":132},[129,172245,31948],{"class":135},[129,172247,5224],{"class":1977},[129,172249,151094],{"class":139},[129,172251,172252,172254,172256,172258],{"class":131,"line":51},[129,172253,4104],{"class":135},[129,172255,10884],{"class":139},[129,172257,620],{"class":135},[129,172259,151105],{"class":139},[129,172261,172262],{"class":131,"line":1194},[129,172263,2414],{"emptyLinePlaceholder":56},[129,172265,172266],{"class":131,"line":1209},[129,172267,2414],{"emptyLinePlaceholder":56},[129,172269,172270,172272,172274,172276,172278],{"class":131,"line":1215},[129,172271,1545],{"class":135},[129,172273,31221],{"class":188},[129,172275,101560],{"class":135},[129,172277,101563],{"class":244},[129,172279,3753],{"class":139},[129,172281,172282,172284,172286,172288,172290,172292],{"class":131,"line":1229},[129,172283,31300],{"class":188},[129,172285,166601],{"class":139},[129,172287,357],{"class":188},[129,172289,12450],{"class":139},[129,172291,217],{"class":188},[129,172293,30498],{"class":139},[14,172295,172296],{},"作用：",[83,172298,172299,172302],{},[86,172300,172301],{},"直接运行该文件时，执行测试代码。",[86,172303,172304],{},"被其他文件导入时，不执行测试代码。",[14,172306,172307],{},"这是写模块时很常用的习惯。",[71,172309,172311],{"id":172310},"_914-包","9.14 包",[14,172313,172314,172315,172318],{},"包是包含 ",[126,172316,172317],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172320,172321],{},"目录结构：",[120,172323,172326],{"className":172324,"code":172325,"language":5202,"meta":42},[5200],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[126,172327,172325],{"__ignoreMap":42},[14,172329,172330],{},"导入：",[120,172332,172334],{"className":30379,"code":172333,"language":30381,"meta":42,"style":42},"from utils.file_utils import read_file\n",[126,172335,172336],{"__ignoreMap":42},[129,172337,172338,172340,172343,172345],{"class":131,"line":132},[129,172339,30738],{"class":135},[129,172341,172342],{"class":139}," utils.file_utils ",[129,172344,30393],{"class":135},[129,172346,172347],{"class":139}," read_file\n",[14,172349,172350,172352],{},[126,172351,172317],{}," 可以为空，也可以写包初始化逻辑。",[71,172354,172356],{"id":172355},"_915-第三方包","9.15 第三方包",[14,172358,172359,172360,172362],{},"第三方包通过 ",[126,172361,23846],{}," 安装。",[120,172364,172366],{"className":23837,"code":172365,"language":23839,"meta":42,"style":42},"pip install requests\n",[126,172367,172368],{"__ignoreMap":42},[129,172369,172370,172372,172374],{"class":131,"line":132},[129,172371,23846],{"class":1977},[129,172373,23849],{"class":244},[129,172375,146099],{"class":244},[14,172377,172378],{},"使用：",[120,172380,172382],{"className":30379,"code":172381,"language":30381,"meta":42,"style":42},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[126,172383,172384,172390,172394,172409],{"__ignoreMap":42},[129,172385,172386,172388],{"class":131,"line":132},[129,172387,30393],{"class":135},[129,172389,146099],{"class":139},[129,172391,172392],{"class":131,"line":51},[129,172393,2414],{"emptyLinePlaceholder":56},[129,172395,172396,172399,172401,172404,172407],{"class":131,"line":1194},[129,172397,172398],{"class":139},"response ",[129,172400,185],{"class":135},[129,172402,172403],{"class":139}," requests.get(",[129,172405,172406],{"class":244},"\"https:\u002F\u002Fwww.example.com\"",[129,172408,146],{"class":139},[129,172410,172411,172413],{"class":131,"line":1209},[129,172412,30416],{"class":188},[129,172414,172415],{"class":139},"(response.status_code)\n",[14,172417,172418],{},"查看已安装包：",[120,172420,172422],{"className":23837,"code":172421,"language":23839,"meta":42,"style":42},"pip list\n",[126,172423,172424],{"__ignoreMap":42},[129,172425,172426,172428],{"class":131,"line":132},[129,172427,23846],{"class":1977},[129,172429,118956],{"class":244},[14,172431,172432],{},"导出项目依赖：",[120,172434,172435],{"className":23837,"code":146294,"language":23839,"meta":42,"style":42},[126,172436,172437],{"__ignoreMap":42},[129,172438,172439,172441,172443,172445],{"class":131,"line":132},[129,172440,23846],{"class":1977},[129,172442,146303],{"class":244},[129,172444,26223],{"class":135},[129,172446,146308],{"class":244},[14,172448,172449],{},"安装项目依赖：",[120,172451,172452],{"className":23837,"code":146314,"language":23839,"meta":42,"style":42},[126,172453,172454],{"__ignoreMap":42},[129,172455,172456,172458,172460,172462],{"class":131,"line":132},[129,172457,23846],{"class":1977},[129,172459,23849],{"class":244},[129,172461,119640],{"class":188},[129,172463,146308],{"class":244},[71,172465,172467],{"id":172466},"_916-模块搜索路径","9.16 模块搜索路径",[14,172469,172470,172471,172474],{},"Python 导入模块时会在 ",[126,172472,172473],{},"sys.path"," 中查找。",[120,172476,172478],{"className":30379,"code":172477,"language":30381,"meta":42,"style":42},"import sys\n\nfor path in sys.path:\n    print(path)\n",[126,172479,172480,172486,172490,172502],{"__ignoreMap":42},[129,172481,172482,172484],{"class":131,"line":132},[129,172483,30393],{"class":135},[129,172485,172196],{"class":139},[129,172487,172488],{"class":131,"line":51},[129,172489,2414],{"emptyLinePlaceholder":56},[129,172491,172492,172494,172497,172499],{"class":131,"line":1194},[129,172493,3039],{"class":135},[129,172495,172496],{"class":139}," path ",[129,172498,26044],{"class":135},[129,172500,172501],{"class":139}," sys.path:\n",[129,172503,172504,172506],{"class":131,"line":1209},[129,172505,31300],{"class":188},[129,172507,169230],{"class":139},[14,172509,172510],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172512,157624],{},[120,172514,172517],{"className":172515,"code":172516,"language":5202,"meta":42},[5200],"random.py\njson.py\ntime.py\n",[126,172518,172516],{"__ignoreMap":42},[14,172520,172521],{},"这些文件名可能导致导入异常。",[71,172523,172525],{"id":172524},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172527,172321],{},[120,172529,172532],{"className":172530,"code":172531,"language":5202,"meta":42},[5200],"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",[126,172533,172531],{"__ignoreMap":42},[14,172535,172536,24619],{},[126,172537,172538],{},"utils\u002Ffile_utils.py",[120,172540,172542],{"className":30379,"code":172541,"language":30381,"meta":42,"style":42},"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",[126,172543,172544,172550,172560,172564,172568,172578,172588,172596,172602,172606,172633,172643,172647,172651,172661,172687],{"__ignoreMap":42},[129,172545,172546,172548],{"class":131,"line":132},[129,172547,30393],{"class":135},[129,172549,147092],{"class":139},[129,172551,172552,172554,172556,172558],{"class":131,"line":51},[129,172553,30738],{"class":135},[129,172555,108312],{"class":139},[129,172557,30393],{"class":135},[129,172559,108317],{"class":139},[129,172561,172562],{"class":131,"line":1194},[129,172563,2414],{"emptyLinePlaceholder":56},[129,172565,172566],{"class":131,"line":1209},[129,172567,2414],{"emptyLinePlaceholder":56},[129,172569,172570,172572,172575],{"class":131,"line":1215},[129,172571,31948],{"class":135},[129,172573,172574],{"class":1977}," read_json",[129,172576,172577],{"class":139},"(path):\n",[129,172579,172580,172583,172585],{"class":131,"line":1229},[129,172581,172582],{"class":139},"    path ",[129,172584,185],{"class":135},[129,172586,172587],{"class":139}," Path(path)\n",[129,172589,172590,172592,172594],{"class":131,"line":1235},[129,172591,3115],{"class":135},[129,172593,38931],{"class":135},[129,172595,169311],{"class":139},[129,172597,172598,172600],{"class":131,"line":1326},[129,172599,14767],{"class":135},[129,172601,51839],{"class":139},[129,172603,172604],{"class":131,"line":1332},[129,172605,2414],{"emptyLinePlaceholder":56},[129,172607,172608,172610,172612,172615,172617,172619,172621,172623,172625,172627,172629,172631],{"class":131,"line":1344},[129,172609,34179],{"class":135},[129,172611,146792],{"class":188},[129,172613,172614],{"class":139},"(path, ",[129,172616,146802],{"class":244},[129,172618,12450],{"class":139},[129,172620,146807],{"class":5231},[129,172622,185],{"class":135},[129,172624,146812],{"class":244},[129,172626,13729],{"class":139},[129,172628,31384],{"class":135},[129,172630,148154],{"class":5231},[129,172632,3753],{"class":139},[129,172634,172635,172637,172639,172641],{"class":131,"line":1626},[129,172636,14767],{"class":135},[129,172638,148165],{"class":139},[129,172640,45355],{"class":5231},[129,172642,146],{"class":139},[129,172644,172645],{"class":131,"line":1631},[129,172646,2414],{"emptyLinePlaceholder":56},[129,172648,172649],{"class":131,"line":1637},[129,172650,2414],{"emptyLinePlaceholder":56},[129,172652,172653,172655,172658],{"class":131,"line":1642},[129,172654,31948],{"class":135},[129,172656,172657],{"class":1977}," write_json",[129,172659,172660],{"class":139},"(path, data):\n",[129,172662,172663,172665,172667,172669,172671,172673,172675,172677,172679,172681,172683,172685],{"class":131,"line":1656},[129,172664,34179],{"class":135},[129,172666,146792],{"class":188},[129,172668,172614],{"class":139},[129,172670,151977],{"class":244},[129,172672,12450],{"class":139},[129,172674,146807],{"class":5231},[129,172676,185],{"class":135},[129,172678,146812],{"class":244},[129,172680,13729],{"class":139},[129,172682,31384],{"class":135},[129,172684,148154],{"class":5231},[129,172686,3753],{"class":139},[129,172688,172689,172692,172694,172696,172698,172700,172702,172704,172706,172708,172710],{"class":131,"line":1661},[129,172690,172691],{"class":139},"        json.dump(data, ",[129,172693,45355],{"class":5231},[129,172695,12450],{"class":139},[129,172697,147138],{"class":5231},[129,172699,185],{"class":135},[129,172701,33988],{"class":188},[129,172703,12450],{"class":139},[129,172705,152013],{"class":5231},[129,172707,185],{"class":135},[129,172709,217],{"class":188},[129,172711,146],{"class":139},[14,172713,172714,24619],{},[126,172715,154608],{},[120,172717,172719],{"className":30379,"code":172718,"language":30381,"meta":42,"style":42},"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",[126,172720,172721,172732,172736,172749,172769],{"__ignoreMap":42},[129,172722,172723,172725,172727,172729],{"class":131,"line":132},[129,172724,30738],{"class":135},[129,172726,172342],{"class":139},[129,172728,30393],{"class":135},[129,172730,172731],{"class":139}," read_json, write_json\n",[129,172733,172734],{"class":131,"line":51},[129,172735,2414],{"emptyLinePlaceholder":56},[129,172737,172738,172740,172742,172745,172747],{"class":131,"line":1194},[129,172739,159717],{"class":139},[129,172741,185],{"class":135},[129,172743,172744],{"class":139}," read_json(",[129,172746,151832],{"class":244},[129,172748,146],{"class":139},[129,172750,172751,172753,172755,172757,172759,172761,172763,172765,172767],{"class":131,"line":1209},[129,172752,170535],{"class":139},[129,172754,62680],{"class":244},[129,172756,51438],{"class":139},[129,172758,149889],{"class":244},[129,172760,12450],{"class":139},[129,172762,151473],{"class":244},[129,172764,51438],{"class":139},[129,172766,1128],{"class":188},[129,172768,165153],{"class":139},[129,172770,172771,172774,172776],{"class":131,"line":1215},[129,172772,172773],{"class":139},"write_json(",[129,172775,151832],{"class":244},[129,172777,172778],{"class":139},", students)\n",[71,172780,172782],{"id":172781},"_918-易错点","9.18 易错点",[83,172784,172785,172788,172793,172798,172801,172804],{},[86,172786,172787],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[86,172789,172790,172791,28386],{},"能指定异常类型就不要裸写 ",[126,172792,170895],{},[86,172794,172795,172797],{},[126,172796,171270],{}," 无论是否出错都会执行。",[86,172799,172800],{},"模块文件名不要和标准库重名。",[86,172802,172803],{},"导入自己写的模块时，要注意运行目录。",[86,172805,172806],{},"第三方包要安装到当前解释器或虚拟环境中。",[71,172808,172810],{"id":172809},"_919-本章练习","9.19 本章练习",[83,172812,172813,172816,172819,172825,172832],{},[86,172814,172815],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[86,172817,172818],{},"写函数读取文件，如果文件不存在则返回空字符串。",[86,172820,172233,172821,172824],{},[126,172822,172823],{},"math_utils.py","，实现加减乘除函数并导入使用。",[86,172826,172827,172828,172831],{},"创建一个 ",[126,172829,172830],{},"utils"," 包，把 JSON 读写函数放进去。",[86,172833,172834],{},"写一个程序，捕获除零异常和输入格式异常。",[5141,172836,172837],{},"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":42,"searchDepth":51,"depth":51,"links":172839},[172840,172841,172842,172843,172844,172845,172846,172847,172848,172849,172850,172856,172863,172865,172866,172867,172868,172869,172870],{"id":170692,"depth":51,"text":170693},{"id":170820,"depth":51,"text":170821},{"id":170869,"depth":51,"text":170870},{"id":171018,"depth":51,"text":171019},{"id":171190,"depth":51,"text":171191},{"id":171259,"depth":51,"text":171260},{"id":171370,"depth":51,"text":171371},{"id":171496,"depth":51,"text":171497},{"id":171621,"depth":51,"text":171622},{"id":171676,"depth":51,"text":171677},{"id":171775,"depth":51,"text":171776,"children":172851},[172852,172853,172854,172855],{"id":171779,"depth":1194,"text":171780},{"id":171813,"depth":1194,"text":171814},{"id":171852,"depth":1194,"text":171853},{"id":171931,"depth":1194,"text":171932},{"id":171954,"depth":51,"text":171955,"children":172857},[172858,172859,172860,172861,172862],{"id":171958,"depth":1194,"text":171959},{"id":172041,"depth":1194,"text":172042},{"id":172086,"depth":1194,"text":172087},{"id":172145,"depth":1194,"text":172146},{"id":172183,"depth":1194,"text":172184},{"id":172217,"depth":51,"text":172864},"9.13 if name == \"main\"",{"id":172310,"depth":51,"text":172311},{"id":172355,"depth":51,"text":172356},{"id":172466,"depth":51,"text":172467},{"id":172524,"depth":51,"text":172525},{"id":172781,"depth":51,"text":172782},{"id":172809,"depth":51,"text":172810},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170684,"description":53},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172877,"title":172878,"body":172879,"description":173042,"extension":54,"meta":173043,"navigation":56,"path":173044,"seo":173045,"stem":173046,"__hash__":173047},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172880,"toc":173037},[172881,172884,172887,172890,172901,172903,172977,172980,172983,172986,172989,172992,172995,172998,173001,173004,173007],[10,172882,172878],{"id":172883},"python教程",[14,172885,172886],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172888,172889],{},"建议学习环境：",[83,172891,172892,172895,172898],{},[86,172893,172894],{},"Python 版本：Python 3.10 及以上。",[86,172896,172897],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[86,172899,172900],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[71,172902,117079],{"id":117079},[83,172904,172905,172911,172917,172923,172929,172935,172941,172947,172953,172959,172965,172971],{},[86,172906,172907],{},[20,172908,172910],{"href":172909},".\u002Fch1-Python","Python环境与第一个程序",[86,172912,172913],{},[20,172914,172916],{"href":172915},".\u002Fch2","基础语法、变量与字符串",[86,172918,172919],{},[20,172920,172922],{"href":172921},".\u002Fch3","判断语句",[86,172924,172925],{},[20,172926,172928],{"href":172927},".\u002Fch4","循环语句",[86,172930,172931],{},[20,172932,172934],{"href":172933},".\u002Fch5","函数基础",[86,172936,172937],{},[20,172938,172940],{"href":172939},".\u002Fch6","数据容器",[86,172942,172943],{},[20,172944,172946],{"href":172945},".\u002Fch7","函数进阶",[86,172948,172949],{},[20,172950,172952],{"href":172951},".\u002Fch8","文件操作",[86,172954,172955],{},[20,172956,172958],{"href":172957},".\u002Fch9","异常、模块与包",[86,172960,172961],{},[20,172962,172964],{"href":172963},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[86,172966,172967],{},[20,172968,172970],{"href":172969},".\u002Fch11","面向对象基础",[86,172972,172973],{},[20,172974,172976],{"href":172975},".\u002Fch12","综合案例与复习路线",[71,172978,172979],{"id":172979},"学习路线",[14,172981,172982],{},"第一阶段：能运行程序。",[14,172984,172985],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,172987,172988],{},"第二阶段：能组织数据。",[14,172990,172991],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,172993,172994],{},"第三阶段：能封装逻辑。",[14,172996,172997],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,172999,173000],{},"第四阶段：能做小项目。",[14,173002,173003],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[71,173005,173006],{"id":173006},"参考资料",[83,173008,173009,173016,173023,173030],{},[86,173010,173011,173012],{},"黑马程序员 Python 入门教程推荐：",[20,173013,173014],{"href":173014,"rel":173015},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24],[86,173017,173018,173019],{},"Python 官方中文教程：",[20,173020,173021],{"href":173021,"rel":173022},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24],[86,173024,173025,173026],{},"Python 标准库文档：",[20,173027,173028],{"href":173028,"rel":173029},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24],[86,173031,173032,173033],{},"pyecharts 文档：",[20,173034,173035],{"href":173035,"rel":173036},"https:\u002F\u002Fpyecharts.org\u002F",[24],{"title":42,"searchDepth":51,"depth":51,"links":173038},[173039,173040,173041],{"id":117079,"depth":51,"text":117079},{"id":172979,"depth":51,"text":172979},{"id":173006,"depth":51,"text":173006},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23393},"\u002Fwiki\u002F2024-10-10-python",{"title":172878,"description":173042},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331398620]